Baru -baru ini, saya telah mengembangkan contoh menulis tentang pengemasan di waktu luang saya, dan kemudian memilah yang sebelumnya.
public class BaseDao<T> {Connection conn;PreparedStatement st;ResultSet rs;JdbcUtil jdbcUtil = new JdbcUtil();int result = 0;private Class<T> persistentClass;@SuppressWarnings("unchecked")public BaseDaoUtil(){conn = jdbcUtil.getConnection();ParameterizedType type = (ParameterizedType) getClass (). getGeneriCSuperclass (); persistentClass = (class <t>) type.getActualTypearguments () [0];} /** * save * @param entitas * @return * /public int save (t entitas) lemparan pengecualian {string sql = "insert ke dalam" + entity.get.gets () () () () () () () () () () (gets. list = this.matchPojoMethods(entity,"get");Iterator<Method> iter = list.iterator();Object obj[] = new Object[list.size()];int i = 0;//Split field order insert into table name(id,name,email, while(iter.hasNext()) { Method method = iter.next(); sql += method.getName (). Substring (3) .TolowerCase () + ","; objek baru [] {})); } else {obj [i] = method.invoke (entitas, objek baru [] {}); } i ++; } // Hapus yang terakhir, simbol masukkan ke dalam nama tabel (id, nama, email) nilai (sql = sql.substring (0, sql.lastindexof (","))+") nilai ("; // rakitkan SQL SQL Insert Insert ke tabel nama (id, nama, email) nilai (?,? + "?,"; Conn.PrepareStatement (SQL); untuk (int j = 0; j <obj.length; j ++) {st.setObject (j+1, obj [j]);} hasil = st. executeUpdate ();} retse (sqlexception e) {e.printstacktack ();} JDBC (sqlexception E) {e.printstack ();} JDBC; Hapus * @param objek * @return * @throws sqlexception */public int deleteId (objek objek) melempar pengecualian {string sql = "hapus dari" + persistentClass.getSimpLename (). TolowerCase () + "di mana"; // Gunakan konstruktor subkelas untuk mendapatkan jenis spesifik dari parameter. Misalnya, berdasarkan <T>, yaitu, dapatkan jenis spesifik T. entitas = persistentClass.newInstance (); // Objek metode yang menyimpan kunci utama POJO (atau tabel yang sedang dioperasikan) IDMethod = null; Daftar <nethod> list = this.matchpojomethods (entitas, "set"); Iterator <method> iter = list.iterator (); // filter objek metode while (iter.hasnext ()) {Method tempmethod = iter.next (); if (tempmethod.getName (). indexOf ("id")! = -1 && tempmethod.getName (). substring (3) .length () == 2) {idMethod = tempmethod; } lain if ((entity.getClass (). getsImplename () + "id"). EqualSignorecase (tempmethod.getName (). Substring (3))) {idMethod = tempmethod; }} // Surat pertama dikonversi ke huruf kecil SQL += idMethod.getName (). Substring (3,4) .TolowerCase () +idMethod.getName (). Substring (4) +"=?"; System.out.println (sql); st = conn.preparestatement (sql); // menilai jenis id jika (objek instance dari integer) {st.setint (1, (integer) objek); } lain jika (objek instance dari string) {st.setstring (1, (string) objek); } result = st.executeUpdate (); jdbcutil.getclose (rs, st, conn); hasil pengembalian;}/** * memodifikasi * @param entitas * @return * @throws Exception */Public int Update (t entitas) lemparan Exception {string sql = "update" + entity.getclass (). this.matchpojomethods (entitas, "get"); // memuat parameter objek obj [] = objek baru [list.size ()]; int i = 0; // objek metode sementara, bertanggung jawab untuk mengulangi objek metode mode. Metode tempmethod = null; // Karena ID tidak perlu dimodifikasi selama modifikasi, menambahkan parameter dalam rangka harus memindahkan ID ke akhir. Metode idMethod = null; Iterator <method> iter = list.iterator (); while (iter.hasnext ()) {tempmethod = iter.next (); // Jika nama metode berisi string ID dan panjangnya 2, itu dianggap sebagai ID. if (tempmethod.getName (). lastIndexof ("id")! = -1 && tempmethod.getName (). substring (3) .lengthod () == 2) {obj [list.size () -1] = tempmethod.invoke (entitas, objek baru [] {}); // Simpan objek bidang ID ke dalam variabel dan hapus di set. IDMethod = Tempmethod; iter.remove (); // Jika nama metode dihapus dan string set/get tidak kompatibel dengan pojo + "id" (case tidak sensitif), itu dianggap sebagai id} lain jika ((entity.getClass (). GetsImplename () + "id"). EqualSignorecase (Tempmethod.getName (). Substring (3))). tempmethod.invoke (entitas, objek baru [] {}); IDMethod = Tempmethod; iter.remove (); }} // Pindahkan pointer iteratif ke posisi pertama iter = list.iterator (); while (iter.hasnext ()) {tempmethod = iter.next (); sql + = tempmethod.getName (). substring (3) .tolowercase () + "=?,"; obj [i] = tempmethod.invoke (entitas, objek baru [] {}); i ++; } // Hapus yang terakhir, simbol sql = sql.substring (0, sql.LastIndexof (",")); // Tambahkan kondisi sql + = "di mana" + idmethod.getName (). Substring (3) .TolowerCase () + "=?"; // splicing SQL selesai, cetak SQL Pernyataan System.out.println (SQL); ST = Conn.PrepareStatement (SQL); untuk (int j = 0; j <obj.length; j ++) {st.setObject (j+1, obj [j]);} result = st.executeUpdate (); jdbcutil.getClose (RS, ST, Conn); Hasil pengembalian;} public t findById (objek objek) melempar Exception {String sql = "Select * from" + persistentClass.getSimpleName (). TolowerCase () + "di mana"; // Gunakan konstruktor subkelas untuk mendapatkan jenis spesifik dari jenis parameterisasi. Misalnya, berdasarkan <T>, yaitu, dapatkan jenis spesifik dari entitas T = persistentClass.newInstance (); // Objek metode yang menyimpan kunci utama POJO (atau tabel yang sedang dioperasikan) IDMethod = null; Daftar <nethod> list = this.matchpojomethods (entitas, "set"); Iterator <method> iter = list.iterator (); // filter objek metode while (iter.hasnext ()) {Method tempmethod = iter.next (); if (tempmethod.getName (). indexOf ("id")! = -1 && tempmethod.getName (). substring (3) .length () == 2) {idMethod = tempmethod; } lain if ((entity.getClass (). getsImplename () + "id"). EqualSignorecase (tempmethod.getName (). Substring (3))) {idMethod = tempmethod; }} // Surat pertama dikonversi ke huruf kecil SQL += idMethod.getName (). Substring (3,4) .TolowerCase () +idMethod.getName (). Substring (4) +"=?"; System.out.println (sql); st = conn.preparestatement (sql); // menilai jenis id jika (objek instance dari integer) {st.setint (1, (integer) objek); } lain jika (objek instance dari string) {st.setstring (1, (string) objek); } rs = st.executeQuery (); // Arahkan pointer ke baris pertama iterator iter = list.iterator (); // enkapsulate while (rs.next ()) {while (iter.hasnext ()) {Method Method = iter.next (); if (method.getParameterTypes () [0] .getSimpleName (). IndexOf ("String")! = -1) {// Karena dalam set daftar, urutan objek metode yang akan diambil tidak sesuai dengan urutan data (misalnya ". Nama yang sesuai. this.setstring (metode, entitas, rs.getString (method.getName (). substring (3) .tolowercase ())); } lain if (method.getParameterTypes () [0] .getSImplename (). IndexOf ("date")! = -1) {this.setDate (Method, entitas, rs.getDate (method.getName (). Substring (3) .tolowercase ())); } else {this.setint (Method, entitas, rs.getint (method.getName (). Substring (3) .tolowerCase ())); }}} jdbcutil.getclose (rs, st, conn); return entity;}/*** Saring semua objek metode dengan string yang masuk di kelas PoJO saat ini dan kembalikan koleksi daftar. */Daftar Privat <nethod> MatchPojomethods (t entitas, string methodName) {// Dapatkan semua metode Objek Metode Pojo Metode Pojo saat ini [] Method = entity.getClass (). GetDecLaredMethods (); // Daftar Kontainer Menyimpan Semua Objek Metode dengan Get String List <at Method> Daftar = ArrayList baru <nethod> (); // Saring semua objek metode dengan string get di kelas POJO saat ini dan simpan di wadah daftar untuk (int index = 0; index <methods.length; index ++) {if (metode [index] .getName (). IndexOf (methodname)! = -1) {list.add (metode [indeks]); }} daftar pengembalian; } / ** * Ketika tipe parameter adalah string, set parameter untuk bidang entitas, sesuai dengan set * / public string setString (metode metode, t entitas, string arg) melempar pengecualian {return (string) method.invoke (entitas, objek baru [] {arg}); } / ** * Ketika tipe parameter adalah tanggal, set parameter untuk bidang entitas, sesuai dengan set * / setDate tanggal publik (metode metode, t entitas, tanggal arg) melempar pengecualian {return (date) method.invoke (entitas, objek baru [] {arg}); } / ** * Ketika jenis parameter adalah integer atau int, set parameter untuk bidang entitas, sesuai dengan set * / public integer setint (metode metode, t entitas, integer arg) melempar pengecualian {return (integer) method.invoke (entitas, objek baru [] {arg}); }}Artikel di atas berdasarkan (contoh kode) yang dienkapsulasi oleh JDBC adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.