MyBatis는 일반 SQL 쿼리, 저장 프로 시저 및 고급 매핑을 지원하는 우수한 지속성 계층 프레임 워크입니다. MyBatis는 거의 모든 JDBC 코드의 수동 설정과 매개 변수 및 결과 세트의 검색 캡슐화를 제거합니다. MyBatis는 구성 및 원래 매핑, 맵핑 인터페이스 및 Java의 Pojos (일반 Old Java Objects)를 데이터베이스의 레코드로 사용하기 위해 간단한 XML 또는 주석을 사용할 수 있습니다.
일대일 매핑
인생에서는 여전히 학생 및 ID 카드와 같은 일대일 사례가 있거나 우리나라에는 일부일처 제 시스템이 구현됩니다. 그런 다음 학생과 ID 카드를위한 ID 카드 하나만 있고 물론 각 ID 카드에는 하나의 ID 카드 만 있습니다.
데이터베이스 스크립트 :
- 데이터베이스 드롭 데이터베이스가 존재하는 경우- 데이터베이스 생성 데이터베이스 생성 데이터베이스 생성 데이터베이스 생성 mybatis 기본 문자 세트 UTF8;- 데이터베이스 사용 mybatis 사용;- 데이터 테이블 삭제 삭제 스튜던트. 테이블 학생 (SID INT (255), SNAME VARCHAR (32), SCID INT (255), 제약 PK_SID 1 차 키 (SID), 제약 FK_SCID 외국 키 (SID) 참조 카드 (CID));- 테스트 데이터 인서트 추가 (CID, NUM) 값 (1, 12345678901234678 '); 값 (1, '하하', 1);
새로운 one2one.card.java 클래스를 만듭니다
패키지 one2one; import java.io.serializable;/*** id card*@author 관리자 **/ @suppresswarnings ( "serial") 공개 클래스 카드 구현 시리얼이즈 가능 {private integer cid; private string num; public integer getcid () {return cid;} public void setcid (integer cid) {cid;} {return num;} public void setnum (String num) {this.num = num;}}새로운 one2one.student.java 클래스를 만듭니다
패키지 one2one; import java.io.serializable;/*** 학생*@author 관리자 **/ @suppresswarnings ( "Serial") 공개 클래스 학생은 시리얼이즈 가능 {private integer sid; private string sname; 개인 카드 카드; public integer getsid () {return sid; public void setsid (integer sid) {this. sname;} public void setsname (String sname) {this.sname = sname;} public card getcard () {return card;} public void setcard (카드 카드) {this.card = card;}}One2One 패키지 아래에서 새 cardmapper.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 "> <Mapper Namespace ="cardnamespace "> id = "cardmap"> <id column = "cid"property = "cid"/> <result column = "num"property = "num"/> <resultmap> </mapper>
마찬가지로 One2one 패키지 아래에서 새 Studentmapper.xml 파일을 만듭니다.
<? xml version = "1.0"alcoding = "utf-8"?> <! doctype mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd "> <mapper Namespace ="gendermap type = "" ""gendermap "" " id = "studentmap"> <id column = "sid"property = "sid"/> <result column = "sname"property = "sname"/> <!-관련 필드를 쓰지 마십시오-> </resultmap> <select id = "findById"parameterType = "integer"resultmap = "StudentMap"> select s.sid, s.sname, c.cid, ccid s.cid 및 C.NUM S.CID. s.sid = #{sid} </select> </mapper>SRC에서 새 mybatis.cfg.xml 파일을 만들고 Studentmapper.xml 및 cardmapper.xml 파일을 포함시킵니다.
<? xml version = "1.0"encoding = "utf-8"?> <! doctype configuration public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd "> configuration> <reconments a default 환경 정보를 설정합니다. default = "mysql_developer"> <!-MySQL 환경 정보 연결-> <환경 ID = "mysql_developer"> <!-MyBatis는 JDBC Transaction Manager-> <transactionManager type = "JDBC"/> <! <! 데이터베이스와 상호 작용 -> <property name = "driver"value = "com.mysql.jdbc.driver"/> <property name = "url"value = "jdbc : mysql : //127.0.0.1 : 3306/mybatis"/> <property name = "value" "root"/> value = "mysqladmin"/> <dataSource> </환경> <!-Oracle Environment Information을 연결-> <환경 ID = "Oracle_Developer"> <!-MyBatis는 JDBC Transaction Manager를 사용합니다-> <transactionManager type = "jdbc"/> <!-MyBatis는 연결 풀링을 사용하여 연결을 얻습니다. 데이터베이스와 상호 작용하기위한 속성 -> <속성 이름 = "driver"value = "oracle.jdbc.driver.oracledriver"/> <속성 이름 = "url"value = "jdbc : oracle : thin :@@127.0.0.1 : 1521 : orcl"/> <속성 이름 = "value" "value"/> value = "tiger"/> </dataSource> </환경> </환경> <! <!-맵 파일로드-> <mappers> <Mapper resource = "one2one/cardmapper.xml"/> <mapper resource = "one2one/studentmapper.xml"/> </mappers> </configuration>
Util 패키지 아래에서 새 도구 클래스 MyBatisutil.java 클래스 생성
패키지 util; import java.io.ioexception; import java.io.reader; import java.sql.connection; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.ssession.sqlsessionfactory; import; org.apache.ibatis.session.sqlsessionfactorybuilder; public class mybatisutil {private static strandlocal> strooklocal = new ThreadLocal <SqlSession> (); public static static static static sqlsession factory sqlsession factory; // private mybatisutil () {)} ///) src /mybatis.cfg.xmlstatic {try {reader reader = resources.getresourceasreader ( "mybatis.cfg.xml"); sqlsessionfactory = new sqlsessionfactorybuilder (). build (ioxception e) {e.printstacktrace (); @return*/public static sqlsession getSqlsession () {// 현재 ThreadSqlSession SqlSession에서 sqlsession 객체를 얻습니다. STREADTHREADLOCAL.SET (SQLSESSION);}} SQLSESSION을 반환합니다. null) {// sqlsession 객체 sqlsession.close (); // 현재 스레드와 sqlsession strook threadlocal.remove ();}}} // test public static void main (string [] args) {sqlsession sqlsession = mybatisutil.getsqlsession (); connect = conn = sqlsession.getConnection (); system.out.println (conn! = null? "연결 성공": "연결 실패";}}새로운 지속성 계층 클래스 Stuentcarddao.java 클래스를 만듭니다
패키지 one2one; import org.apache.ibatis.session.sqlsession; import org.junit.test; import util.mybatisutil;/*** 지속성 계층*@author 관리자 **/public class studentcarddao {/*** query student no. 1의 정보 및 idparam id*/public idger (public student id) 예외 {sqlsession sqlsession = null; try {sqlsession = mybatisutil.getsqlsession (); return sqlsession.selectone ( "Studentnamespace.findbyid", id);} catch (예외 e) {e.printstacktrace (); 마지막으로 {mybatisutil.closeSqlSession ();}} // 테스트 쿼리 학생 번호 1의 정보 및 ID 카드 정보 @TestPublic void testFindById () 예외 {StudentCarddao dao = new StudentCarddao (); Student Student = dao.findbyid (1); system.out.println (whening.getSid ()+":"+whiting.getSname ()}}현재 학생 번호 1의 이름 만 쿼리 할 수는 있지만 현재 카드 속성의 값은 NULL이므로 windentmapper.xml에서 볼 수 있기 때문에 식별 번호를 쿼리 할 수 없습니다.
<select id = "findById"parameterType = "Integer"resultMap = "StudentMap">
Mybatis 가이 문장을 구문 분석 할 때 쿼리 데이터를 SID 및 Sname으로 만 캡슐화 할 수 있으므로 어떻게해야합니까?
StudentMapper.xml에서
<resultmap type = "one2one.card"id = "cardmap"> <id column = "cid"property = "cid"/> <result column = "num"property = "num"/> <result column = "num"/> </resultmap>
증가하다
<!-cardmapper.xml 파일 속성에 매핑 정보를 소개합니다. 학생의 관련 속성을 나타냅니다 .-> <연관 속성 = "card"resultmap = "cardnamespace.cardmap"/>
그런 다음이 시점에서 StudentMapper.xml의 전체 내용은 다음과 같습니다.
<? xml version = "1.0"alcoding = "utf-8"?> <! doctype mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd "> <mapper Namespace ="gendermap type = "" ""gendermap "" " id = "StudentMap"> <id column = "sid"property = "sid"/> <result column = "sname"property = "sname"/> <!-cardmapper.xml 파일 속성에 매핑 정보를 소개합니다. resultMap = "StudentMap"> SELECT S.SID, S.SNAME, C.CID, C.NUM에서 학생 S, CARD CHHERE S.SCID = C.CID 및 S.SID = #{SID} </SELECT> </MAPPER>이제 학생 ID 번호를 테스트 할 수 있습니다
지속성 계층 클래스 stuentcarddao.java 클래스의 테스트 방법을 변경하십시오.
// testpublic void testfindbyid ()는 예외를 겪고 {studentcarddao dao = new StudentCarddao (); 학생 학생 = dao.findbyid (1); system.out.println (whening.getSid ()+":"+withy.getSname ()+":"+Student.getCard ());};비슷하게
Quice에서 "haha"학생 정보 및 ID 카드 정보를 쿼리하는 메소드 추가 wichak.java class
/*** "haha"학생* @param name* @param name* @return* @throws exception*/public student findbyname (string name)의 정보 및 ID 카드 정보를 쿼리합니다. 예외 {sqlsession sqlsession = null; try {sqlsession = mybatisutil.getSqlsession (); retudnamespace.findbyname. (예외 e) {e.printstacktrace (); Throw e;} 마지막으로 {mybatisutil.closesqlsession ();}}테스트 방법을 추가하십시오
// testpublic void testfindbyname ()는 예외를 던졌습니다. {windentcarddao dao = new StudentCarddao (); 학생 학생 = dao.findbyName ( "haha"); system.out.println ()+":"+withy.물론 지금 테스트하면 StudentMapper.xml 파일에서 <select>를 구성하지 않았기 때문에 비참하게 죽을 것입니다.
<ind = "findByName"ParameterType = "String"resultMap = "StudentMap"> SELECT S.SID, S.SNAME, C.CID, C.NUM에서 학생 S, CARD CWHHER S.SCID = C.CID 및 S.SNAME = #{SNAME} </select>이렇게하면 테스트가 성공할 것입니다. 임무가 완료되었습니다.
전체 코드는 다음과 같습니다.
MySQL 데이터베이스 스크립트
- 데이터베이스 드롭 데이터베이스가 존재하는 경우- 데이터베이스 생성 데이터베이스 생성 데이터베이스 생성 데이터베이스 생성 mybatis 기본 문자 세트 UTF8;- 데이터베이스 사용 mybatis 사용;- 데이터 테이블 삭제 삭제 스튜던트. 테이블 학생 (SID INT (255), SNAME VARCHAR (32), SCID INT (255), 제약 PK_SID 1 차 키 (SID), 제약 FK_SCID 외국 키 (SID) 참조 카드 (CID));- 테스트 데이터 인서트 추가 (CID, NUM) 값 (1, 12345678901234678 '); 값 (1, '하하', 1);
도구 클래스 mybatis.java 클래스
패키지 util; import java.io.ioexception; import java.io.reader; import java.sql.connection; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.ssession.sqlsessionfactory; import; org.apache.ibatis.session.sqlsessionfactorybuilder; public class mybatisutil {private static strandlocal> strooklocal = new ThreadLocal <SqlSession> (); public static static static static sqlsession factory sqlsession factory; // private mybatisutil () {)} ///) src /mybatis.cfg.xmlstatic {try {reader reader = resources.getresourceasreader ( "mybatis.cfg.xml"); sqlsessionfactory = new sqlsessionfactorybuilder (). build (ioxception e) {e.printstacktrace (); @return*/public static sqlsession getSqlsession () {// 현재 ThreadSqlSession SqlSession에서 sqlsession 객체를 얻습니다. STREADTHREADLOCAL.SET (SQLSESSION);}} SQLSESSION을 반환합니다. null) {// sqlsession 객체 sqlsession.close (); // 현재 스레드와 sqlsession strook threadlocal.remove ();}}} // test public static void main (string [] args) {sqlsession sqlsession = mybatisutil.getsqlsession (); connect = conn = sqlsession.getConnection (); system.out.println (conn! = null? "연결 성공": "연결 실패";}}mybatis.cfg.xml 파일
<? xml version = "1.0"encoding = "utf-8"?> <! doctype configuration public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd "> configuration> <reconments a default 환경 정보를 설정합니다. default = "mysql_developer"> <!-MySQL 환경 정보 연결-> <환경 ID = "mysql_developer"> <!-MyBatis는 JDBC Transaction Manager-> <transactionManager type = "JDBC"/> <! <! 데이터베이스와 상호 작용 -> <property name = "driver"value = "com.mysql.jdbc.driver"/> <property name = "url"value = "jdbc : mysql : //127.0.0.1 : 3306/mybatis"/> <property name = "value" "root"/> value = "mysqladmin"/> <dataSource> </환경> <!-Oracle Environment Information을 연결-> <환경 ID = "Oracle_Developer"> <!-MyBatis는 JDBC Transaction Manager를 사용합니다-> <transactionManager type = "jdbc"/> <!-MyBatis는 연결 풀링을 사용하여 연결을 얻습니다. 데이터베이스와 상호 작용하기위한 속성 -> <속성 이름 = "driver"value = "oracle.jdbc.driver.oracledriver"/> <속성 이름 = "url"value = "jdbc : oracle : thin :@@127.0.0.1 : 1521 : orcl"/> <속성 이름 = "value" "value"/> value = "tiger"/> </dataSource> </환경> </환경> <! <!-맵 파일로드-> <mappers> <Mapper resource = "one2one/cardmapper.xml"/> <mapper resource = "one2one/studentmapper.xml"/> </mappers> </configuration>
card.java 및 student.java
패키지 one2one; import java.io.serializable;/*** id card*@author 관리자 **/ @suppresswarnings ( "serial") 공개 클래스 카드 구현 시리얼이즈 가능 {private integer cid; private string num; public integer getcid () {return cid;} public void setcid (integer cid) {cid;} {return num;} public void setnum (String num) {this.num = num;}} 패키지 one2one; import java.io.serializable;/*** 학생*@author 관리자 **/ @suppresswarnings ( "Serial") 공개 학생들은 시리얼이즈 가능한 {private inger sname; public inte sid; setSid (this.sid = sid;} public string getSname () {return sname;} public void setsname (String sname) {this.sname = sname;} public card getcard () {return card;} public void setcard (카드 카드) {this.card = card;}}card.java의 매핑 파일 cardmapper.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 "> <Mapper Namespace ="cardnamespace "> id = "cardmap"> <id column = "cid"property = "cid"/> <result column = "num"property = "num"/> <resultmap> </mapper>
학생에 해당하는 매핑 파일 .java 클래스 Studentmapper.xml 파일
<? xml version = "1.0"alcoding = "utf-8"?> <! doctype mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd "> <mapper Namespace ="gendermap type = "" ""gendermap "" " id = "StudentMap"> <id column = "sid"property = "sid"/> <result column = "sname"property = "sname"/> <!-cardmapper.xml 파일 속성에 매핑 정보를 소개합니다. resultMap = "StudentMap"> SELECT S.SID, S.SNAME, C.CID, C.NUM에서 학생 S에서 C.NUM, CARD CHHERE S.SID = C.CID 및 S.SID = #{SID} {SELECT ID = "FINDBYNAME"PARAMERTYPE = "String"resultMap = "StudentMap"> SelectS S.S.S.Scid, CCID 및 C.NUM S.CID 및 C.Num. s.sname = #{sname} </select> </mapper>지속성 계층 클래스 StudentCarddao.java 클래스
패키지 one2one; import org.apache.ibatis.session.sqlsession; import org.junit.test; import util.mybatisutil;/*** 지속성 계층*@author 관리자 **/public class studentcarddao {/*** query student no. 1의 정보 및 idparam id*/public idger (public student id) 예외 {sqlsession sqlsession = null; try {sqlsession = mybatisutil.getsqlsession (); return sqlsession.selectone ( "Studentnamespace.findbyid", id);} catch (예외 e) {e.printstacktrace (); 마지막으로 {mybatisutil.closeSqlSession ();}}}/*** 쿼리 "haha"학생 정보 및 ID 카드 정보* @param name* @return* @throws Exception*/public student findByName (String Name) 예외 {sqlsession sqlsession = null; sqlsession = mybatisutils (retury); sqlsession.selectone ( "Studentnamespace.findbyName", name);} catch (예외 e) {e.printstacktrace (); strow e;} 최종적 {mybatisutil.closesqlsession ();} // 테스트 쿼리 학생 No. 1의 정보 및 ID 카드 void testfindbyid ()}}}}}}}}}}}}. 신입생 carddao (); 학생 학생 = dao.findbyid (1); system.out.println (whening.getSid ()+":"+whinding.getSname ()+":"+student.getCard (). getnum ());} // 테스트 쿼리 "haha"학생 정보 및 ID 카드 void void void void testa dao = new StudentCarddao (); 학생 학생 = dao.findbyName ( "haha"); System.out.println ()+"+": "+whitity.getSname ()+": "+Student.getCard (). getNum ());}}위는 편집자가 소개 한 Mybatis 일대일 매핑에 대한 첫 번째 자습서입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!