오늘날 우리가 주로 배우는 관계는 일대일 관계와 일대일 관계입니다.
1. 일대일 관계
예를 통해 설명해 봅시다. (아내는 남편에 해당합니다).
1) 데이터베이스 정보
테이블 t_wife (id int 1 차 키 auto_increment, wife_name varchar (), fk_husband_id int); 테이블 생성 t_husband (id int 기본 키 auto_increment, ridide_name varchar ()); t_husband 값 (null, 'hello')에 삽입; t_wife 값 (Null, 'Kitty', ')
2) 해당 Javabean 코드
데이터베이스에 한 당사자가 구성한 외국 키는 하나만 있지만,이 일대일 관계는 양방향 관계입니다.
남편. 자바
package com.cy.mybatis.beans; import java.io.serializable;/*** one*@author acer **/public class hasudbean은 시리얼이즈 가능 {개인 정적 최종 최종 긴 시리얼 스리 오니 (private static final long serialversionuid = l; private string); 개인 아내의 아내; 공공 남편 () {슈퍼 족 (); {super (); this.id = id; this.name = name; this.wife = wife; setwife (wifebean wife) {this.wife = wife;}@atriadepublic string toString () {return "resour [id =" + id + ", name =" + name + ", wife =" + wife + "];}} wifebean.java
package com.cy.mybatis.beans; import java.io.serializable;/*** one*@author acer **/public class wifebean은 직렬화 가능한 {private static final long serialversionuid = l; private string 이름; 개인 문자열 남편; 공공 아내 () {} {whoudgerbean (); {super (); this.id = id; this.name = name; this.husband = 남편;} public integer getid () {return id;} public void setid (reteger id) {this.id = id;} public string getName () {return name;} public void setName (문자열 이름) {public whoushble gethod getName (thist.name)}}}}}}} void sethusband (남편 남편) {this.husband = 남편;}@atriadepublic string toString () {return "wife [id =" + id + ", name =" + name + ", 남편 =" + 남편 + "];}} 3) 다음으로 두 개의 인터페이스, 남편 매퍼와 Wifemapper를 설정하십시오.
남편 매매
package com.cy.mybatis.mapper; import com.cy.mybatis.bean.bean.bean.bean.husbandbean; public interface hasudmapper {/*** query 남편 정보 {/*** query query 남편 정보 Id*@param id* @return*@throws Exception*/public rasidebean selecthusbandByid (int id) 예외;/*** query information*/@param id*@param id*@param id*@param id*@param id*@param id*@param id*@param id*@param id*@param id*@param id*@param Selecthusbandandwife (int id)는 예외를 던졌습니다.} 4) ridaymapper.xml 파일을 정의하십시오
<? xml 버전 = "." 인코딩 = "utf-"?> <! DocType Mapper public "-// mybatis.org/dtd Mapper." "http://mybatis.org/dtd/mybatis--mapper.dtd"> << husbatis namepace ="com.cy.mybatis.mapper.husbandmapper "> <resultmap type ="rusidbean "id ="husidandwife "> <id id"id "id"javatype = "java.lang.lang.lang.lang.lang.lang.lang. column = "name"javatype = "java.lang.string"/> <!- 협회 복잡한 유형 연관성; 많은 결과 가이 유형의 임베디드 결과지도 연관성에 포장되거나 열 = "id"를 참조하십시오. 여기서 ID는 t_wife 테이블의 기본 키 ID를 나타냅니다. 이 쿼리 아내는 아내 맵퍼에 메소드가 있습니다 .-> <Association Property = "wife"column = "id"javatype = "wifebean"select = "com.cy.mybatis.mapper.wifemapper.wifeByHusbandid"> </accociation> </resultmap> <!-결과 유형의 예상 자격을 반환합니다. -> <select id = "selecthusbandByid"resultType = "ridentBean"> select *에서 * id =#{id} </select> <!-결과 맵 이름 참조 외부 결과 맵. 컬렉션을 반환합니다. -> <select id = "selecthusband andwife"resultmap = "rustainandwife"> select * where id =#{id} </select> </mapper>wifemapper.xml에는 메소드가 있습니다
<? xml 버전 = "." 인코딩 = "utf-"?> <! DocType Mapper public "-// mybatis.org/dtd Mapper." "http://mybatis.org/dtd/mybatis--mapper.dtd"> <mapper 네임 스페이스 ="com.cy.mybatis.mapper.wifemapper "> <select id ="selectwifebyhusbandid "resulttype ="weelbean "> select * from t_wife </select} </select>
5) 구현을 작성하십시오
package com.cy.mybatis.service; import org.apache.ibatis.session.sqlsession; import com.cy.mybatis.bean.husbandbean; import com.cy.mybatis.mapper.husbandmapper; import com.cy.mybatis.tools.dbtools; public class onetooneservice () {selecthusbandandwife ();} private static void selecthusbandandwife () {sqlsession session = dbtools.getSession (); hasudmapper hm = session.getMapper (ridideMapper.class); undubean 남편 = hm.selecthusbandandwife (); sevess.comcit (); {e.printstacktrace ();}}} 참고 : 도구 클래스는 이전 장에서 작성되었으며 어제 기준으로 설정된 것과 매우 유사합니다.
알아채다:
Mybatis는 실제로 XML에서 작동하고 있습니다. 모든 방법은 XML로 직접 정의됩니다. 인터페이스를 작성하는 것은 우리의 3 학자 사고에 더 잘 부합하는 것입니다. 인터페이스를 작성하지 않으면 세션을 통해 XML에서 메소드를 직접 작동 할 수 있습니다.
XML에 메소드가있는 한 사용될 수 있으며 호출 방법은 다음과 같습니다. 네임 스페이스+ 메소드 이름;
ExceptyPe를 예외로 사용하는 경우 속성 이름이 필드 이름과 동일해야합니다.
동일하지 않은 경우 resultMap을 사용하십시오.
2. 일대일 관계
예를 통해 설명해 봅시다. (하나의 잠금은 여러 키에 해당합니다).
2.1) 데이터베이스 정보에 여기에 추가 된 데이터가 없으므로 Batch를 사용하여 데이터를 추가합니다.
테이블 t_key (id int 기본 키 auto_increment, key_name varchar (), fk_lock_id int)를 만듭니다. 테이블 t_lock 생성 (ID int 기본 키 AUTO_INCREMENT, LOCK_NAME VARCHAR ());
2.2) 엔티티 클래스
keybean.java
package com.cy.mybatis.beans; import java.io.serializable;/*** manytoone***/public class keybean은 시리얼이 가능한 {private static final long serialversionuid = l; private string key; public keybean () {superbean keybean (integer id, key bean) {super (); this.id = id; this. key = key; this.lock = lock;} public integer getid () {return id;} public void setid (reteger id) {this.id = id;} public void setkey (} public void setkey (string key) {this.key = key;} {reply void; setLock (Lockbean Lock) {this.lock = lock;}@OverridePublic String toString () {return "return"keyBean [id = " + id +", key = " + key +", lock = " + lock +"] ";}} kepbean.javapackage com.cy.mybatis.beans; import java.io. java.util.list;/*** onetomany***/public class lockbean은 직렬화 가능 {private static final long serialversionuid = l; 개인 정수 ID; 개인 문자열 잠금; 개인 목록 <KeyBean> 키; public Lockbean () {super ();} public lockbean (int id, string, list <keybean> keys) {keys> keys). id; this.lock = lock; this. this.keys = keys;} public integer getid () {return id;} public void setId (returger id) {this.id = id;} public string getLock () {return lock;} public void setLock (String Lock) {this.lock = lock;} getkeys () {return syys; setKeys (list <keyBean> 키) {this.keys = keys;}@atredgepublic 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.annotations.annotations.annotations.annotations.annotations.annotations.annotations.param; import com.cy.mybatis.beans.keybean; public interface keypper {/*** a add in batch* @Return* @param ( "Keys"*/public int int int int int int int int int int int int int int int int int int int int) BatchSaveKeys (@Param ( "키") 목록 <KeyBean> 키);} lexecmapper.javapackage com.cy.mybatis.mapper; import org.apache.ibatis.annotations.param; import com.cy.mybatis.beans.beans.beans.beans.beans.beans.beans.beans.bean.bean.bean.bean.bean.bean.bean.bean.bean.bean.bean.bean.bean.bean.bean.public lekmapper* @param lock* @param lock* @param lock*. savelock (@param ( "lock") Lockbean Lock);/*** id* @param id* @return*/public lockbean findlockbyid (int id)에 따라 잠금 정보를 쿼리합니다. 2.4) XML 파일을 만듭니다
keymapper.xml
<? xml 버전 = "." 인코딩 = "utf-"?> <! DocType Mapper public "-// mybatis.org/dtd Mapper." "http://mybatis.org/dtd/mybatis--mapper.dtd"> <mapper 네임 스페이스 ="com.cy.mybatis.mapper.keymapper "> <ehindmap id ="kyymap "type ="keybean "> <id"id "id"id "id"id "javatype ="java.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang. column = "key_name"javatype = "java.lang.string"/> </resultmap> <!-컬렉션은 트래버스 (필수), 배열, 목록, set-> <!-컬렉션의 각 요소가 반복 될 때 별칭을 나타냅니다. -> <!-분리기는 각 반복 사이의 분리기로 사용되는 기호를 나타냅니다. -> <insert id = "batchsavekeys"> t_key 값에 삽입 <foreach collection = "keys"item = "key"separator = ","> (null,#{key.key},#{key.lock.id}) </foreach> </inseart> </inset = "finkysbyLockid"resultmap = "keymap"> #{id} </select> </mapper> lockmapper.xml <? xml 버전 = "." 인코딩 = "utf-"?> <! DocType Mapper public "-// mybatis.org/dtd Mapper." "http://mybatis.org/dtd/mybatis--mapper.dtd"> << <<< <<< <<< <<< happer 네임 스페이스 ="com.cy.mybatis.mapper.lockmapper "> <!-사용자 정의 반환 유형-> <resultmap id ="lockmap "유형 ="lockbean "> 속성 = "잠금"열 = "lock_name"javatype = "java.lang.string"/> <result property = "lock"열 = "lock_name"javatype = "java.lang.string"/> <collection property = "keys"열 = "id" select = "com.cy.mybatis.mapper.keymapper.findkeysbylockid"> </collection> </resultmap> <insert id = "savelock"> t_lock 값 (null,#{lock.lock}) </insert> < "findlockbyid"rockmap "> select * from t_lock where where where where where where where when #{id} </select> <select> <select id = "findlockandkeys"resultmap = "lockandkeysmap"> select * from t_lock where id = #{id} </select> </mapper> 2.5) 구현
package com.cy.mybatis.service; import java.util.arraylist; import java.util.list; import org.apache.ibatis.session.sqlsession; import com.cy.mybatis.beans.keybean; import com.cy.mybatis.beans.lockbean; import com.cy.cy.cy.mybatis.meymapper; com.cy.mybatis.mapper.lockmapper; import com.cy.mybatis.tools.dbtools; public class onetomanyservice {public static void main (String [] args) {// savelock (); // batchsavekeys (); FindLockAndKeys ();} 개인 정적 void findlockandkeys () {sqlsession session = dbtools.getSession (); lockmapper lm = session.getMapper (lockmapper.class); Lockbean Lock = lm.findlockandkeys (); System.out.println (lock); {} static void void void void void void void void void dbtools.getSession (); lockmapper lm = session.getMapper (lockmapper.class); keyport km = session.getMapper (keyples.class); Lockbean lock = lm.findlockByid (); list <keybean> keys = new arraylist <keybean> (); keybean (i ++) {i ++) {i ++) {i ++). "key"+i, lock); keys.add (key);} km.batchsavekeys (keys); session.commit ();} private static void savelock () {sqlsession session = dbtools.getSession (); lockmapper lm = session.getMapper (lockmapper.class); New Lockbean (NULL, " null); lm.savelock (lock); session.commit ();}} 결과는 다음과 같습니다.
3. 배치 작동 및 페이지 매김
여기에서는 이전 장의 사용자를 사용하고 기본 코드를 작성합니다.
먼저 페이징 물체를 정의하십시오.
package com.cy.mybatis.beans; import java.util.list;/*** Pagination Object** @author*/public class pager {private int pageno; // private pageno; // private int pageTotal pagetoL; // 총 페이지 번호 private int page intize; // 총 페이지 번호 preative reties; getpageno () {return pageno;} public void setpageno (int pageno) {this.pageno = pageno;} public int getpagetotal () {return pagetotal;} public void setpagetotal (int pagetotal) {this.pagetot = publoToTal;}} {retoptotal;} 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> list) {this.list = list; "Pager [pageno =" + pageno + ", pagetotal =" + pagetotal + ", rowstotal =" + rowstotal + ", pagesize =" + pagesize + ", list =" + list + "]";}} usermapper.java interface. package com.cy.mybatis.mapper;import java.util.List;import java.util.Map;import org.apache.ibatis.annotations.Param;import com.cy.mybatis.beans.UserBean;public interface UserMapper {/*** Add * @param user* @return* @throws Exception*/public int insertUser(@Param("user")UserBean user) 예외;/*** 사용* @param user* @param id* @return* @throws Exception*/public int updateUser ( "u") userbean user, @param ( "id") int id) 예외;/*** 예외* @param id* @@throws Exception*/public int deleteuser (int id) rows*/*** query 사용자 정보를 기반으로합니다. @Throws Exception*/public userBean selectUserById (int id)는 예외를 발생시킵니다./*** 모든 사용자 정보 쿼리* @return*@throws 예외*/public list <userBean> selectallUser ()는 예외를 던집니다./*** 배치 추가*@param user* @return*@throws 예외*/public int batchinsertuser ( "사용자") 목록 <사용자 ") 목록 <사용자") 목록 <사용자 "). 삭제* @param list* @return* @throws 예외*/public int batchdeleteuser (@param ( "목록") 목록 <integer> list) 예외;/*** 페이징 쿼리 데이터* @param parma* @return* @throws 예외*/public list <userbean> parmas* @param* @param* @param parma *** ************ public list*/public list*/public list*/public list*/* pagination stat incation; @Throws Exception*/public int countuser (map <string, object> parmas)는 예외를 던지고} xml 파일 <? xml 버전 = "." 인코딩 = "utf-"?> <! DocType Mapper public "-// mybatis.org/dtd Mapper." "http://mybatis.org/dtd/mybatis--mapper.dtd"> << <<<<<<<< <happer 네임 스페이스 ="com.cy.mybatis.mapper.usermapper "> <!-사용자 정의 반환 결과 세트-> <resultmap id ="usermap "type ="userbean "> <id property ="id "id" javatype = "java.lang.integer"> </id> <result property = "username"column = "username"javatype = "assername"javatype = "java.lang.string"> </result> <result property = "password"열 = "password"javatype = "java.lang.string"</result propert> <result 속성 = "계정" "계정" "계정" javatype = "java.lang.double"> </result> </resultmap> <!- 다양한 태그의 ID 속성은 인터페이스의 메소드 이름과 동일해야하며 ID 속성 값은 고유해야하며 재사용 할 수 없습니다. PARAMERTYPE 속성은 쿼리시 사용되는 매개 변수 유형을 지정하고 resultType 속성은 쿼리에 의해 반환 된 결과 세트 유형을 지정합니다-> <!-useGeneratedKeys : (삽입에만 유용합니다) MyBatis는 JDBC의 Get-GeneratedKeys 방법을 사용하여 Dato-in-in-in-in-in-in-in-in-interatedKeys 메소드를 사용하여 MyBatis에게 내부 키를 사용하여 데이터를 사용하여 데이터를 사용하여 Dato-Increment의 aut-increment를 사용합니다. sqlserver). 기본값 : False. -> <!-KeyProperty : (삽입에만 유용) 속성을 표시하십시오. Mybatis는 getgeneratedkeys 또는 삽입 문의 SelectKey 하위 요소를 통해 그 값을 설정합니다. 기본값 : 설정되지 않습니다. -> <!-#{} 콘텐츠는 자리 표시 자입니다. 매개 변수가 javabean 일 때, 배치 된 Bean 객체의 속성 값을 나타냅니다.-> <insert id = "InsertUser"useGeneratedKeys = "true"keyproperty = "user.id"> t_user (username, password, contract) 값 (#{user.username},#user.password} <us in user. id = "updateUser"> update t_user set username =#{u.username}, password =##{u.password}, account =##{u.account} where id =#{id} </update> <delete id = "deleteuser"parameter type = "int"> t_user where {id </delete> <selec id = "selectUserById"ParameterType = "int"resultMap = "usermap"> select *에서 t_user에서 select * id =#{id} </select> <select id = "selectalluser"resultmap = "usermap"> select * select> <!-배치 조작 및 선박 태그-> insert id = "batchinsertuer" parametertype = "java.util.list"> t_user 값 <foreach collection = "user"item = "user"separator = ","> (null,#{users.username},#{users.password},#{users. insert> <ledete id = "batchdeleteer" (<foreach collection = "list"item = "list"separator = ",">#{id} </foreach>) </delete> <!-컬렉션은 트래버스 (필수), 배열, 목록, set-> <!-세트의 각 요소가 반복 될 때별로를 나타냅니다. -> <!-분리기는 각 반복 사이의 분리기로 사용되는 기호를 나타냅니다. -> <select id = "pagerUser"parametertype = "java.util.map"resultmap = "usermap"> select * from t_user where = <if test = "username! = null"> 및 '%$'{username}%'{index}, $ {pages} </select> < "select> <"select> < "select> <"select < " parametertype = "java.util.map"resulttype = "int"> t_user에서 count (*) where = <if test = <username! = null "> 및 '%$ {username}%'</if> </select> </mapper> #when sql, quottes는 문자 유형 매개 변수를 조립합니다. $ SQL을 생성 할 때 따옴표가 조립되지 않습니다. Com.cy.mybatis.service 패키지 별 순서와 같은 매개 변수 어셈블리 테스트 클래스에 사용될 수 있습니다. com.cy.mybatis.tools.dbtools; import com.cy.mybatis.mapper.usermapper; public class userservice {/*** @param args*/public static void main (string [] args) {// insertUser (); // deleteuser (); // updateUser (); // selectUserByid (); batchinsertuser (); // batchdeleteuser (); // countuser (); pageruser ();} private static void countuser () {sqlsession session = dbtools.getSession (); usermapper mapper = session.getMapper (usermapper.class); map <String, params = new hashmap <string, object> (); params.put ( "username", "kitty"); int index =; params.put ( "index", index); // 시작할 페이지에서 시작합니다. mysql은 params.put ( "pagesize",); // 페이지 당 표시되는 데이터 스트립 수; int 카운티에 표시되는 데이터 스트립 수; try {count = mapper.countuser (params); system.out.println (count);} catch (Exception e) {e.printstacktrace ();}} private static void pueReruser () {sqls ussess () {dbtoolssession () {sqlsostions (); mapper = session.getMapper (usermapper.class); map <string, 객체> params = new Hashmap <string, object> (); params.put ( "username", "kitty"); params.put ( "index",); // 어느 페이지에서. MySQL은 params.put ( "pagesize",); // 페이지 당 표시되는 데이터 스트립 수로 시작합니다. {list <UserBean> u = mapper.pagerUser (params); for (userBean userBean : u) {system.out.println ( "---------"+userBean);}} catch (예외 e) {e.printstacktrace ();}} private static void batchdeleteuser () {sqlsession session = dbtools.getSession (usermapper mapper); ids = new ArrayList <integer> (); for (int i =; i <; i ++) {ids.add (i);} try {mapper.batchdeleteuser (ids); session.commit ()} catch (예외 e) {e.printstacktrace ()}} private station sessions = dbtools.getSession (); usermapper mapper = session.getMapper (usermapper.class); list <userbean> users = new ArrayList <userBean> (); for (int i =; i <; i ++) {new userBean ( "Kitty"+I "," "; users);};} {mapper.batchinsertUser (사용자); session.commit ();} catch (예외 e) {e.printstacktrace ();}}/*** 새 사용자*/private static void InsertUser () {sqlsession session = dbtools.gets.gets.gets.gets.gets.getmapper (usermapper.class); "",.); try {mapper.insertUser (user); System.out.println (user.toString ()); session.commit ();} catch (예외 e) {e e e e.printstacktrace (); session.rollback ();}}/*** delete delete user*/private static void deleteuser () {sqlsesions () {sqlsesions. session = dbtools.getSession (); usermapper mapper = session.getMapper (usermapper.class); try {mapper.deleteuser (); session.commit ();} catch (예외 e) {e.printstacktrace (); session.rollback ();}}}/*** upidation void void void void void void void void void void void void void void void void void void voide session = dbtools.getSession (); usermapper mapper = session.getMapper (usermapper.class); userbean user = new userBean ( "Xiao Ming", ",.); try {mapper.upDateUser (user,); session.commit () {e.printstacktrace (); id*/private static void selectUserById () {sqlsession session = dbtools.getSession (); usermapper mapper = session.getMapper (usermapper.class); try {userbean user = mapper.selectuserbyid (); system.out.println (user.tostring ()); commit ();} (}); {e.printstacktrace (); session.rollback ();}}/*** 모든 사용자*/private static void selectalluser () {sqlsession session = dbtools.getSession (); usermpper mapper = session.getMapper (usermapper.class); list <UserBean> user = mapper.selectalluser (); system.out.println (user.tostring ()); session.commit ();} catch (예외 e) {e.printstacktrace (); session.rollback ();}}} 전체 프로젝트를 살펴보십시오.
모든 것이 지속되어야합니다!