最近、私は暇なときに包装について書く例を策定し、以前の時間を整理しました。
public class Basedao <t> {connection conn; preatedStatement st; resultset rs; jdbcutil jdbcutil = new jdbcutil(); int result = 0; private class <t> persistentclass; @suppresswarnings( "unchecked")public basedaoutil(){conn = jdbcutil.getconnecty(); (parameterizedType)getClass()。getGenericsUperClass(); fersistentClass =(class <t>)type.getActualTyPearguments()[0];} /** * save * @return * /public int save(t entity)throws emsixciption {string sql = entity.getClass()。getSimplename()。tolowercase() +"("; list <hodeth> list = this.matchpojomethods(entity、 "get"); iterator <method> iter = list.iterator(); object obj [] = new object [list.size()]; while(iter.hasnext()){method method = iter.next(); HH:mm:ss "); obj [i] = sbf.format(method.invoke(entity、new object {})); } else {obj [i] = method.invoke(entity、new Object [] {}); } i ++; } //最後の1つを削除し、シンボルの挿入テーブル名(ID、名前、電子メール)値(SQL = SQL.SUBSTRING(0、SQL.LASTINDEXOF( "、")+")値("; //プリコンパイルされたSQLステートメント挿入挿入挿入挿入挿入挿入挿入挿入挿入挿入挿入値(ID、名前、電子メール)(?、? + = "?} conn.preparestatement(sql); delete * @param object * @return * @throws sqlexception */public int deleteid(object object)throws {string sql = "delete from" + persistentclass.getSimplename()。tolowercase() + " +" + "where";たとえば、Basedao <t>、つまり、特定のタイプのT. entity = fersistentClass.newInstance()を取得します。 // pojo(または操作中のテーブル)メソッドidmethod = nullを保存するメソッドオブジェクト。リスト<メソッド> 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).tolowercase() +idmethod.getName()。サブストリング(4) +"=?"; System.out.println(sql); st = conn.preparestatement(sql); // idのタイプを判断するid(object instanceof integer){st.setint(1、(integer)object); } else if(object instanceof string){St.SetString(1、(string)object); } result = St.ExecuteUpdate(); jdbcutil.getclose(rs、st、conn); return result;}/** * modify * @return * @return * @return */public ind update(t entity)throws {string sql = "update" + entity.getclass() this.matchpojomethods(entity、 "get"); //パラメーターの読み込みオブジェクトobj [] = new object [list.size()]; int i = 0; //ファッションメソッドオブジェクトの反復を担当する一時メソッドオブジェクト。メソッドtempmethod = null; //変更中にIDを変更する必要はないため、パラメーターを順番に追加する必要はありません。メソッドidmethod = null; iterator <method> 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(); //メソッド名が削除され、セット/get文字列がpojo + "id"(ケース非感受性)と互換性がない場合、それはidと見なされます} else if((entity.getclass()。getsimplename() + "id")。 tempmethod.invoke(entity、new Object [] {}); 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 ++; } //最後の1つを削除する、シンボルsql = sql.substring(0、sql.lastindexof( "、")); //条件を追加しますsql + = "where" + 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.executeupdate(); jdbcutil.getclose(rs、st、conn); return result;} public t findbyid(object object)throws exception {string sql = "from" + persistentclass.getSimplename()。tolowercase() + "where"; //サブクラスのコンストラクターを使用して、特定のタイプのパラメーター化されたタイプを取得します。たとえば、Basedao <t>、つまり、特定のタイプのt entity = persistentclass.newinstance()を取得します。 // pojo(または操作中のテーブル)メソッドidmethod = nullを保存するメソッドオブジェクト。リスト<メソッド> 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).tolowercase() +idmethod.getName()。サブストリング(4) +"=?"; System.out.println(sql); st = conn.preparestatement(sql); // idのタイプを判断するid(object instanceof integer){st.setint(1、(integer)object); } else if(object instanceof string){St.SetString(1、(string)object); } rs = St.Executequery(); // iterator iter = list.iterator()の最初の行にポインターを指します。 //(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(method、entity、rs.getDate(method.getName()。 } else {this.setint(method、entity、rs.getint(method.getname()。substring(3).tolowercase())); }}} jdbcutil.getclose(rs、st、conn); return Entity;}/***現在のpojoクラスに着信文字列を持つすべてのメソッドオブジェクトをフィルタリングし、リストコレクションを返します。 */private list <method> matchpojomethods(t entity、string methodname){//すべての現在のpojoメソッドオブジェクトを取得します[] methods = entity.getclass()。getDeclaredMethods(); // container storts get string list <method> list = new arraylist <method>()を備えたすべてのメソッドオブジェクトをリストします。 //現在のpojoクラスでget文字列ですべてのメソッドオブジェクトをフィルタリングし、(int index = 0; index <methods.length; index ++){if(methods [index] .getname()。indexoname()。indexname)!= -1){list.add(methods [index]); }} return list; } / ** *パラメータータイプが文字列である場合、エンティティフィールドの設定パラメーター、SET * / public String SetString(Method Method、T Entity、String arg)に対応します。 } / ** *パラメータータイプが日付の場合、エンティティフィールドの設定パラメーター、SET * / public Date SetDate(Method Method、t Entity、date arg)に対応します。 } / ** *パラメータータイプが整数またはintの場合、set * / public integer setint(メソッドメソッド、tエンティティ、整数arg)に対応するエンティティフィールドのパラメーターを設定します。 }}JDBCによってカプセル化された上記の記事Basedao(例コード)は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。