mybatis 소개
Mybatis는 Apache의 오픈 소스 프로젝트입니다. 2010 년 에이 프로젝트는 Apache Software Foundation에서 Google 코드로 이전되었으며 Mybatis로 이름이 바뀌 었습니다. 2013 년 11 월 Github로 마이그레이션되었습니다.
Ibatis라는 용어는 "Internet"과 "Abatis"의 조합에서 유래하며 Java 기반 지속성 계층 프레임 워크입니다. IBATIS는 SQL 맵 및 데이터 액세스 개체 (DAO)를 포함한 지속성 계층 프레임 워크를 제공합니다.
1. 필수 JAR 패키지
여기서 우리는 mybatis의 사용에 대해 별도로 논의하고 mybatis-xxxjar 패키지를 넣습니다.
Maven을 사용하여 프로젝트를 구축하는 경우 pom.xml의 종속성에 다음 구성을 넣어야합니다.
<pectionency> <groupid> org.mybatis </groupid> mybatis </artifactid> <bersion> 3.2.2 </version> </fectionency>
회사는 현재 3.2.2를 사용하고 있으며 자신의 JAR 패키지에 따라 버전 번호를 넣을 수 있습니다.
해당 프레임 워크와 통합하는 경우 통합 패키지를 넣어야합니다. 예를 들어, 우리 회사는 mybatis를 사용하여 Spring과 통합됩니다.
또한 mybatis-spring-xxx.jar 패키지를 추가하고 실제 상황에 따라 결정해야합니다. 물론 데이터베이스 드라이버 JAR 패키지도 필수 불가결합니다.
2. XML에서 sqlsessionFactory를 빌드하십시오
각 mybatis 기반 응용 프로그램은 sqlsessionfactory 인스턴스를 중심으로합니다.
sqlsessionfactory의 인스턴스는 sqlsessionfactorybuilder를 통해 얻을 수 있습니다.
SQLSESSIONFACTORYBUILDER XML 구성 파일 또는 사전 커스만화 된 구성 인스턴스에서 sqlsessionFactory 인스턴스를 빌드 할 수 있습니다.
XML 파일에서 sqlsessionFactory 인스턴스를 빌드하는 것은 매우 간단합니다. ClassPath에서 구성을 위해 Resource 파일을 사용하는 것이 좋습니다.
그러나 문자열 형식의 파일 경로 또는 파일 형식의 파일 경로를 포함하여 모든 inputStream 인스턴스를 사용하여 구성 할 수도 있습니다. // url.
MyBatis에는 Resources라는 도구 클래스가 포함되어 있으며, 여기에는 ClassPath 또는 기타 위치에서 리소스 파일을보다 쉽게로드 할 수있는 실용적인 방법이 포함되어 있습니다.
예를 들어:
문자열 resource = "mybatis-config.xml"; inputStream은 = resources.getResourceasStream (resource); sqlsessionFactory sqlsessionFactory = new SqlSessionCeptoryBuilder (). 빌드 (is);
XML 구성 파일 (구성 XML)에는 데이터베이스 연결 인스턴스를 얻기위한 데이터 소스 (DataSource)를 포함하여 MyBatis 시스템의 핵심 설정이 포함됩니다.
트랜잭션의 범위 및 제어 모드를 결정하는 트랜잭션 관리자 (TransactionManager). 구성 파일은 나중에 자세히 설명합니다.
예를 들어:
<!-? xml 버전 = "1.0"alcoding = "utf-8"?-> <configuration> <환경 = "개발"> <환경 ID = "Development"> <transactionManager type = "jdbc"> <dataSource type = "property name ="driver "value ="com.mysql.jdbc.driver "> value = "value ="jdbc : mysql : //192.168.200.200.12 : 3306/test_mybatis "> <property name ="username "value ="root "> <property name ="passpork "value ="root123 "> </property> </property> </dataSource> </transActionManager> </환경> <mappers> usermainmapper.xml 파일 usermainmapper.xml은 com.lanhuigu.mybatis.map 패키지에 위치하고 있으므로 리소스는 com/lanhuigu/mybatis/map/usermainmapper.xml-> <mapper resource = "com/lanhuigu/mybatis/map/usermainper.xml"> </mapper> </mapper>
환경 요소 바디에는 트랜잭션 관리 및 연결 풀링 구성이 포함되어 있습니다. Mappers 요소에는 매퍼 매퍼 세트가 포함되어 있습니다 (이 매퍼의 XML 파일에는 SQL 코드 및 매핑 정의 정보가 포함되어 있음).
3. sqlsessionfactory에서 sqlsession을 얻습니다
이제 SQLSESSIONFACTORY를 확보 했으므로 SQLSESSION 인스턴스를 얻을 수 있습니다. sqlsession에는 데이터베이스에 SQL 명령을 실행하는 데 필요한 모든 메소드가 완전히 포함되어 있습니다.
sqlsession 인스턴스를 통해 매핑 된 SQL 문을 직접 실행할 수 있습니다. 예를 들어:
sqlsessionFactory sqlsessionFactory = null; // xml 빌드 sqlsessionFactory factory incast stection = null; // sqlsessionFactory factory 인스턴스에서 sqlsession 객체를 가져옵니다. {string resource = "mybatis-config.xml"; sqlstream. sqlsessionfactoryBuilder () 빌드 (is); session = sqlsessionFactory.Opensession (); user user = session.selectone ( "com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid", 1), 1), 1); userername ();};};};};}; 이러한 방식으로 매핑을 실행하는 데 아무런 문제가 없으며, 더 간결한 방식으로 매핑을 수행 할 수도 있습니다.
주어진 문의 매개 변수와 리턴 값을 합리적으로 설명 할 수있는 인터페이스를 사용하십시오 (예 : UsermainMapper.class).
이제 더 명확하고 유형-안전 코드를 실행할 수있을뿐만 아니라 오류가 발생하기 쉬운 문자 리터럴 및 캐스트에 대해 걱정할 필요가 없습니다. 예를 들어:
sqlsession session = sqlsessionfactory.opensession (); usermainmapper usermainmapper = session.getmapper (usermainmapper.class); user user = usermainmapper .queryusermainbyid (1);
4. 예
독서를하지만 연습하지 않으면 혼란스러워하는 것은 쉽습니다. 예제를보고 문서를 읽으십시오. 아마도 효과가 더 나을 것입니다.
항아리 패키지 준비 :
mybatis-3.2.2.jar (mybatis)
MySQL-Connector-Java-5.1.21.jar (데이터베이스 드라이버)
junit-4.4.jar (테스트,이 주니트를 사용하고 싶지 않아, 주요 방법을 사용하여 테스트 할 수 있습니다).
프로젝트 구조 :
데이터 베이스:
테이블 생성`t_user_main` (`f_id` int (11) null, null,`f_username` varchar (20) 기본 null,`f_age` int (3) 기본 널, 1 차 키 (`f_id`)) 엔진 = myisam default charset = latin1; t_user_main 값 (1, testmybatis ', 25);
MyBatis 'XML 구성 ---mybatis-config.xml :
<!-? xml 버전 = "1.0"alcoding = "utf-8"?-> <configuration> <환경 = "개발"> <환경 ID = "Development"> <transactionManager type = "jdbc"> <dataSource type = "property name ="driver "value ="com.mysql.jdbc.driver "> value = "value ="jdbc : mysql : //192.168.200.200.12 : 3306/test_mybatis "> <property name ="username "value ="root "> <property name ="passpork "value ="root123 "> </property> </property> </dataSource> </transActionManager> </환경> <mappers> usermainmapper.xml 파일 usermainmapper.xml은 com.lanhuigu.mybatis.map 패키지에 위치하고 있으므로 리소스는 com/lanhuigu/mybatis/map/usermainmapper.xml-> <mapper resource = "com/lanhuigu/mybatis/map/usermainper.xml"> </mapper> </mapper>
user.java :
package com.lanhuigu.mybatis.entity; import java.io.serializable; 공개 클래스 사용자는 시리얼이즈 가능 {private static final long serialversionuid = -3412068097348759984L; 개인 정수 ID; 개인 문자열 사용자 이름; 개인 정수 시대; retory getger (rete id; id) {this.id = id;} public string getUserName () {return username;} public void setUserName (String username) {this.username = username;} public integer getage () {return age;} public void restage (theger age) {this.age = age}}}}}}}}usermainmapper.xml :
<!-? xml version = "1.0"encoding = "utf-8"?-> <!-이 맵퍼의 고유 한 네임 스페이스를 지정하십시오. 네임 스페이스의 값은 일반적으로 패키지 이름으로 설정됩니다 + SQL 맵 파일의 접미사 파일 이름을 제거합니다. 이렇게하면 네임 스페이스의 값이 고유 할 수 있습니다. 예를 들어, 네임 스페이스 = "com.lanhuigu.mybatis.map.usermainmapper"는 com.lanhuigu.mybatis.map (패키지 이름) + usermainmapper (usermainmapper.xml 파일이 제거 됨)-> <mapper namepace = "com.lanhuigu.mybatis.map.usermap.usermp.usermor strest Select Tag에서 Select Tag의 ID 속성을 QueryUsermainByid로 설정하려면 ID 속성 값이 고유해야하며 ParameterType 속성을 재사용하여 쿼리에 사용 된 매개 변수 유형을 표시 할 수 없습니다. resulttype 속성은 query resulttype = "com.lanhuigu.mybatis.entity.user"에 의해 반환 된 결과 세트 유형을 나타냅니다. "쿼리 컨트리를 사용자 클래스의 객체로 캡슐화하는 것을 의미합니다. 사용자 테이블에 해당하는 엔티티 클래스입니다.> <QueryUserMainBeyfe"int " resulttype = "com.lanhuigu.mybatis.entity.user"> select f_id id, f_username username, f_age age from t_user_main where f_id = #{id} </select> </mapper>mybatistest.java 테스트 코드 :
package com.lanhuigu.mybatis; import java.io.ioexception; import java.io.inputstream; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.ssession.sqlsessionfactory; import; org.apache.ibatis.session.sqlsessionfactorybuilder; import org.junit.test; import com.lanhuigu.mybatis.entity.user; public class mybatistest {@testpublic void testmybatis ()를 Ioexception {sqlsessionsory sqlsactory = null; SQLSESSIONFACTORY FACTORY 인스턴스 SQLSESSION SESSION = NULL; // SQLSESSION 객체를 가져옵니다. {//1.MyBatis 구성 파일 경로는 ClassPath에 배치 된 String Resource = "MyBatis-config.xml"; // 2와 같습니다. myBatis 구성 파일을 읽고 sqlsessionFactory factory incasts // ====== 2.1 클래스 로더를 사용하여 myBatis 구성 파일을로드합니다 (또한 관련 매핑 파일도로드) // inputStream은 = myBatistest.class.getCeasStream (getResourceStream (getResourceStream); // build the sqlsOntions. 공장 // SQLSESSIONFACTORY = 새로운 SQLSESSIONFACTORYBUILDER (). 빌드 (IS); // ====== 2.2 MYBATIS에서 제공 한 리소스 클래스를 사용하여 myBatis의 구성 파일을로드합니다 (또한 관련 매핑 파일도로드) // reader reader = resources.getResourceaseReader (ResourceCeasreader); // sqlsessionFactory factory // sqlsessionfactory = new sqlsessionfactoryBuilder () 빌딩 (reader); // ===== 2.3 MyBatis가 제공 한 리소스 클래스를 사용하여 myBatis의 구성 파일을로드하여 inputStream is = resources.ressourceasstream (// build the sqlsOcory sqlsOrcy). sqlsessionfactoryBuilder (). build (is); // 3. 매핑 파일에서 SQL을 실행할 수있는 sqlsessionsession을 만듭니다. usermainmapper.xml 파일의 태그. 선택 태그의 ID 속성 값을 통해 * 실행될 SQL은이 두 가지의 조합을 통해 찾을 수 있습니다. */// 쿼리를 실행하고 고유 한 사용자 객체를 반환합니다. 참고 : "com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid"는 SQL을 맵핑하는 식별 문자열입니다. user user = session.selectone ( "com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid", 1); system.out.println (user.getusername ());} 마지막으로 {session.close ();}}}콘솔 출력 :
위의 예에서는 테스트 코드에서 다음과 같습니다.
사용자 user = session.selectone ( "com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid", 1); system.out.println (user.getusername ());
이 코드는 사용하기가 매우 불쾌합니까? 우리는보다 직접적인 방법이 있다고 말했습니다.
프로젝트 구조 맵에 매핑 인터페이스 추가 :
패키지 com.lanhuigu.mybatis.map; import com.lanhuigu.mybatis.entity.user; public interface usermainmapper {public user queryusermainbyid (int id);}동시에 테스트 코드를 다음과 같이 수정하십시오.
package com.lanhuigu.mybatis; import java.io.ioexception; import java.io.inputstream; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.ssession.sqlsessionfactory; import; org.apache.ibatis.session.sqlsessionfactorybuilder; import org.junit.test; import com.lanhuigu.mybatis.entity.user; import com.lanhuigu.mybatis.map.usermainmapper; public class mybatistest {@testpublic voidbatis () Iogection (). {sqlsessionFactory sqlsessionFactory = null; // xml 빌드 sqlsessionFactory factory incast stection = null; // sqlsession 객체를 가져옵니다. try {//1.mybatis configuration 파일 경로를 가져옵니다. myBatis 구성 파일을 읽고 sqlsessionFactory factory incasts // ====== 2.1 클래스 로더를 사용하여 myBatis 구성 파일을로드합니다 (또한 관련 매핑 파일도로드) // inputStream은 = myBatistest.class.getCeasStream (getResourceStream (getResourceStream); // build the sqlsOntions. 공장 // SQLSESSIONFACTORY = 새로운 SQLSESSIONFACTORYBUILDER (). 빌드 (IS); // ====== 2.2 MYBATIS에서 제공 한 리소스 클래스를 사용하여 myBatis의 구성 파일을로드합니다 (또한 관련 매핑 파일도로드) // reader reader = resources.getResourceaseReader (ResourceCeasreader); // sqlsessionFactory factory // sqlsessionfactory = new sqlsessionfactoryBuilder () 빌딩 (reader); // ===== 2.3 MyBatis가 제공 한 리소스 클래스를 사용하여 myBatis의 구성 파일을로드하여 inputStream is = resources.ressourceasstream (// build the sqlsOcory sqlsOrcy). sqlsessionfactoryBuilder (). build (is); // 3. 매핑 파일에서 SQL을 실행할 수있는 sqlsessionsession을 만듭니다. usermainmapper.xml 파일의 태그. 선택 태그의 ID 속성 값을 통해 * 실행될 SQL은이 두 가지의 조합을 통해 찾을 수 있습니다. */// 쿼리를 실행하고 고유 한 사용자 객체를 반환합니다. 참고 : "com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid"는 sql/*user user = session.selectone ( "com.lanhuigu.mybatis.map.usermainmapper.queryusermainbatis", 1); system.out.println; usermainmapper = session.getmapper (usermainmapper.class); user user = usermainmapper.queryusermainbyid (1); system.out.println (user.getusername ());} 최종 {session.close ();}}} 이전 쿼리 부분을 다음과 같이 수정하십시오.
usermainmapper usermainmapper = session.getmapper (usermainmapper.class); user user = usermainmapper.queryusermainbyid (1);
주어진 문의 매개 변수와 리턴 값을 합리적으로 설명 할 수있는 인터페이스를 사용하십시오 (예 : UsermainMapper.class).
이제 더 명확하고 유형-안전 코드를 실행할 수있을뿐만 아니라 오류가 발생하기 쉬운 문자 리터럴 및 캐스트에 대해 걱정할 필요가 없습니다.
테스트 코드를 실행하면 효과가 동일합니다.
usermainmapper 인터페이스 위치 :
인터페이스를 추가 했으므로 mybatis-config.xml은 맵퍼 부품의 구성을 변경하고 UsermainMapper 인터페이스가있는 패키지 파일을 직접 매핑 할 수 있습니다.
그게
수정하십시오
전체 구성은 다음과 같습니다. 테스트 코드를 실행하여 확인할 수 있습니다. 이 관행은 통일 된 방식으로지도를 유지하고 관리하기가 더 쉽습니다.
<!-? xml 버전 = "1.0"alcoding = "utf-8"?-> <configuration> <환경 = "개발"> <환경 ID = "Development"> <transactionManager type = "jdbc"> <dataSource type = "property name ="driver "value ="com.mysql.jdbc.driver "> value = "value ="jdbc : mysql : //192.168.200.200.12 : 3306/test_mybatis "> <property name ="username "value ="root "> <property name ="passpork "value ="root123 "> </property> </property> </dataSource> </transActionManager> </환경> <mappers> usermainmapper.xml 파일 usermainmapper.xml은 com.lanhuigu.mybatis.map 패키지에 위치하고 있으므로 리소스는 com/lanhuigu/mybatis/map/usermainmapper.xml-> <!-<mapper resource = "com/lanhuigu/mybatis/map/usermainmapper.xml"> </mapper> </mapper>. 이름 = "com.lanhuigu.mybatis.map"> </package> </mappers> </configuration>
위와 같이, 우리는 우리가 어떻게 플레이하든 SQL이 여전히 usermainmapper.xml에 맵핑 되었습니까?
이 구현이 고유합니까? XML을 사용해야합니까?
물론. 위의 코드가 성공적으로 수정되고 테스트되면 마지막 수정을하겠습니다.
usermainmapper.xml을 사용하여 매핑을 구현하는 대신 Java 주석을 사용하여 매핑을 구현합니다.
기본 수정은 usermainmapper.java 인터페이스, 새 메소드 QueryUsermainByIdnew를 추가하고 주석을 사용하여 매핑을 구현합니다.
Mybatis 자체 분해 인터페이스 매핑.
수정 된 usermainmapper.java 인터페이스 :
package com.lanhuigu.mybatis.map; import org.apache.ibatis.annotations.annotations.annotations.annotations.annotations.select; import com.lanhuigu.mybatis.entity.user; public interface usermainmapper {/*** xml*/public userermainbyid (int id); 주석*/@select ( "f_id id, f_username username, f_age age from t_user_main where f_id = $ {id}") 공개 사용자 queryusermainbyidnew (@param ( "id") int id);} 수정 된 테스트 코드는 다음과 같은 방법으로 실행합니다.
package com.lanhuigu.mybatis; import java.io.ioexception; import java.io.inputstream; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.ssession.sqlsessionfactory; import; org.apache.ibatis.session.sqlsessionfactorybuilder; import org.junit.test; import com.lanhuigu.mybatis.entity.user; import com.lanhuigu.mybatis.map.usermainmapper; public class mybatistest {@testpublic voidbatis () Iogection (). {sqlsessionFactory sqlsessionFactory = null; // xml 빌드 sqlsessionFactory factory incast stection = null; // sqlsession 객체를 가져옵니다. try {//1.mybatis configuration 파일 경로를 가져옵니다. myBatis 구성 파일을 읽고 sqlsessionFactory factory incasts // ====== 2.1 클래스 로더를 사용하여 myBatis 구성 파일을로드합니다 (또한 관련 매핑 파일도로드) // inputStream은 = myBatistest.class.getCeasStream (getResourceStream (getResourceStream); // build the sqlsOntions. 공장 // SQLSESSIONFACTORY = 새로운 SQLSESSIONFACTORYBUILDER (). 빌드 (IS); // ====== 2.2 MYBATIS에서 제공 한 리소스 클래스를 사용하여 myBatis의 구성 파일을로드합니다 (또한 관련 매핑 파일도로드) // reader reader = resources.getResourceaseReader (ResourceCeasreader); // sqlsessionFactory factory // sqlsessionfactory = new sqlsessionfactoryBuilder () 빌딩 (reader); // ===== 2.3 MyBatis가 제공 한 리소스 클래스를 사용하여 myBatis의 구성 파일을로드하여 inputStream is = resources.ressourceasstream (// build the sqlsOcory sqlsOrcy). sqlsessionfactoryBuilder (). build (is); // 3. 매핑 파일에서 SQL을 실행할 수있는 sqlsessionsession을 만듭니다. usermainmapper.xml 파일의 태그. 선택 태그의 ID 속성 값을 통해 * 실행될 SQL은이 두 가지의 조합을 통해 찾을 수 있습니다. */// 쿼리를 실행하고 고유 한 사용자 객체를 반환합니다. 참고 : "com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid"는 sql/*user user = session.selectone ( "com.lanhuigu.mybatis.map.usermainmapper.queryusermainbatis", 1); System.out.println (user.getUserName ());*//*usermainmapper usermainmapper = session.getMapper (usermainmapper.class); user user = usermainmapper.queryusermainbyid (1); System.out.println (user.getusername ());*/usermainmapper usermpormapper = session.getMapper (usermainmapper.class); user user = usermainmapper.queryusermainbyidnew (1); system.out.println (user.getUername ());} 최종 {session.close ();}}}위의 것은 편집자가 소개 한 Mybatis 소개 (2)의 전체 모음입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!