Mybatis-Spring 프로젝트
현재 대부분의 Java 인터넷 프로젝트는 Spring MVC + Spring + Mybatis를 사용하여 구축되었습니다.
Spring IOC를 사용하면 다양한 Java 리소스를 효과적으로 관리하고 플러그 앤 플레이 기능을 달성 할 수 있습니다. Spring AOP 프레임 워크를 통해 데이터베이스 트랜잭션을 스프링 관리에 위탁하여 트랜잭션 코드의 많은 부분을 제거하고 MyBatis의 높은 유연성, 구성 가능하며 최적화 된 SQL 특성과 결합하여 고성능 대형 웹 사이트를 구축 할 수 있습니다.
Mybatis와 Spring의 두 가지 주요 프레임 워크가 Java 인터넷 기술의 주류 프레임 워크 조합이되었다는 것은 의심의 여지가 없습니다. 그들은 큰 데이터 볼륨과 대규모 요청의 테스트를 견뎌냈으며 인터넷 시스템에서 널리 사용되었습니다. mybatis-spring을 사용하면 비즈니스 계층과 모델 계층이 더 잘 분리됩니다. 동시에, 스프링 환경에서 mybatis를 사용하는 것은 더 간단하여 많은 코드를 저장하며, mybatis-spring이 우리를 위해 캡슐화하기 때문에 sqlsessionfactory 및 sqlsession과 같은 객체를 사용하지 않을 수도 있습니다.
발췌 : "Java EE 인터넷 경량 프레임 워크 통합 개발"
1 단계 : 테스트 프로젝트 생성
첫 번째 단계는 아이디어에서 [Mybatisandspring]이라는 새로운 WebProject 프로젝트를 만드는 것입니다.
그런 다음 [SRC]에서 4 개의 빈 패키지를 만듭니다.
그런 다음 다양한 리소스 구성 파일을 배치하기 위해 새 소스 폴더 [config]를 작성하십시오.
그런 다음 [Web] 폴더 아래에 새 [Web-Inf] 기본 보안 폴더를 작성하고 그 아래에 [클래스] 및 [lib]를 작성하고 [클래스]에서 프로젝트의 출력 위치를 변경하십시오.
프로젝트의 완전한 초기 구조는 다음과 같습니다.
2 단계 : 종속성 JAR 패키지 소개
두 번째 단계는 프로젝트의 종속성 JAR 패키지를 준비하는 것입니다.
위에 나열된 JAR 패키지를 [lib] 폴더에 [Web-Inf] 폴더 아래에 놓은 다음 종속성을 추가하십시오.
3 단계 : 스프링 구성 파일을 작성하십시오
세 번째 단계는 스프링 구성 파일을 작성하는 것입니다.
<? xml 버전 = "1.0"alcoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans"xmlns : xsi = "http://ww.w.w3.org/2001/xmlschema-instance" xmlns : context = "http://www.springframework.org/schema/context"xsi : schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/schema/sprideans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-구성 파일로드-> <context : property-placeholder 위치 ="Classperties "/>>>>>. id = "dataSource"> <property name = "driver className"value = "$ {jdbc.driver}"/> <property name = "url"value = "$ {jdbc.url}"/> <property name = "username"value = "$ {jdbc.username}"/> <valess = "valess" "$ {jdbc. </bean> <!-sqlsessionFactory-> <bean id = "sqlsessionFactory"> <!-로드 myBatis 구성 파일-> <property name = "configlocation"value = "myBatis/sqlmapconfig.xml"/> <!-> <propertion name = "dataSource"ref = "dataSource"/> bean>> </bean>.4 단계 : MyBatis 구성 파일 작성
4 단계 : [MyBatis] 패키지 SQLMAPCONFIG.XML에 MyBatis의 글로벌 구성 파일을 작성하십시오.
<? 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"> <! <! 스위치-> <설정 이름 = "lazyloadingEnabled"value = "true"/> <!-활성화로드를 수동적로드로 변경합니다 (즉, 주문형로드)-<설정 이름 = "AttressiveAzyloading"value = "false"/> <!-글로벌 캐시 스위치 (2 차 캐시) 기본값을 켜십시오. 정의-> <faiLiases> <package name = "cn.wmyskxz.pojo"/> </intealiases> <!-맵 파일을로드-> <mappers> <!-리소스 방법을 통해 한 번에 한 맵 파일을로드-> <mapper resource = "sqlmap/usermapper.xml"/>> <패키지-<패키지. 이름 = "CN.WMYSKXZ.MAPPER"/> </MAPPERS> </configuration>
이 구성 파일에서 :
5 단계 : Mapper 및 기타 구성 파일을 작성하십시오
5 단계 : 매퍼 매핑 파일을 작성하십시오. 여기서 Mapper 매핑 파일의 이름은 여전히 "usermapper.xml"(sqlmapconfig.xml의 구성과 일치)로 정의됩니다. 효과를 테스트하기 위해 하나의 쿼리 클래스 SQL 맵 만 구성됩니다.
<? 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 namepsace ="test "> ParameterType = "_ int"resulttype = "user"> select * where id = #{id} </select> </mapper>이 구성에서 출력 매개 변수는 "cn.wmyskxz.pojo"패키지의 엔터티 클래스가 별명을 사용하기 전에 sqlmapconfig.xml에서 구성 되었기 때문에 (즉, 이니셜이있는 클래스 이름) "Findistity Class"를 "FindUserByid"에 해당하기 전에 "사용자"에 매핑됩니다. "CN.WMYSKXZ.POJO"패키지 :
패키지 cn.wmyskxz.pojo; import java.io.serializable; public class user emplements serializable {private int id; 개인 문자열 사용자 이름; / * getter and setter */}직렬화 가능한 인터페이스를 구현하는 것은 Mapper Dynamic Proxy의 후속 사용을 준비하는 것이며 여기에는 동적 프록시가 없습니다.
데이터베이스 연결 정보는 데이터베이스 리소스 "db.properties"에 구성되며 "key = value"형식으로 구성됩니다. String은 "$ {}"를 사용하여 키에 해당하는 값을 얻습니다.
jdbc.driver = com.mysql.jdbc.driverjdbc.url = jdbc : mysql : // localhost : 3306/mybatis? aricationencoding = utf-8jdbc.username = rootjdbc.password = root
또한 로그 구성은 이전 구성과 동일하므로 직접 붙여 넣었습니다.
# 글로벌 로깅 구성# 개발 환경에서 로그 레벨을 디버그하도록 설정해야하며 생산 환경은 정보 또는 ErrorLog4J.RootLogger = Debug, STDOUT# 콘솔로 설정해야합니다. 출력 ... log4j.appender.stdout = org.apache.log4j.consoleappenderlog4j.appender.stdout.layout = org.apache.log4j.patternlayoutlog4j.appender.stdout.layout.conversionpattern =%5p [%t] -%m%n
6 단계 : DAO 레이어를 작성하십시오
6 단계 : 데이터 액세스 객체 계층을 작성하십시오.
이 프로젝트는 사용자 사용자 만 쿼리하므로 DAO 계층에는 클래스가 하나뿐입니다. DAO 레이어의 인터페이스 인터페이스는 FindUserById 메소드를 정의하는 "CN.WMYSKXZ"패키지에서 작성되며 매개 변수는 사용자의 ID 값 (int type)입니다.
패키지 cn.wmyskxz.dao; import cn.wmyskxz.pojo.user; public interface userdao {// query user information id public user findUserById (int id) 예외;}그런 다음 동일한 패키지에서 userdao 인터페이스 구현 클래스 userDaoimpl을 만듭니다.
패키지 cn.wmyskxz.dao; import cn.wmyskxz.pojo.user; import org.apache.ibatis.session.sqlsession; import org.mybatis.spring.support.sqlsessiondaoSupport; public userdaoimpl usupport usupport usupport instrements instrements usupport. findUserById (int id)는 예외를 던지고 {// sqlsessionDaoSupport 클래스를 상속하고 this.getSqlsession () sqlsession sqlsession sqlsession = this.getSqlSession ()을 전달합니다. 사용자 user = sqlsession.selectone ( "test.finduserByid", id); 리턴 사용자; }}몇 가지 설명이 있습니다.
<!-원래 DAO 인터페이스-> <bean id = "userDao"> <property name = "sqlsessionFactory"ref = "sqlsessionFactory"/> </bean>
참고 : DAO 구현 클래스가 SQLSESSIONDAOSUPPORT 상위 클래스를 상속받은 후 SQLSESSION 세션 인스턴스 클래스 자체를 얻기위한 메소드를 정의 할 필요가 없습니다. 부모 클래스는 기본적으로 데이터 소스 정보를로드하고 SQLSESSION 클래스를 얻는 방법을 제공합니다.
7 단계 : 서비스 테스트 클래스 작성
"cn.wmyskxz.test"패키지에서 [userservicetest] 테스트 클래스를 만듭니다.
패키지 CN.WMYSKXZ.TEST; import CN.WMYSKXZ.DAO.USERDAO; import CN.WMYSKXZ.POJO.USER; import org.junit.before; import org.junit.test; import org.springframework.context.applicationContxt; 가져 오기 org.springframework.context.support.classpathxmlapplicationContext; public class usererViceTest {private applicationContext ApplicationContext; // 스프링 구성 파일 객체를 먼저 가져 오기 메소드를 실행하기 전에 // annotation @before이 메서드를 호출하기 전에이 클래스의 모든 테스트 메소드를 실행하기 전에 @public void setup () 예외를 {ApplicationContext = new classPathXMlApplicationContext ( "classPath : Spring/ApplicationContext.xml"); } @test public void testfinduserByid ()는 예외를 던집니다 {// 리소스 개체를 구성하여 userDao userDao = (userDao) ApplicationContext.getBean ( "userDao"); // 사용자 user user = userDao.FinduserByid (1); // output user Information System.out.println (user.getId () + ":" + user.getUername ()); }}테스트 방법을 실행하면 출력 결과는 다음과 같습니다.
동적 프록시 + 주석 구현
위의 예제 프로그램은 Mapper Dynamic Proxy 및 주석을 사용하여 완료되지 않습니다. 동적 프록시 및 주석을 사용하는 방법을 시도해 봅시다.
1 단계 : userQueryMapper를 쓰십시오
[Mapper] 아래에 새 [userQueryMapper] 프록시 인터페이스를 만들고 주석을 사용하십시오.
패키지 cn.wmyskxz.mapper; import cn.wmyskxz.pojo.user; import org.apache.ibatis.annotations.select; public interface userQueryMapper {@select ( "선택 * id = #{id}") public user finduserbyid (int id) 예외;}참고 : 기본적으로 Bean의 이름은 UserQueryMapper입니다 (즉, 첫 글자는 소문자입니다).
이제 프록시 클래스가 있으므로 여기 에서이 클래스를 스캔하려면 Spring에 통지해야합니다. Mapper는 특수 스캐너를 사용하여 구성 객체를 스캔해야합니다.
<!-Mapper 스캐너-> <ean> <!-CN.wmyskxz.mapper 패키지의 구성 요소를 스캔합니다.> <속성 이름 = "BasePackage"value = "Cn.wmyskxz.mapper"/> </bean>
2 단계 : 테스트 클래스를 작성하십시오
이번에는 더 이상 userdao 객체를 가져 오지 않고 정의 된 Mapper 프록시 객체 userQueryMapper :
패키지 CN.WMYSKXZ.TEST; import CN.WMYSKXZ.MAPPER.USERQUERYMAPPER; import CN.WMYSKXZ.pojo.user; import org.junit.before; import org.junit.test; import org.springframework.context.applicationContext; 가져 오기 org.springframework.context.support.classpathxmlapplicationContext; public class usererViceTest {private applicationContext ApplicationContext; // 스프링 구성 파일 객체를 먼저 가져 오기 메소드를 실행하기 전에 // annotation @before이 메서드를 호출하기 전에이 클래스의 모든 테스트 메소드를 실행하기 전에 @public void setup () 예외를 {ApplicationContext = new classPathXMlApplicationContext ( "classPath : Spring/ApplicationContext.xml"); } @test public void testfinduserByid ()는 예외를 던집니다 {// 리소스 개체를 구성하여 userQueryMapper userQueryMapper = (userQueryMapper) ApplicationContext.getBean ( "userQueryMapper"); // userDao 메소드 user user = userQueryMapper.FindUserById (1); // output user Information System.out.println (user.getId () + ":" + user.getUername ()); }}테스트 방법을 실행하고 올바른 결과를 얻으십시오.
쿼리 결과는 이전 비 삭제 에이전트의 결과와 동일하다는 것을 알 수 있습니다.
요약
위의 것은 Mybatis와 Spring 사이의 완벽한 통합 방법입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!