최근에, 나는 여가 시간에 포장에 관한 글을 쓰는 예를 개발 한 다음 이전 것들을 정리했습니다.
public class basedao <t> {Connection Conn; PropledStatement st; resultSet rs; jdbcutil jdbcutil = new jdbcutil (); int result = 0; private class <t> peristentClass; @suppresswarnings ( "Checked") public basionaoutil () {conn = jdbcutil.ggepectonnection (); parameterieds. (parameterizedType) getClass (). getGenericSuperClass (); persistentClass = (class <T>) type.getActualTyPearGuments () +"("; list <method> list = this.matchpojomethods (entity, "get"); iterator <ethoyt> iter = list.iterator (); object obj [] = new Object [list.size ()]; int i = 0; split 필드 삽입 (id, name, email, while); hasnext (); method.getName (). substring (3) .tolowercase () + ","; sbf.format (method.invoke (엔티티, 새 개체 [] {})); } else {obj [i] = method.invoke (엔티티, 새 개체 [] {}); } i ++; } // 마지막 하나를 제거, 심볼 삽입 삽입 테이블 이름 (id, name, 이메일) 값 (sql = sql.substring (0, sql.lastindexof ( ","))+") 값 ("; // 사전에 사로 잡힌 SQL 문 삽입 (id, 이름, 이메일) 값 (?,?,) {sql + = "?"; {st = conn.preparestatement (sql); 결과;}/** * delete * @param object * @return * @throws sqlexception */public int deleteid (object)는 예외 {string sql = "삭제"에서 " + persistentClass.getSimplename (). tolowercase () +"were "; 예를 들어, Bastao <t>, 즉 특정 유형의 T. entity = persistentClass.newinstance ()를 얻습니다. // pojo (또는 작동중인 테이블)의 기본 키를 저장하는 메소드 객체 idmethod = null; List <method> list = this.matchpojomethods (엔티티, "세트"); iterator <methob> iter = list.iterator (); // 메소드 객체를 필터링합니다 (iter.hasnext ()) {메소드 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) .TolowerCase () +idmethod.getName (). substring (4) +"=?"; System.out.println (SQL); st = conn.preparestatement (sql); // id 유형 if (object instanceof integer) {st.setint (1, (Integer) 객체); } else if (개체 인스턴스 문자열) {st.SetString (1, (string) 객체); } result = st.ExecuteUpdate (); jdbcutil.getClose (rs, st, conn); return result;}/** * modify * @param entity * @return * @throws Exception */public int update (t entity) {string sql = "update" + entity.get < + "set (). this.matchpojomethods (entity, "get"); // 매개 변수로드 오브젝트 obj [] = 새 개체 [list.size ()]; int i = 0; // 패션 메소드 개체를 반복 할 책임이 있습니다. 메소드 tempMethod = null; // 수정 중에 ID를 수정할 필요가 없으므로 순서대로 매개 변수를 추가하면 ID를 끝으로 이동해야합니다. 메소드 idmethod = null; iterator <methob> iter = list.iterator (); while (iter.hasnext ()) {tempMethod = iter.next (); // 메소드 이름에 ID 문자열이 포함되어 있고 길이가 2 인 경우 ID로 간주됩니다. if (tempMethod.getName (). lastIndexOf ( "id")! = -1 && tempMethod.getName (). substring (3) .length () == 2) {obj [list.size () -1] = tempMethod.invoke (Entity, new Object [] {}); // ID 필드의 객체를 변수로 저장하고 세트에서 삭제합니다. idmethod = tempmethod; iter.remove (); // 메소드 이름이 제거되고 Set/Get String이 pojo + "id"(Case Insensitive)와 호환되지 않으면 id} else} else ((entity.getClass (). getSimplename () + "id"). tempMethod.invoke (엔티티, 새 개체 [] {}); idmethod = tempmethod; iter.remove (); }} // 반복 포인터를 첫 번째 위치 iter = list.iterator ()로 이동합니다. while (iter.hasnext ()) {tempMethod = iter.next (); sql + = tempMethod.getName (). substring (3) .tolowerCase () + "=?,"; obj [i] = tempmethod.invoke (엔티티, 새 개체 [] {}); i ++; } // 마지막 것, Sympl Sql = sql.substring (0, sql.lastIndexof ( ",")); // 조건 추가 // SQL 스 플라이 싱이 완료되면 SQL 문을 인쇄합니다. Out.println (SQL); st = conn.preparestatement (SQL); for (int j = 0; j <obj.length; jdbcutil.getClose (Rs, St, Conn); return result;} public t fin 예를 들어, Bastao <t>, 즉, 특정 유형의 t entity = persistentClass.newinstance ()를 얻습니다. // pojo (또는 작동중인 테이블)의 기본 키를 저장하는 메소드 객체 idmethod = null; List <method> list = this.matchpojomethods (엔티티, "세트"); iterator <methob> iter = list.iterator (); // 메소드 객체를 필터링합니다 (iter.hasnext ()) {메소드 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) .TolowerCase () +idmethod.getName (). substring (4) +"=?"; System.out.println (SQL); st = conn.preparestatement (sql); // id 유형 if (object instanceof integer) {st.setint (1, (Integer) 객체); } else if (개체 인스턴스 문자열) {st.SetString (1, (string) 객체); } rs = st.ExecuteQuery (); // 반복자 iter = list.iterator ()의 첫 번째 줄에 대한 포인터를 가리 킵니다. // acapulate while (rs.next ()) {while (iter.hasnext ()) {메소드 메소드 = iter.next (); if (method.getParameterTypes () [0] .getSimplename (). indexof ( "string")! = -1) {// 검색 할 메소드 객체의 순서는 데이터베이스 필드의 순서와 일치하지 않기 때문에 (예 : 첫 번째 메소드는 Database의 값)를 취합니다. 이름. this.setString (메소드, 엔티티, rs.getString (method.getName (). substring (3) .tolowercase ()); } else if (method.getParameterTypes () [0] .getSimplename (). indexof ( "date")! = -1) {this.setDate (메서드, 엔티티, rs.getDate (method.getName (). substring (3) .Tolowscase ()); } else {this.setInt (메소드, 엔티티, rs.getInt (method.getName (). substring (3) .TOLOWERCASE ()); }}} jdbcutil.getClose (rs, st, conn); 리턴 엔티티;}/*** 현재 pojo 클래스에서 들어오는 문자열로 모든 메소드 객체를 필터링하고 목록 컬렉션을 반환합니다. */private list <method> matchpojomethods (t entity, string methodname) {// 모든 현재 pojo 메소드 개체 메서드를 가져옵니다. 메소드 = entity.getClass (). getDeclaredMethods (); // 목록 컨테이너 저장 모든 메소드 객체가 get 문자열 목록 <방법> 목록 = new ArrayList <메소드> (); // 현재 pojo 클래스에서 Get 문자열로 모든 메소드 객체를 필터링하고 (int index = 0; index <methods.length; index ++) {if (method [index]. indexof (methodName)! = -1) {list.add (methods [index]); }} 리턴 목록; } / ** * 매개 변수 유형이 문자열 인 경우, set * / public string setstring (메소드 메소드, t 엔티티, String arg)에 해당하는 엔티티 필드에 대한 매개 변수를 설정합니다. 예외 {return (string) method.invoke (엔티티, 새 개체 [] {arg}); } / ** * 매개 변수 유형이 날짜 인 경우, set * / public date setDate (메소드 메소드, t 엔티티, 날짜 arg)에 해당하는 엔티티 필드의 매개 변수를 설정합니다. 예외 {return (date) method.invoke (엔티티, 새 개체 [] {arg}); } / ** * 매개 변수 유형이 정수 또는 int 일 때, set * / public integer setInt (메소드 메소드, t 엔티티, 정수 arg)에 해당하는 엔티티 필드의 매개 변수를 설정합니다. 예외 {return (integer) method.invoke (Entity, new Object [] {arg}); }}JDBC가 캡슐화 한 위의 기사 Basedao (예제 코드)는 내가 공유하는 모든 내용입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.