次に、以前の記事「Javaweb Practical Mall Project Development(ii)」は、主に一般的なBasedao.javaを実装し、結果マップを使用して関連するオブジェクトをマッピングします。
1。一般的なbasedao.java
誰もがそれを使用する必要があるため、ジェネリックが使用されます。注意すべき問題は、user.getClass()。getName()などのコードを変更する必要があることです。変更方法は、パラメータークラスTCで渡し、tc.getName()を使用することです。
完全なコード:
パッケージcom.dao; import com.model.pager; import com.util.sessionutil; Import com.util.systemcontext; Import org.apache.ibatis.session.ssion.sqlsession; Import java.util.hashmap; Import java.util.list; import java.util.util.util.map; */public class Basedao <t> {/** * id * @param idに基づいてtタイプを取り出して、tタイプのIDを削除します * @return */public t load(class <t> tc、int id){sqlsession session = sessionutil.getsession(); t t = null; try {t = session.selectone(tc.getname()+"。load"、id); }最後に{sessionutil.closessess(session); } return t; } / *** tタイプを追加* @param t t typeを追加する* @return true success* / public boolean add(t t){int isadd = 0; sqlsession session = sessionutil.getSession(); try {isadd = session.insert(t.getclass()。getname()+"。add"、t); session.commit(); // commit} catch(exception e){session.rollback(); // rolle back secsionutil.closessess(session); } ISADD> 0を返します。 } / *** id* @param idに基づいてtタイプを削除するt* @return true succuse* / public boolean delete(class <t> t、int id){int isdelete = 0; sqlsession session = sessionutil.getSession(); try {isdelete = session.delete(t.getname()+"。delete"、id); session.commit(); } catch(Exception e){session.rollback(); // return System.out.println( "delete failed"); e.printstacktrace(); }最後に{sessionutil.closessess(session); } isdelete> 0を返します。 } / ***更新tタイプ* @param tユーザーは更新されます* @return true success* / public boolean update(t){int isupdate = 0; sqlsession session = sessionutil.getSession(); try {isupdate = session.delete(t.getClass()。getName()+"。更新"、t); session.commit(); } catch(Exception e){session.rollback(); // retrent return system.out.println( "update faild"); e.printstacktrace(); }最後に{sessionutil.closessess(session); } isUpdate> 0を返します。 }/***指定された条件に基づくページングクエリ* @paramマップ@paramマップは条件コレクションを指定します* @return*/public pager <t> find(class <t> t、map <string、object> maps){int pagestart = systemcontext.getPagestart.getPagestart.getPagestart.getPagestart.getPagestart(); maps.put( "pagestart"、pagestart); maps.put( "pagesize"、pagesize); sqlsession session = sessionutil.getSession();リスト<t>データ= null; try {datas = session.selectlist(t.getname()+"。find"、maps); //レコードpagers.setdatas(datas); pagers.setPagesize(Pagesize); pagers.setpagestart(pagestart); int totalRecord = session.selectone(t.getName()+"。findCount"、maps); //レコードの総数Pagers.SettotalRecord(TotalRecord); pagers.setPageIndex(pagestart/pagesize+1); }最後に{sessionutil.closessess(session); }ページャーを返します。 } / ***指定された条件に従ってデータの部分を取得* @paramマップの条件のセットを指定* @return* / public pager <t> list(class <t> t、map <string、object> maps){pager <t> pages = new pager <>(); sqlsession session = sessionutil.getSession();リスト<t>データ= null; try {datas = session.selectlist(t.getname()+"。リスト"、マップ); // record pagers.setdatas(datas); pagers.settotalRecord(datas.size()); }最後に{sessionutil.closessess(session); }ページャーを返します。 }}同じuserdao.javaには、対応する変更も必要です
パブリッククラスのuserDao拡張basedao <user> { / ** * id * @param idに基づいてユーザーを削除してユーザーのID * @return * / publicユーザーロード(int id){return super.load(user.class、id); }/*他の機能は1つずつ投稿されていません。それらはすべて同様の方法で書かれています*/}2。結果マップのマッピング
簡単に言えば、データベース内のフィールド情報がオブジェクトの属性と矛盾する場合、結果マップをマッピングする必要があります。
例:次のように、アドレスプロパティにはユーザーエンティティクラスがあります
パブリッククラスアドレス{private int id;プライベート文字列名;プライベート文字列電話;プライベート文字列の郵便番号; // user_idプライベートユーザーユーザーの代わりに、ユーザーオブジェクトを直接たわごとします。 `` `` `` `}次に、住所を取り出し、対応するユーザーも取り出したいと思います。ただし、これらは2つのオブジェクトであり、どちらもID属性を持っているため、MyBatisは設定されたメソッドを呼び出してプロパティを設定すると混同されます。結果マップを使用する目的は、このカオスを排除することです。
Load SQLを書き込みます
<! - アドレスをロードします - > <! - ここではテーブル接続が必要で、ユーザーが取り出されます。また、取得したアドレスが空でないことを確認するために接続が必要であり、重複属性ID-> <選択id = "load" parameterType = "int" resultmap = "destressmap"> select *、select *、t1.id as 'a_id' as 'a_id' as 'a_id' as 'a_id' as right right join now in user t2 on(t1.user_id = t2.id) </select>
ここでは、結果マップを使用してマッピングします。この結果マップの名前はアドレスマップです。
アドレスマップ
<resultmap id = "addressmap" type = "address" automapping = "true"> <! - 結果のa_idをidとしてマッピングし、その他の自動= trueは自動的に一致します - > <id column = "a_id"プロパティ= "id"/> <列= "user_id" property = "id"/> <result column = "username" property = "username"/> <result column = "nickname"/> <result colummen = "nickname"/> <result column = "nickname"/> <result colummen
上記の構成が完了すると、検索すると、MyBatisは対応するセットメソッドを自動的に呼び出し、属性をエンティティクラスに設定します。
テスト
パッケージcom.dao; import com.model.address; public class addressdao extendsao <address> {public static void main(string [] args){addressdao addressdao = new addressdao();アドレスアドレス= addressDao.load(1); System.out.println(address.toString()); } / ***アドレスを読み込む* @param idアドレスのIDを読み込んでいる* @returnロードするアドレスを返し、nullは読み込まれません}}レンダリングに見られるように、マッピング属性が取り出される限り、マッピングされていないものはすべてnullです。
このアイデアに従って、他の機能を完了してください
XMLコード:
<?xml version = "1.0" encoding = "utf-8"?> <!doctype mapper public " - // mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"データベースはオブジェクトの属性と矛盾しています。結果マップを介してマッピングする必要があります - > <resultMap id = "addressmap" type = "address" automapping = "true"> <! - map a_id in estrace = trueは自動的に一致します - > <id column = "a_id" propeties = "" aspotion "" aspotion "" aspotion "" aspotion "" aspition " > <! - user_idにユーザーのIDにマップ - > <id column = "user_id" property = "id"/> <result column = "username" property = "username"/> <result column = "nickname" property = "nickname"/> <result列= "nickname"/> <result column = "type =" type "/> <conession>ここでは、ユーザーが取り出されます。接続により、検索されたアドレスが空でないことが保証され、重複属性IDにエイリアスすることが保証されます。 </select> <! - アドレスを追加 - > <> <挿入id = "parametertype =" address ">アドレス値に挿入(null、#{name}、#{phone}、#{postcode}、$ {user_id})</挿入> <! - アドレスを削除 - > <> <delete" delete </delete> <! - アドレスの変更 - > <update id = "uppated" parametertype = "address"> updateアドレスname =#{name}、phone =#{phone}、postcode =#{postcode}ここで、id = {id} </update> update> <! - 特定のユーザーのすべてのアドレス= "" park "" parmap "" parmap "" parmap "" parmap "" parmap "" parmap select *、t1.id as 'a_id' from address t1 right right join user t2 on(t1.user_id = t2.id)where t1.user_id = {user_id} </select> </mapper>Javaコード:
パッケージcom.dao; import com.model.address; import com.model.pager; Import java.util.hashmap; Import java.util.map;/***は2016/2/23にNL101によって作成されました。 */public class addressdao extends Basedao <destress> {public static void main(string [] args){addressDao addressDao = new addressDao(); pager <destress> pagers = addressdao.list(1); System.out.println(pagers.getDatas()。size()); } / ** *アドレスを読み込む * @param idアドレスのIDを読み込んでいる * @returnロードするアドレスを返し、null fails * / publicアドレスロード(int id){return super.load(address.class、id); } / ***アドレスを追加* @paramアドレスアドレスを追加する* @param user_idアドレスに対応するuser_id追加* @return true succuse* / public booleanアドレス(アドレスアドレス、int user_id){userdao userdao = new userdao(); if(userdao.load(user_id)== null){return false; } return super.add(address); } / ***アドレスを削除* @param IDには、アドレスに対応するIDを削除して* @return true delete sustertfully* / public boolean delete(int id){return super.delete(address.class、id); } / ***アドレスを更新* @paramアドレスアドレスを更新するアドレス* @return true update ressuletfuly* / public boolean update(アドレスアドレス){return super.update(address); } / ***アドレスを更新* @paramアドレスアドレスを更新するアドレス* @return true update ressuletfuly* / public boolean update(アドレスアドレス){return super.update(address); } / ** *ユーザーIDに基づいてユーザーのすべてのアドレスを取り出します * @param user_id * @return * / public pager <アドレス>リスト(int user_id){map <string、object> maps = new Hashmap <>(); maps.put( "user_id"、user_id); return super.list(address.class、maps); }}ADOレイヤーがこのように記述されている場合、問題はありません。
上記はこの記事に関するすべてです。これは、Javaweb Mallプロジェクト全体の開発に関するものです。それがあなたの学習に役立つことを願っています。