Kata pengantar
Ketika kami melakukan pengembangan layanan back-end, terutama ketika data besar dimasukkan dalam batch, kerangka kerja ORM biasa (Mybatis, Hibernate, JPA) tidak dapat memenuhi persyaratan kinerja program. Tentu saja, tidak mungkin bagi kita untuk menggunakan JDBC asli untuk beroperasi, sehingga meskipun efisiensinya akan tinggi, kompleksitasnya akan meningkat.
Mempertimbangkan secara komprehensif, kami menggunakan JDBCtemplate di Spring dan bernama ParameterJdBctemplate untuk melakukan operasi batch.
Sebelum transformasi
Sebelum kita memulai penjelasan, mari kita lihat bagaimana JPA dioperasikan dalam batch.
Pengguna entitas:
AppStudent kelas publik {Private Integer ID; Private Integer ClassID; nama string pribadi; usia bilangan bulat pribadi; // pseudocode, dihilangkan konstruksi dan dapatkan, atur metode}Pseudocode DynamicQuery:
@RepositoryPublic kelas DynamicQueryImpl mengimplementasikan DynamicQuery {@PersistenceContext Private EntityManager EM; Public EntityManager getEntityManager () {return em; } // Faktanya, ini hanya untuk loop dan menggunakan metode Syve EntityManager untuk menyelamatkan @Override public <t> void Savelist (Daftar <T> Hasil) {for (int i = 0; i <resultList.size (); i ++) {t t = hancur.get (i); em.persist (t); }}}Setelah transformasi
Jdbctemplate
Metode utama yang disediakan oleh JDBCtemplate:
Kami hanya perlu menggunakan @Autowired untuk injeksi di kelas JDBCtemplate:
@AutowiredPrivate JDBCtemplate JDBCtemplate;
Operasi Batch Insert:
public void batchSave () {list <object []> batchArgs = new ArrayList <object []> (); Batchargs.add (objek baru [] {1, "Xiao Ming", 21}); Batchargs.add (objek baru [] {2, "xiaohong", 22}); Batchargs.add (objek baru [] {3, "lucy", 23}); String sql = "masukkan ke dalam nilai pengguna (nama pengguna, kata sandi) (?,?)"; jdbctemplate.batchupdate (sql, batchargs);}Di atas pada dasarnya mengimplementasikan fungsi insert batch, tetapi ketika ada banyak bidang database, mungkin tidak begitu baik untuk menyandikannya dalam bentuk placeholder. Di sini Spring juga menyediakan SimpleJdBctemplate (Spring3.1+ ditandai sebagai ketinggalan zaman nanti, tetapi sepenuhnya dihapus pada musim semi 4.3. Yang terakhir dapat sepenuhnya memenuhi kebutuhan) dan namedparameterjdbctemplate Template Engine.
BernamaParameterjdbctemplate
Saya percaya bahwa siswa yang menggunakan hibernate tahu bahwa itu dapat digunakan dalam HQL? Atau: * Untuk mengonfigurasi parameter kueri secara eksternal. Dalam kerangka kerja JDBC musim semi, cara untuk mengikat parameter SQL juga disediakan, menggunakan parameter bernama.
Kami hanya perlu menggunakan @Autowired untuk injeksi di kelas namedparameterjdbctemplate:
@AutowiredPrivate bernamaParameterjdbctemplate bernamaParameterjdbctemplate;
Operasi Batch Insert:
public void batchSave () {list <user> list = new ArrayList <User> (); // tambahkan daftar pengguna baru.add (Appstudent baru (1, "Zhang San", 21)); list.add (Appstudent baru (1, "Li Si", 22)); list.add (Appstudent baru (1, "Wang Ermazi", 23)); // batch to array sqlparametersource [] beansources = sqlparametersourceutils.createBatch (list.toArray ()); String sql = "Sisipkan ke app_student (class_id, name, usia) values (: classId ,: name ,: use)"; namedparameterjdbctemplate.batchupdate (sql, beansources);}Akhirnya, kami menggunakan System.currentTimemillis () untuk membandingkan dan mencetak waktu eksekusi sebelum dan sesudah transformasi spesifik.
Long start = System.CurrentTimeMillis (); // Ubah Kode sebelum dan sesudah, dan melengkapi sendiri Long End = System.CurrentTimeMillis (); System.out.println ("Kali Kedua:"+(end-start));Cepat pasti cepat. Adapun seberapa cepat itu, perlu membuat perbandingan yang relevan berdasarkan volume data dan konfigurasi mesin.
Kode Sumber Proyek: https://gitee.com/52itstyle/spring-data-jpa
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.