Недавно я разработал пример написания о упаковке в свободное время, а затем разобрался с предыдущими.
Открытый класс FASTAO <T> {Connection Conn; PrectStatement ST; ResultSet RS; jdbcutil jdbcutil = new jdbcutil (); int result = 0; частный класс <t> PersistentClass; @suppresswarnings ("uncecked") publicaoutil () {conn = jdbcutil (ParameterizedType) getClass (). GetGenericSuperClass (); PersistentClass = (class <t>) type.getActualtyPearguments () [0];} /** * Сохранить * @param entity * @return * /public int save (ty intity) исключение {string sql = "insert in vithy.get -get -get -nefplessAse (). +"("; List <Method> list = this.matchpojomethods (entity, "get"); iterator <method> iter = list.iterator (); объект obj [] = новый объект [list.size ()]; int i = 0; // разделить порядок поля в вставку в таблицу (id, name, while (iter.hasnext ()) method.getName (). substring (3) .tolowerCase () + ","; sbf.format (method.invoke (entity, new Object [] {})); } else {obj [i] = method.invoke (entity, new Object [] {}); } i ++; } // Удалить последний, символ вставьте вставку в имя таблицы (идентификатор, имя, электронная почта) значения (sql = sql.substring (0, sql.lastidexof (","))+") значения ("; // Собирайте предварительно комбинированные показатели SQL INSERT INSERT в таблицу (ID, имя, электронное письмо) значения (? {sql + = "?,";} // try {st = conn.preparestatement (sql); result;}/** * DELETE * @param Object * @return * @Throws SQLEXCEPTION */public int deleteId (объект объекта) Throws Exception {String sql = "Удалить из" + persistentClass.getSimplename (). Tolowercase () + "где"; // Использовать конструктор подкласса для получения специфического типа типа параметрического параметра. Например, оснований <t>, то есть получить конкретный тип T. entity = persistentclass.newinstance (); // объект метода, который хранит первичный ключ из Pojo (или действующего таблицы) метод idmethod = null; List <Method> list = this.matchpojomethods (Entity, "set"); Iterator <method> iter = list.iterator (); // фильтровать объект метода while (iter.hasnext ()) {method 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 (). substring (3))) {idmethod = tempmethod; }} // Первая буква преобразуется в нижний регистр sql += idmethod.getname (). Substring (3,4) .toloarcecase () +idmethod.getName (). Substring (4) +"=?"; System.out.println (sql); st = conn.prepareStatement (sql); // судить тип id if (ocyation instanceof Integer) {St.setInt (1, (Integer) Object); } else if (exantef string string) {St.setString (1, (String) Object); } result = st.exeCuteUpdate (); jdbcutil.getClose (rs, st, conn); return result;}/** * Modify * @param entity * @return * @Throws Exception */public int Update (t Entity) Throws Exception {string sql = "update" + entity.getClass (). this.matchpojomethods (entity, "get"); // Загрузка параметров объект obj [] = новый объект [list.size ()]; int i = 0; // объект временного метода, ответственный за итерацию объекта метода моды. Метод Tempmethod = null; // Поскольку идентификатор не требуется изменять во время модификации, добавление параметров по порядку должно переместить идентификатор до конца. Метод idmethod = null; Iterator <method> iter = list.iterator (); while (iter.hasnext ()) {tempmethod = iter.next (); // Если имя метода содержит идентификационную строку, а длина - 2, он считается идентификатором. if (tempmethod.getName (). LastIndexof ("id")! = -1 && tempmethod.getName (). substring (3) .length () == 2) {obj [list.size () -1] = tempmethod.invoke (Entity, новый объект [] {}); // Сохранить объект поля ID в переменную и удалить его в наборе. idmethod = tempmethod; iter.remove (); // Если имя метода удалено, и строка Set/Get несовместима с Pojo + "id" (case нечувствительный), это считается идентификатором} else if ((entity.getClass (). GetSiMplename () + "id"). EqualsIgnorecase (tempmethod.getName (). Substring (3))) (objsize (list.size (1]-1)-1)-1)-1). tempmethod.invoke (Entity, новый объект [] {}); idmethod = tempmethod; iter.remove (); }} // переместить итеративный указатель на первую позицию iter = list.iterator (); while (iter.hasnext ()) {tempmethod = iter.next (); sql + = tempmethod.getName (). substring (3) .tolowerCase () + "=?,"; obj [i] = tempmethod.invoke (entity, new Object [] {}); i ++; } // Удалить последний, символ sql = sql.substring (0, sql.lastindexof (",")); // Добавить условие sql + = "где" + idmethod.getName (). Substring (3) .tolowerCase () + "=?"; // SQL -сплайсинг завершается, печатать SQL -операторы System.out.println (SQL); st = conn.preparestatement (sql); for (int j = 0; j <obj.length; j ++) {st.setObject (j+1, obj [j]);} result = st.xecuteUpdate (); jdbcutil.getClose (Rs, St, Conn); return result;} public t findbyId (объект объекта) Throws Exception {string sql = "select * from" + persistentClass.getSimplename (). tolowercase () + "где"; // Используйте конструктор подкласса для получения конкретного типа параметризованного типа. Например, FASTAO <T>, то есть получить конкретный тип t Entity = PersistentClass.newinStance (); // объект метода, который хранит первичный ключ из Pojo (или действующего таблицы) метод idmethod = null; List <Method> list = this.matchpojomethods (Entity, "set"); Iterator <method> iter = list.iterator (); // фильтровать объект метода while (iter.hasnext ()) {method 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 (). substring (3))) {idmethod = tempmethod; }} // Первая буква преобразуется в нижний регистр sql += idmethod.getname (). Substring (3,4) .toloarcecase () +idmethod.getName (). Substring (4) +"=?"; System.out.println (sql); st = conn.prepareStatement (sql); // судить тип id if (ocyation instanceof Integer) {St.setInt (1, (Integer) Object); } else if (exantef string string) {St.setString (1, (String) Object); } rs = st.executequery (); // укажите указатель на первую строку итератора iter = list.iterator (); // инкапсулировать while (rs.next ()) {while (iter.hasnext ()) {method method = iter.next (); if (method.getParameterTypes () [0] .getSimplEname (). indexof ("string")! = -1) {// Потому что в наборе списков порядок получения объекта метода не согласуется с порядком поля базы данных (например: первый метод, и в соответствии с «Соответствующим значением». имя. this.setString (Method, Entity, Rs.getString (method.getName (). substring (3) .tolowerCase ())); } else if (method.getParameterTypes () [0] .getSimplEname (). indexof ("date")! = -1) {this.setDate (метод, объект, rs.getDate (method.getName (). substring (3) .tolowerCase ())); } else {this.setInt (метод, Entity, rs.getint (method.getName (). substring (3) .tolowerCase ())); }}} jdbcutil.getClose (rs, st, conn); return Entity;}/*** фильтровать все объекты метода с входящими строками в текущем классе POJO и верните коллекцию списков. */Private List <Метод> MatchPojomethods (t Entity, String MethodName) {// Получить все текущие методы метода POJO [] methods = entity.getClass (). getDeclaredMethods (); // Список контейнеров хранит все объекты метода с помощью List String List <Thod> list = new ArrayList <Method> (); // фильтровать все объекты метода с помощью строк GET в текущем классе POJO и сохранить их в контейнере списка для (int index = 0; index <methods.length; index ++) {if (method [index] .getName (). Indexof (методнэм)! = -1) {list.add (methodex]); }} return List; } / ** * Когда тип параметра - это строка, установите параметры для поля объекта, соответствующего установке * / public String setString (метод метода, t entity, string arg), выбросит исключение {return (string) method.invoke (entity, new Object [] {arg}); } / ** * Когда тип параметра - дата, установите параметры для поля объекта, соответствующего установке * / public date setdate (метод метода, t Entity, date arg) выбрасывает exection {return (date) method.invoke (entity, new Object [] {arg}); } / ** * Когда тип параметра является целым числом или int, установите параметры для поля объекта, соответствующего установке * / public integer setInt (метод метода, t Entity, Integer arg) Throws Exception {return (integer) method.invoke (entity, new Object [] {arg}); }}Приведенная выше статья Foundao (пример кода), инкапсулированная JDBC, - это весь контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.