Recientemente, he desarrollado un ejemplo de escritura sobre el embalaje en mi tiempo libre y luego resolví los anteriores.
public class BasedAo <t> {Connection Conn; PrepareStatement st; resultset rs; jdbcutil jdbcutil = new jdbcutil (); int resultado = 0; clase privada <t> persistentClass; @SuppressWarnings ("sin verificar") public a base de base () {Conn = jdbcutil.getConnection (); (ParameterizedType) getClass (). GetGenericsuperClass (); persistentClass = (class <t>) type.getActualTypeArGeGuments () [0];} /** * salvar * @param entity * @return * /public int save (t entidad) Excepción {string sql = "insert en"+ entity.getClass (). GetsEmpleMeMeMe (). +"("; List <Method> list = this.matchPoJomethods (entidad, "get"); iterator <Shethod> iter = list.iterator (); obj obj [] = new Object [list.size ()]; int i = 0; // Split de orden de campo Insertar en Tabla (ID, nombre, correo electrónico, mientras (iter.hasnext ()) {Method Method = iter.Ext (); Method.getName (). Substring (3) .tolowerCase () + ","; sbf.format (método.invoke (entidad, nuevo objeto [] {})); } else {obj [i] = Method.Invoke (entidad, nuevo objeto [] {}); } i ++; } // Eliminar el último, símbolo insertar insertar en el nombre de la tabla (id, nombre, correo electrónico) valores (sql = sql.substring (0, sql.lastIndexof (","))+") valores ("; // ensamblar sql sql insertar insertar en el nombre de tabla (id, nombre, correo electrónico) valores (?,?,?, Para (int j = 0; j <list.sssiz + = "?,"; Conn.PrepareStatement (SQL); Eliminar * @param objeto * @return * @throws sqlexception */public int deleteid (objeto objeto) lanza la excepción {string sql = "eliminar de" + persistentClass.getSimplename (). TOLOWERCase () + "Where"; // Use el constructor de la subclass para obtener el tipo específico del tipo parametrizado. Por ejemplo, basada en la base <t>, es decir, obtenga el tipo específico de T. Entity = PersistentClass.NewinStance (); // El objeto de método que almacena la clave principal de POJO (o la tabla que está operando) método idmethod = null; List <setmet> list = this.matchPOJomethods (entidad, "set"); Iterador <method> iter = list.iterator (); // Filtrar el objeto del método while (iter.hasnext ()) {método tempMethod = iter.next (); if (tempMethod.getName (). indexOf ("id")! = -1 && tempMethod.getName (). Substring (3) .Length () == 2) {idmethod = tempMethod; } else if ((entity.getClass (). getSimplename () + "id"). EqualSignorEcase (tempMethod.getName (). sustring (3))) {idmethod = tempMethod; }} // La primera letra se convierte en SQL += idmethod.getName (). Substring (3,4) .tolowercase () +idmethod.getName (). Substring (4) +"=?"; System.out.println (sql); st = conn.prepareStatement (sql); // juzga el tipo de id if (objeto instancia de integer) {st.setInt (1, (integer) objeto); } else if (objeto instanciaf string) {St.setString (1, (string) objeto); } resultado = St.ExeCuteUpDate (); jdbcutil.getClose (rs, st, conn); return resultado;}/** * modificar * @param entity * @return * @throws excepción */public int upputando (t entity) lanza excepción {string sql = "update" + entity.getClasss (). this.matchPOJOmethods (entidad, "get"); // Parámetros de carga Obj obj [] = nuevo objeto [list.size ()]; int i = 0; // Objeto de método temporal, responsable de iterar el objeto del método de moda. Método tempMethod = null; // Dado que la identificación no se requiere modificarse durante la modificación, agregar parámetros en orden debe mover la ID al final. Método idmethod = null; Iterador <method> iter = list.iterator (); while (iter.hasnext ()) {tempMethod = iter.next (); // Si el nombre del método contiene una cadena de ID y la longitud es 2, se considera una ID. if (tempMethod.getName (). LastIndexOf ("id")! = -1 && tempMethod.getName (). Substring (3) .Length () == 2) {obj [list.size () -1] = tempMethod.invoke (entidad, nuevo objeto [] {}); // Guardar el objeto del campo ID en una variable y eliminarlo en el conjunto. idmethod = tempMethod; iter.remove (); // Si se elimina el nombre del método y la cadena Set/Get String es incompatible con POJO + "ID" (INSensible de caso), se considera una id} else if ((entity.getClass (). GetSimpLename () + "id"). EqualsignorEcase (tempMethod.getName (). Sustring (3))) {obj [oBJ [list.size () 1] tempMethod.invoke (entidad, nuevo objeto [] {}); idmethod = tempMethod; iter.remove (); }} // Mueve el puntero iterativo a la primera posición iter = list.iterator (); while (iter.hasnext ()) {tempMethod = iter.next (); sql + = tempMethod.getName (). Subcans (3) .tolowerCase () + "=?,"; obj [i] = tempMethod.Invoke (entidad, nuevo objeto [] {}); i ++; } // Eliminar el último, símbolo sql = sql.substring (0, sql.lastindexof (",")); // Agregar condición sql + = "where" + idmethod.getName (). Substring (3) .tolowerCase () + "=?"; // El empalme SQL se completa, imprima la declaración SQL System.out.println (SQL); st = conn.preparestatement (SQL); para (int j = 0; j <obj.length; j ++) {st.setObject (j+1, obj [j]);} result = st.ExecuteUpdate (); jdbcutil.getClose (RS, ST, Conn); Resultado de retorno;} public t findByid (objeto objeto) lanza la excepción {String sql = "Select * de" + PersistentClass.getSimplename (). TOLOWERCase () + "Where"; // Use el constructor de la subclase para obtener el tipo específico del tipo parametrizado. Por ejemplo, a base de <t>, es decir, obtenga el tipo específico de entidad t = persistentClass.newinStance (); // El objeto de método que almacena la clave principal de POJO (o la tabla que está operando) método idmethod = null; List <setmet> list = this.matchPOJomethods (entidad, "set"); Iterador <method> iter = list.iterator (); // Filtrar el objeto del método while (iter.hasnext ()) {método tempMethod = iter.next (); if (tempMethod.getName (). indexOf ("id")! = -1 && tempMethod.getName (). Substring (3) .Length () == 2) {idmethod = tempMethod; } else if ((entity.getClass (). getSimplename () + "id"). EqualSignorEcase (tempMethod.getName (). sustring (3))) {idmethod = tempMethod; }} // La primera letra se convierte en SQL += idmethod.getName (). Substring (3,4) .tolowercase () +idmethod.getName (). Substring (4) +"=?"; System.out.println (sql); st = conn.prepareStatement (sql); // juzga el tipo de id if (objeto instancia de integer) {st.setInt (1, (integer) objeto); } else if (objeto instanciaf string) {St.setString (1, (string) objeto); } rs = St.ExecuteQuery (); // apunte el puntero a la primera línea del iterador iterator = list.iterator (); // encapsulate while (rs.next ()) {while (iter.hasnext ()) {método método = iter.next (); if (método.getParametertyPes () [0] .getSimplename (). IndexOf ("String")! = -1) {// Porque en el conjunto de listas, el orden del objeto del método a recuperar es inconsistente con el orden del campo de la base de datos (por ejemplo: el primer método de lista es set Date, y el valor de la database "123" en orden) nombre. this.setString (método, entidad, rs.getString (método.getName (). Substring (3) .tolowerCase ())); } else if (método.getParametertypes () [0] .getSimplename (). indexOf ("date")! = -1) {this.setDate (método, entidad, rs.getDate (método.getName (). substring (3) .tolowercase ())); } else {this.setInt (método, entidad, rs.getInt (método.getName (). Substring (3) .tolowerCase ())); }}} jdbcutil.getClose (rs, st, conn); Entidad de retorno;}/*** Filtre todos los objetos de método con cadenas entrantes en la clase POJO actual y devuelva la colección de listas. */Private List <Method> MatchPoJomethods (T Entity, String MethodName) {// Obtener todos los objetos de método POJO actual método [] métodos = entity.getClass (). getDeclaredMethods (); // List contenedor almacena todos los objetos de método con la lista de cadenas <método> list = new ArrayList <Method> (); // Filtrar todos los objetos del método con las cadenas Get en la clase POJO actual y almacenarlos en el contenedor de lista para (int index = 0; index <métodss.length; index ++) {if (métodos [index] .getName (). IndexOf (métode)! = -1) {list.Add (métodos [index]); }} lista de retorno; } / ** * Cuando el tipo de parámetro es cadena, establecer parámetros para el campo Entity, correspondiente a SET * / public String setString (método método, entidad t, string arg) lanza la excepción {return (string) método.invoke (entidad, nuevo objeto [] {arg}); } / ** * Cuando el tipo de parámetro es fecha, establecer parámetros para el campo Entity, correspondiente a SET * / public feche setDate (método método, entidad t, date arg) lanza la excepción {return (date) método.invoke (entidad, nuevo objeto [] {arg}); } / ** * Cuando el tipo de parámetro es entero o int, establecer parámetros para el campo Entity, correspondiente a SET * / public Integer setInt (método método, entidad t, entero arg) lanza la excepción {return (integer) Method.invoke (entidad, nuevo objeto [] {arg}); }}El artículo anterior a base de artículo (código de ejemplo) encapsulado por JDBC es todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.