今日私たちが主に学んだ関係は、1対1の関係と1対1の関係です。
1. 1対1の関係
例で説明しましょう。 (妻は夫に対応します)。
1)データベース情報
テーブルt_wife(id int primary key auto_increment、wife_name varchar()、fk_husband_id int);作成テーブルt_husband(id int primary key auto_increment、hand_name varchar()); t_husband値に挿入(null、 'hello');
2)対応するJavabeanコード
データベース内の1つの当事者によって構成された外部キーは1つだけですが、この1対1の関係は双方向の関係です。
handbean.java
パッケージcom.cy.mybatis.beans; import java.io.serializable;/*** one*@author acer **/public class bushbeanを実装します。 {super(); this.id = id; this.name = name; this.wife = wife;} public Integer getid(){return id;} public void setid(integer id){this.id = id;} public string getname(){return name;} public void name(string name){public wibe egiad( setWife(妻の妻){this.wife = wife;}@overridepublic string toString(){return "hand [id =" + id + "、name =" + name + "、wife =" + wife + "];}}}} wifebean.java
パッケージcom.cy.mybatis.beans; import java.io.serializable;/*** one one*@author acer **/public class wifebeanを実装します{private static final serialversionuid = l; private integer id; private string name name; private frundbean hushbean(){super() {super(); this.id = id; this.name = name; this.husband = hand;} public Integer getid(){return id;} public void setid(integer id){this.id = id;} public string getname(){return name;} public name(wubl name){thisname = public hand;} public handbean void sethusband(夫){this.husband = hundy;}@overridepublic string toString(){return "wife [id =" + id + "、name =" + name + "、hand =" + hand + "];}}} 3)次に、2つのインターフェイス、夫マッパーとwifemapperを確立します。
夫マッパー
パッケージcom.cy.mybatis.mapper; import com.cy.cy.cy.mybatis.beans.husbandbean; public interface handmapper {/*** query夫情報*@param id* @return*@throws例外*/パブリックマッジャンセレクトハスバンドビード(int id)スロー例外; selecthusbandandwife(int id)は例外をスローします;} 4)handmapper.xmlファイルを定義します
<?xmlバージョン= "。" encoding = "utf-"?> <!doctype mapper public " - // mybatis.org/dtd mapper。" "http://mybatis.org/dtd/mybatis ---mapper.dtd">< mapper namespace =" com.cy.cy.mybatis.mapper.husbandmapper "> <resultmap type =" hanknbean "id =" hanghandwife "> <id property Property = "name" column = "name" javatype = "java.lang.string"/> <! - 協会の複雑なタイプの関連付け。多くの結果は、このタイプの埋め込み結果マップの関連付けにパッケージ化されます。または、列= "ID"を参照してください。ここのIDは、T_Wifeテーブルの主要なキーIDを参照します。このクエリの妻なので、妻にはメソッドがあります - > <Association Property = "wife" column = "id" javatype = "wifebean" select = "com.cy.cy.wifemapper.selectwifehusbandid"> </association> </resultmap> <! - > <select id = "selecthusbandbyid" resultType = "handbean"> select * from id =#{id} </select> <! - resultmap name references external resultmap。コレクションを返します。 - > <select id = "selecthusbandandwife" resultmap = "handyandwife"> select * from id =#{id} </select> </mapper>wifemapper.xmlにはメソッドがあります
<?xmlバージョン= "。" encoding = "utf-"?> <!doctype mapper public " - // mybatis.org/dtd mapper。" "http://mybatis.org/dtd/mybatis ---mapper.dtd">< mapper namespace =" com.cy.mapper.wifemapper "> <select id =" selectwifehusbandid "resulttype =" wifebean "> </mapper>
5)実装を書きます
パッケージcom.cy.mybatis.service; Import org.apache.ibatis.session.squlsession; Import com.cy.cy.mybatis.beans.husbandbean; Import com.cy.mybatis.mapper.husbandmapper; import com.cy.cy.mybatis.tools.dbtools {selecthusbandandwife();} private static void selecthusbandandwife(){sqlsession session = dbtools.getsession(); handmapper hm = session.getmapper(handmapper.class); try {handbean hand = hm.selecthusandandwife( {e.printstacktrace();}}}注:ツールクラスは前の章で書かれています。これは、昨日のベースで確立された章と非常によく似ています。
知らせ:
MyBatisは実際にXMLで動作しています。すべての方法はXMLで直接定義されています。インターフェースを書くことは、3層の思考によりよく適合することです。インターフェイスを作成しない場合は、セッションを通じてXMLでメソッドを直接操作できます。
XMLにメソッドがある限り、使用でき、呼び出し方法は次のとおりです。名前空間+メソッド名。
例外のためにresultTypeを使用する場合は、属性名がフィールド名と同じであることを確認してください。
同じでない場合は、結果マップを使用してください。
2。1対多数の関係
例で説明しましょう。 (1つのロックは複数のキーに対応します)。
2.1)データベース情報にここに追加されたデータはありません。バッチを使用してデータを追加します
テーブルt_key(id int primary key auto_increment、key_name varchar()、fk_lock_id int);テーブルt_lock(id int primary key auto_increment、lock_name varchar());
2.2)エンティティクラス
keybean.java
パッケージcom.cy.mybatis.beans; import java.io.serializable;/*** manytoone***/public class keybeanはシリアル化可能{serializable {private static long serialversionuid = l; private string key; private lockean lock; public keybean(){super();} public keybean id();} public keybean();} {super(); this.id = id; this.key = key; this.lock = lock;} public Integer getId(){return id;} public void setid(integer id){this.id = id;} public string getKey(){return key;} public void setkey(string key){this.key = key = public lockbean getbbean lock;} SetLock(LockBean Lock){this.lock = lock;}@overridepublic string toString(){return "keybean [id =" + id + "、key =" + key + "、lock =" + lock + "];}} lockbean.javapackage com.cy.cy.mybatis. java.util.list;/*** onetomany***/public class lockbeanはシリアル化可能{private static final long serialversionuid = l; private integer id; private string lock; private list <keybean> keys; public lockbean(){){super();} public lockbean(integer id、String lock、<Keybean> keybean> keybean> keybean> keybean> keybean> keybean id() id; this.lock = lock; this.keys = keys;} public Integer getId(){return id;} public void setid(integer id){this.id = id;} public string getlock(){return lock;} public void setlock(string lock){this.lock = lock = lock;} public lite <keybean fite <keybean> getkeys( setKeys(list <keybean> keys){this.keys = keys;}@overridepublic string tostring(){return "lockbean [id =" + id + "、keys =" + keys + "、lock =" + lock + "]";}}}} 2.3)インターフェイスを確立します
keymapper.javapackage com.cy.mybatis.mapper; import java.util.list; import org.apache.ibatis.annotations.param; import com.cy.cy.mybatis.keybean; public interface keymapper {/*** add in in batch* @return*/intecis int @param( "in" in "in" in "in" in "in" in "in" in "in" in "in" in " @cult in"/in " batchsavekeys(@param( "keys")list <keybean> keys);} lockmapper.javapackage com.cy.mybatis.mapper; Import org.apache.ibatis.annotations.param; Import com.cy.cy.cy.mybatis.beans.lockbean;公開インターフェイスlock*/public lock* @pipmapmer savelock(@param( "lock")lockbean lock);/*** id* @param id* @return*/public lockbean findlockbyid(int id)に基づくロックの情報をクエリします。 2.4)XMLファイルを作成します
keymapper.xml
<?xmlバージョン= "。" encoding = "utf-"?> <!doctype mapper public " - // mybatis.org/dtd mapper。" "http://mybatis.org/dtd/mybatis ---mapper.dtd"> <mapper namespace =" com.cy.cy.mybatis.mapper.keymapper "> <resultmap id =" keymap "type" type = "keybean"> <id propetitien Property = "key" column = "key_name" javatype = "java.lang.string"/> </resultmap> <! - コレクションは、トラバーサル(必須)に使用される要素、サポート配列、リスト、セット - > <! - コレクションの各要素が反復されるときのエイリアスを表します。 - > <! - セパレーターは、各反復の間のセパレーターとして使用されるシンボルを示します。 - > <ID = "batchsavekeys"> inserting t_key値<foreach collection = "keys" item = "key" separator = "、">(null、#{key.key}、{key.lock.id})</foreach> </insert> </insert> <select id = "findkeysbylockid #{id} </select> </mapper> lockmapper.xml <?xml version = "。" encoding = "utf-"?> <!doctype mapper public " - // mybatis.org/dtd mapper。" "http://mybatis.org/dtd/mybatis ---mapper.dtd">< mapper namespace =" com.cy.mybatis.mapper.lockmapper "> <! - カスタムリターンタイプ - > <resultmap id =" lockmap "type =" lockbean " javatype = "java.lang.integer"/> <result property = "lock" column = "lock_name" javatype = "javatype =" java.lang.string "/> <respurentプロパティ=" lock "column =" lock_name "javatype =" java.lang.string "/> select = "com.cy.mybatis.mapper.keymapper.findkeysbylockid"> </collection> </resultmap> <insert id = "savelock"> t_lock値に挿入(null、#{lock.lock})</inserce #{id} </select> <select id = "findlockandkeys" resultmap = "lockandkeysmap"> select * from id =#{id} </select> </mapper> 2.5)実装
パッケージcom.cy.mybatis.service; import java.util.arraylist; Import java.util.list; import org.apache.ibatis.session.squlsession; import com.cy.mybatis.beans.keybean; Import com.cy.cy.cy.cy.mybatis.lockis.lockbean; import com.cy.cy.cy.cy.cy.cy.cy.cy.cy.cy.cy.cy.cy.cy.cy.cy.cy.cy.cy.cy.cy.cy.cy.cy.cy.cy.cy.cy.cy. com.cy.mybatis.mapper.lockmapper; Import com.cy.cy.mybatis.tools.dbtools; public class onetomanyservice {public static void main(string [] args){// savelock(); // batchsavekeys(); findlockandkeys();} private static void findlockandkeys(){sqlsession session = dbtools.getsession(); lockmapper lm = session.getmapper(lockmapper.class); lockbean lock = lm.findlockandkeys(); system.out.Out) = dbtools.getSession(); lockmapper lm = session.getmapper(lockmapper.class); keymapper km = session.getMapper(keymapper.class); lockbean lock = lm.findlockbyid(); list <keybean> keys = new raylist <keybean>++ keybean(null、 "key"+i、lock); keys.add(key);} km.batchsavekeys(keys); session.commit();} private static void savelock(){sqlsession = dbtools.getsession(); lockmapper lm = session.getmapper(lockmapper.class.cliss.class.class.class.class.clis "lock"、null); lm.savelock(lock); session.commit();}}結果は次のとおりです。
3。バッチ操作とページネーション
ここでは、前の章からユーザーを使用して、メインコードを書きます。
最初にページングオブジェクトを定義します。
パッケージcom.cy.mybatis.beans; Import java.util.list;/***ページネーションオブジェクトを定義** @著者***/public class pager {private pageno; // private pageno; // private pagetotal pagetotal; //合計ページ番号総ページ番号プライベートint rowstotal; //データセットpublic int getPageno(){return pageno;} public void setpageno(int pageno){this.pageno = pageno;} public int getPageTotal(){return pagetotal;} public void setPageTotal(int pagetotal) {return rowstotal;} public void setrowstotal(int rowstotal){this.rowstotal = rowstotal; pagetotal = rowstotal%pagesize ==? rowstotal / pagesize:rowstotal / pagesize +;} public int getPagesize(){return pagesize;} public void setPagesize(int pagesize){this.pagesize = pagesize;} public list <?> getList(){return list;} public void setList(list return> list <object> list = list = list = futtring(list = futs publing string;} 「Pager [pageno = " + pageno +"、pagetotal = " + pagetotal +"、rowstotal = " + rowstotal +"、pagesize = " + pagesize +"、list = " + list +"];}} usermapper.javaインターフェース。パッケージcom.cy.mybatis.mapper; import java.util.list; import java.util.map; import org.apache.ibatis.annotations.param; import com.cy.mybatis.userbean; public interface usermapper {/*** @param user* @return* @throws*/public intestusean( "user initsure(" use initsure)ユーザー)スロー例;例外*/public userbean selectuserbyid(int id)スロー例。 @return* @throws Exception*/public int batchdeleteuser(@param( "list")list <integer> list)スロー例外; Countuser(Map <String、Object> Parmas)スロー例外;} xmlファイル<?xmlバージョン= "。" encoding = "utf-"?> <!doctype mapper public " - // mybatis.org/dtd mapper。" "http://mybatis.org/dtd/mybatis ---mapper.dtd"> <mapper namespace =" com.cy.mybatis.mapper.usermapper "> <! - カスタムリターン結果セット - > <resultmap id =" usermap "type =" userbean " javatype = "java.lang.integer"> </id> <result property = "username" column = "username" javatype = "javatype =" java.string "> </result> <resultプロパティ="パスワード "列="パスワード "javatype =" java.lang.string "> <resultプロパティ= < javatype = "java.lang.double"> </result> </resultMap> <! - さまざまなタグのID属性はインターフェイスのメソッド名と同じでなければならず、ID属性値は一意であり、再利用できません。パラメータ型プロパティは、クエリ時に使用されるパラメータータイプを指定し、結果Typeプロパティはクエリによって返される結果セットタイプを指定します - > <! - usegeneratedkeys :(挿入にのみ役立ちます)これは、JDBCのGetGeneratedKeysメソッドを使用するようにMyBatisを指示します。およびsqlserver)。デフォルト値:false。 - > <! - keyproperty :(挿入にのみ便利)プロパティをマークします。 MyBatisは、GetGeneratedKeysまたはINSERTステートメントのSelectKey Child Elementを通じてその価値を設定します。デフォルト:設定されていません。 - > <! - #{}コンテンツはプレースホルダーです。パラメーターがJavabeanの場合、配置されているBeanオブジェクトのプロパティ値を示します - > <Id = "Insertuser" usegeneratedKeys = "true" keyproperty = "keyproperty =" yuser.id "> t_user(username、password、account)values(#{user.username}、#{ユーザー。 id = "updateUser">更新t_user set username =#{usname}、password =#{u.password}、account =#{u.account}ここで、id =#{id} </update> <delete> <deleteuser "parametertype =" int "> dellete from t_user of =##< parametertype = "int" resultmap = "usermap"> select * from t_user where id =#{id} </select> <select id = "selectaluser" resultmap = "usermap"> select * from t_user </select> < t_user values <foreach collection = "users" item = "users" separator = "、">(null、#{users.username}、#{users.password}、#{useres.account})</insate separator = "、">#{id} </foreach>)</delete> <! - コレクションは、トラバーサル(必須)に使用される要素、サポート配列、リスト、セット - > <! - セット内の各要素が反復したときのエイリアスを表します。 - > <! - セパレーターは、各反復の間のセパレーターとして使用されるシンボルを表します。 - > <id = "pageruser" pageruser "parametertype =" java.util.map "resultmap =" usermap "> select * from t_user where = <if test =" username!= null "> and username like '%$ {username}%' </if> limit $ {index}、$ {pagezezeize parametertype = "java.util.map" resulttype = "int"> t_user where = <if test = "username!= null">およびusername from '%$ {username}%' </if> </select> </select> </mapper> $ SQLを生成すると、引用符は組み立てられません。パッケージcom.cy.mybatis.serviceなどの注文などのパラメーターアセンブリテストクラスに使用できます。Java.util.arraylist; Import java.util.util.list; Import java.util.map; Import java.util.map; Import org.apache.ibatis.session.session; Import com.com.cy.session; com.cy.mybatis.tools.dbtools; import com.cy.cy.mybatis.mapper.usermapper; public class userservice {/*** @param args*/public static void main(string [] args){// insertuser(); // deleteuser(); batchinsertuser(); // batchdeleteuser(); // countuser(); pageruser(); pageruser();} private static void countuser(){sqlsession session = dbtools.getsession(); usermapper mapper = session.getmapper(usermapper.class); Map <String、Object> Params> Params hashmap <string、object>(); params.put( "username"、 "kitty"); int index =; params.put( "index"、index); // mysqlはparams.put( "pagesize"、); //ページint郡ごとに表示されるデータストリップの数から始まります; try {count = mapper.countuser(parials); system.out.println(count);} catch(exceance e){e.printstacktrace();}} private static boid pageruser(){sqlsession(){ dbtools.getSession(); usermapper mapper = session.getMapper(usermapper.class); map <string、object> params = new hashmap <string、object>(); params.put( "username"、 "kitty"); params.put( "index"、); // mysqlはparams.put( "pagesize"、); for(userbean userbean:u){system.out.println( "-----------"+userbean);}}}}}} {e.printstacktrace();}} private static void batchdeleteuser(){){sqlsession session = dbtools.getSession(); session.getMapper(usermapper.class); list <integer> ids = new arraylist <integer>(); for(int i =; i <; i ++){ids.add(i);} try {mapper.batchdeleteuser(ids); session.commit();} catch(e.printtacktrace(); batchinsertuser(){sqlsession session = dbtools.getsession(); usermapper = session.getMapper(usermapper.class); list <userbean> users = new arraylist <userbean>(); 。); users.add(user);} try {mapper.batchinsertuser(users); session.commit();} catch(expection e){e.printstacktrace();}}/*** new user*/private static void insertuser(){sqlsession session = dbtoolssession(); session.getMapper(usermapper.class); userbean user = new userbean( "yi"、 ""、。); try {mapper.insertuser(user); system.out.println(user.tostring()); session.commit();} catch(Exception e){e.printstacttrace ers(); rollback(); static void deleteuser(){sqlsession session = dbtools.getsession(); usermapper mapper = session.getMapper(usermapper.class); try {mapper.deleteuser(); session.commit();} catch() void updateuser(){sqlsession session = dbtools.getsession(); usermapper mapper = session.getMapper(usermapper.class); userbean user = new userbean( "xiao ming"、 ""、。 {e.printstacktrace(); session.rollback();}}/*** query user by id*/private void selectuserbyid(){sqlsession session = dbtools.getsession(); usermapper = session.getmapper(usermapper.class); mapper.selectuserbyid(); system.out.println(user.tostring()); session.commit();} catch(excepse e){e.printstacktrace(); session.rollback();}/*** queryすべてのユーザー*/private void selectaluser(){sqlsession session = users getsossion(); mapper = session.getMapper(usermapper.class); try {list <userbean> user = mapper.selectalluser(); system.out.println(user.tostring()); session.commit();} catch(exception e){e.printstacktrace(); session.Rollback();}}}}}}プロジェクト全体をご覧ください。
すべてを固定する必要があります!