1. 개발 환경을 구축하십시오
1.1. Maven과 함께 웹 프로젝트를 만듭니다
다음 명령을 실행하십시오.
코드를 다음과 같이 복사하십시오 : MVN 아키타 입은 : create -dgroupid = me.gacl -dartifactid = spring4 -mybatis3 -darchetypeartifactid = maven -archetype -webapp -dinteractivemode = false
아래 그림과 같이 :
생성 된 프로젝트는 다음과 같습니다.
pom.xml 파일 편집
<project xmlns = "http://maven.apache.org/pom/ .."xmlns : xsi = "http://www.w.org//xmlschema-instance"xsi : schemalocation = "http://maven.apache.org/pom/ .. http://maven.apache.org/maven-v__.xsd "> <modelversion> .. </modelversion> <groupid> me.gacl </gourid> <artifactid> spring-mybatis </artifactid> <parkaging> war </packaging> <bersion> <name> <name> spring-mybatis m-mybatis m-maven webapt <Url> http://maven.apache.org </url> <pectioniles> <pectionement> <groupid> junit> <artifactid> junit </artifactid> <버전> .. </버전> <scope> test </scope> </dependency> </sectience> build> spring-mybatis> spring-mybatis
<name> Spring4-Mybatis3 Maven WebApp </name> 섹션을 수정하고 "Maven WebApp"에 공간이 포함 된 컨텐츠를 제거하십시오. 그렇지 않으면 Maven이 프로젝트를 컴파일하면 공간으로 인해 일부 설명 할 수없는 오류가 발생하여 다음 을 수정합니다.
또한 다음을 삭제하십시오.
<pectionency> <groupId> junit </groupId> <artifactID> junit </artifactid> <버전> .. </version> <cope> test </scope> </fectionency>
이 부분은 Junit의 JAR 패키지 의존성 정보입니다. 이 버전은 너무 낮습니다. 우리는이 Junit 테스트 버전을 사용하지 않습니다. 수정 된 pom.xml 컨텐츠는 다음과 같습니다.
<project xmlns = "http://maven.apache.org/pom/ .."xmlns : xsi = "http://www.w.org//xmlschema-instance"xsi : schemalocation = "http://maven.apache.org/pom/ .. http://maven.apache.org/maven-v__.xsd "> <modelversion> .. </modelversion> <groupid> me.gacl </gourid> <artifactid> spring-mybatis </artifactid> <parg> war </packaging> <bersion> <name> spring-mybatis </name> <Url> http://maven.apache.org </url> <pectinements> </fectencies> <build> <finalname> spring-mybatis </finalname> </build> </project>
1.2. 생성 된 프로젝트를 MyClipse로 가져옵니다
특정 작동 단계는 다음 그림에 나와 있습니다.
아래 그림과 같이 [src/main/java], [src/test/resources] 및 [src/test/java]의 세 가지 소스 폴더를 수동으로 만듭니다.
이 시점에서 모든 프로젝트 건설 작업이 완료되었습니다.
2. 데이터베이스 및 테이블 작성 (MySQL 용)
SQL 스크립트는 다음과 같습니다.
데이터베이스 만들기 Spring4_myBatis3; spring4_mybatis3; drop 테이블 t_user가 존재하는 경우 드롭 테이블; 테이블 t_user (32) null, user_name varchar (30) default null, user_birthday date default null, user_salary double default null, 1 차 키 (user_id));
생성 된 데이터베이스 및 테이블은 다음과 같습니다.
3. 생성기 도구를 사용하여 코드를 생성하십시오
생성 된 데이터베이스 테이블을 기반으로 MyBatis 테이블에 해당하는 엔티티 클래스, SQL 매핑 파일 및 DAO를 생성 할 수있는 생성기 도구를 찾았으며 생성기 도구의 루트 디렉토리에서 Generator.xml 파일을 찾습니다. 이 파일은 아래 그림과 같이 코드 생성 규칙을 구성하는 데 사용됩니다.
generator.xml 파일 편집, 내용은 다음과 같습니다.
<? xml 버전 = "." 인코딩 = "utf-"?> <! doctype generatorconfiguration public "-// mybatis.org//dtd mybatis generator configuration .//en" "http://mybatis.org/dtd/mybatis-generator-config__.dtd "> <centeratorconfiguration> <! <! 위치 = "e :/repository/mysql/mysql-connector-java /../ mysql-connector-java -... <commentGenerator> <property name = "suppressAllComments"value = "true"/> </commentGenerator> <!-데이터베이스 링크 URL, 사용자 이름, 암호-> <jdbcConnection driver class = "com.mysql.jdbc.driver"connectionUrl = "jdbc : // localhost :/spring_mybatis" "userid" password = "xdp"> <!-<jdbcconnection driver class = "oracle.jdbc.driver.oracledriver"connectionUrl = "jdbc : oracle : thin : @localhost :: orcl"userId = "msa"password = "msa">-> </jdbcconnection> <javatypperesolver> value = "false" /> < /javatyperesolver> <!- 엔티티 클래스의 패키지 이름과 위치를 생성합니다. 여기서 생성 된 엔티티 클래스는 패키지 아래에 배치됩니다. me.gacl.domain-> <javamodelgenerator targetpackage = "me.gacl.domain"targetproject = "c :/user/gacl/spring-mybatis/src/main/java"> <property name = "value"/> <true value "/> </javamodelgenerator> <!- 생성 된 SQL 맵 파일 패키지 이름 및 위치. 여기에서 생성 된 SQL 맵 파일을 패키지 me.gacl.mapping-> <sqlmapgenerator targetpackage = "me.gacl.mapping"targetproject = "c :/users/gacl/spring-mybatis/src/main/java"> <propertion name = "enverbeberate ="true "! Dao의 이름과 위치. 여기에서 생성 된 DAO 클래스를 패키지 me.gacl.dao-> <javaclientgenerator type = "xmlmapper"targetpackage = "me.gacl.dao"targetProject = "c :/users/gacl/spring-mybatis/src/main/java"<속성 이름 = "enablesubpackages" "true"/>. < /javaclientGenerator> <!-해당 테이블을 생성하려면 (Tablename 및 DomainObjectName을 변경하려면)-> <TABLE TABLENAME = "T_USER"DOMAINOBJECTNAME = "USER"ENABLECOUNTBYEXALLE = "FALSE"enableUpDateByExample = "False"enabledeteByexample = "false"enableSteLectByExamplic = "false" "enableStelectByexamplice ="false ""false " </context> </GeneratorConfiguration>
명령 줄 창을 열고 생성기 도구의 루트 디렉토리로 전환 한 다음 다음 명령을 실행하십시오.
Java -jar mybatis -generator -core -1.3.2.jar -configfile generator.xml -werwrite
아래 그림과 같이 :
바로 지금 Generator.xml 파일에 생성 된 코드 및 SQL 매핑 파일을 구성하여 생성 된 코드 및 SQL 매핑 파일을 디렉토리 "C :/Users/GACL/Spring4-Mybatis3/Src/Main/Java"에 포함 시켰습니다. 이 디렉토리는 Spring4-Mybatis3 프로젝트가있는 디렉토리입니다. SRC/Main/Java 디렉토리를 새로 고치고 아래 그림과 같이 생성 된 코드 및 매핑 파일을 볼 수 있습니다.
생성 된 코드 및 매핑 파일을 한 줄로 변경할 필요는 없으며 프로젝트에 직접 적용 할 수 있습니다. 발전기 도구에서 생성 된 코드 및 매핑 파일을 살펴 보겠습니다.
1. 생성 된 DAO 클래스
Me.gacl.dao를 포장합니다. import me.gacl.domain.user; public interface usermapper {int deletebyprimarykey (String userId); int insert (사용자 레코드); int insertselection (사용자 레코드); 사용자 selectByPrimaryKey (String userId); Int UpdateByPrimaryKey (사용자 레코드); }생성 된 usermapper는 t_user 테이블의 추가, 삭제, 수정 및 검색을위한 몇 가지 방법을 정의하는 인터페이스입니다.
2. 생성 된 엔티티 클래스
저를 포장합니다 .gacl.domain; import java.util.date; 공개 클래스 사용자 {private String userId; 개인 문자열 사용자 이름; 개인 날짜 userbirthday; 개인 이중 사용자 사유; public String getUserId () {return userId; } public void setUserId (String userId) {this.userid = userId == null? null : userId.trim (); } public String getUserName () {return username; } public void setusername (String username) {this.username = username == null? null : username.trim (); } 공개 날짜 getUserBirthday () {return userBirthday; } public void setUserbirthday (날짜 userBirthday) {this.userbirthday = userbirthday; } public double getUsersAlary () {return usersalary; } public void setUsersalary (Double Usersalary) {this.usersalary = usersalary; }}사용자 클래스는 T_USER 테이블의 해당 엔티티 클래스입니다. 사용자 클래스에 정의 된 속성은 t_user 테이블의 필드를 하나씩 하나씩 해당합니다.
3. 생성 된 SQL 매핑 파일
<? xml 버전 = "." 인코딩 = "utf-"?> <! doctype mapper public "-// mybatis.org//dtd mapper .//en" "http://mybatis.org/dtd/mybatis-mapper.dtd"> <mapper 네임 스페이스 = "me.gacl.dao.usermapper"> <resultmap id = "BasereTultMap". type = "me.gacl.domain.user"> <id column = "user_id"property = "userId"jdbctype = "char" /> <result column = "user_name"property = "username"jdbctype = "varchar" /> <result column = "user_birthday"property = "userbirthday"jdbctype = " />>. column = "user_salary"property = "useralary"jdbctype = "double"/> </resultmap> <sql id = "base_column_list"> user_id, user_name, user_birthday, user_salary </sql> <select id = "selectByprimaryke"resultmap = "baseresultmap" parametertype = "java.lang.string"> select <select <repid = "base_column_list" /> user_user에서 user_id = #{useriid, jdbctype = char} < /select> <delete id = deletebyprimkey "parametertype ="java.lang.string "> delete where where where where where where where where where where where where where where where where where where #{userId, jdbctype = char} </delete> <insert id = "insert"parametertype = "me.gacl.domain.user"> t_user (user_id, user_name, user_birthday, user_salary) 값 ( #{userid, jdbctype = char}, #{username, jdbctype = varchar}, #{userbirthday, jdbctype = date}, #{useralary, jdbctype = double}) </insert> <insert id = "insertective"parametertype = "me.gacl.user"(trime) < "" wiffix = ")"wiffixoverrides = ","> <if test = "userId! = null"> user_id, </if> <test = "username! = null"> user_name, </if> <if test = "userBirthDay! = null"> user_birthday, </if> <suls =/if> </if> </if>, <sull "> prefix = "value ("wiffix = ")"subsixoverrides = ","> <if test = "userId! = null"> #{userId, jdbctype = char}, </if> <if test = "username! = null"> #{username, jdbctype = varchar}, </if> <userbythday! #{userBirthday, jdbctype = date}, </if> <if test = "useralary! = null"> #{useralary, jdbctype = double}, </if> </trim> </insert> <업데이트 = "updateByPrimaryKeyselective"ParameterType = "me.gacl.user"if "upprimaryKeySelectective"parametertype = "me.gacl. test = "username! = null"> user_name = #{username, jdbctype = varchar}, </if> <test = "userbirthday! = null"> user_birthday = #{userbirthday, jdbctype = date}, </if> < "if user _"> user _sal "> null". #{useralary, jdbctype = double}, </if> </set> where user_id = #{userId, jdbctype = char} </update> <update id = "updateByPrimaryKey"ParameterType = "me.gacl.domain.user"> update t_user set user_name = #username, jdbcte, jdbcteer} user_birthday = #{userbirthday, jdbctype = date}, user_salary = #{useralary, jdbctype = double} 여기서 user_id = #{userid, jdbctype = char} </update> </mapper>usermapper.xml 파일의 내용은 t_user 테이블을 작동하는 SQL 문을 작성하는 것입니다. usermapper.xml 구성에서주의를 기울여야하는 몇 가지 작은 세부 사항에 중점을 두겠습니다.
1. usermapper.xml의 <mapper> 태그의 네임 스페이스는 ousermapper 인터페이스의 전체 클래스 이름, 즉 <mapper 네임 스페이스 = "me.gacl.dao.usermapper">이어야합니다.
2. usermapper.xml 정의 작업 데이터베이스의 ID 속성 값은 아래 그림과 같이 ousermapper 인터페이스에 의해 정의 된 메소드 이름과 일치해야합니다.
위의 두 가지 요구 사항의 이유는 MyBatis가 ousermapper 인터페이스 및 usermpaper.xml 파일을 기반으로 ousermapper 인터페이스에 정의 된 관련 메소드를 자동으로 구현하여 더 이상 Usermpper 인터페이스에 대한 특정 구현 코드를 작성할 필요가 없기 때문입니다.
4. 스프링과 미바 티스의 통합
먼저 프로젝트에 필요한 관련 JAR 패키지를 추가해야합니다. 우리는 Maven의 중앙 저장소 (http://search.maven.org/)로 이동하여 다음 그림과 같이 원하는 관련 항아리 패키지를 찾을 수 있습니다.
검색 상자에서 찾고있는 JAR 패키지의 이름을 입력하고 [검색] 버튼을 클릭하여 원하는 JAR 패키지를 찾아야합니다.
4.1. Spring 및 Mybatis 관련 JAR 패키지를 추가하십시오
1. 스프링 코어 추가 아래 그림과 같이 스프링 코어 키워드를 입력하십시오.
다음 그림과 같이 스프링 코어에 대한 종속성 설명 정보를 찾으십시오.
할 것이다
<pectionency> <groupid> org.springframework </groupid> <artifactid> 스프링 코어 </artifactid> <버전> 4.1.4. release </version> </fectionency>
다음과 같이 프로젝트의 pom.xml 파일에 복사하십시오.
<project xmlns = "http://maven.apache.org/pom/4.0.0"xmlns : xsi = "http://www.w3.org/2001/xmlschema-instance"xsi : schemalocation = "http://maven.apache.org/pom/0.0.0.0 http://maven.apache.org/maven-v4_0_0.xsd "> <modelversion> 4.0.0 </modelversion> <groupid> me.gacl </groupid> <artifactid> spring4-mybatis3 </artifactid> <paraging> war </packing> <버전> 1.0-snapshot <Name> Spring4-mybatis3 </name> <url> http://maven.apache.org </url> <pectionies> <!-Spring4.1.4 핵심 패키지 추가-> <prectionency> <groupid> org.springframework </groupid> <artifactid> spring-core </artifactid> <버전> 4.1.4.release. </dependencies> <빌드> <FinalName> Spring4-Mybatis3 </finalName> </build> </project>
이러한 방식으로 Maven은 Maven의 중앙 저장소에서 로컬 리포지토리로 스프링 코어 JAR 패키지를 자동으로 다운로드 한 다음 다음과 같이 스프링 코어 JAR 패키지 및 관련 종속성을 프로젝트에 추가하는 데 도움이됩니다.
Spring4.x 및 MyBatis3.x에 필요한 관련 JAR 패키지는 위의 방법으로 검색 한 다음 프로젝트에 추가 할 수 있습니다. Spring4.x 및 MyBatis3.x와 관련된 관련 JAR 패키지를 추가 한 후 POM.XML 파일의 내용은 다음과 같습니다.
<project xmlns = "http://maven.apache.org/pom/ .."xmlns : xsi = "http://www.w.org//xmlschema-instance"xsi : schemalocation = "http://maven.apache.org/pom/ .. http://maven.apache.org/maven-v__.xsd "> <modelversion> .. </modelversion> <groupid> me.gacl </gourid> <artifactid> spring-mybatis </artifactid> <parg> war </packaging> <bersion> <name> spring-mybatis </name> <Url> http://maven.apache.org </url> <pectionmenties> <!-스프링 코어 패키지 추가-> <prectionency> <groupid> org.springframework </groupid> <artifactid> spring-core </artifactid> </version> </fectionency> <expence package-> spring-context> <groupid> org.springframework </groupid> <artifactid> spring-context </artifactid> <bersion> ... 릴리스 </version> </version> </version> </version> </version> </version add add spring-tx package-> <pectionency> <groupId> org.sprameframewor </groupid> </inpection> </artifactid> ... release> ... Spring-JDBC 패키지-> <pectionency> <groupId> org.springframework </groupid> <artifactid> spring-jdbc </artifactid> <버전> ... release </version> </dependency> <!-Spring-JDBC 패키지 추가-> <pelopency> <groupId> org.spramework </groupIcid> <artifactid> <버전> ... 릴리스 </version> </fectionency> <!-단위 테스트를 용이하게하려면 스프링 테스트 패키지를 추가합니다-> <pectionement> <groupId> org.springframework </groupid> <artifactid> spring-test </artifactid> <bersion> ... release </version> </dependency> <!-Spring-web 패키지 추가-> <grugframe> org. <Artifactid> Spring-Web </artifactid> <bersion> ... 릴리스 </version> </fectionency> <!-SALSPEAVEVER 패키지 추가-> <groupID> org.aspectJ </groupId> <artifactID> Speciver </artifactID> <버전> .. </deptomency> <!-mybatis core 패키지 추가-> <groupid> org.mybatis </groupid> <artifactid> mybatis </artifactid> <bersion> .. </version> </version and </dependency> <!-스프링과 통합 된 mybatis core 패키지 추가-> <pecientency> <groupid> org.mybatis </groupid> <artifactid> </verse-spring> <!-Servlet.core 패키지 추가-> <pectionency> <groupid> javax.servlet </groupid> <artifactid> javax.servlet-api </artifactid> <bersion> .. </version> </dependency> <pelepondency> <groupid> javax.servlet.jsp </groupid> <버전> ..- B </version> </dependency> <!-jstl-> <pectionency> <groupid> javax.servlet </groupid> <artifactid> jstl </artifactid> <버전>. <artifactid> mysql-connector-java </artifactid> <bersion> .. </version> </dependency> <!-드루이드 연결 풀 패키지 추가-> <pectionency> <groupid> com.alibaba </groupid> <artifactid> druid </artifactid> <버전> </dependency> <! <! <groupid> junit </groupid> <artifactid> junit </artifactid> <bersion>.
4.2. 관련 구성 파일을 작성하십시오
1. DBCONFIG.POPERTIES
src/main/resources 디렉토리에서 dbconfig.properties 파일을 작성하여 MySQL 데이터베이스에 연결하는 것에 대한 관련 정보를 작성하십시오. dbconfig.properties의 내용은 다음과 같습니다.
DriverClassName = com.mysql.jdbc.driverValidationQuery = select 1jdbc_url = jdbc : mysql : // localhost : 3306/spring4_mybatis3? useUnicode = true & characterencoding = utf-8 & zerodatetimebehavior = convertonulljdbc_username
2. spring.xml (스프링 프레임 워크의 구성 파일)
src/main/resources 디렉토리에서 spring.xml 파일을 만듭니다. Spring.xml 파일은 Spring Framework 용으로 작성된 핵심 구성 파일입니다. Spring.xml의 내용은 다음과 같습니다.
<? 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/beanshttp://www.springframework.org/sche Ma/Beans/Spring-Beans-3.0.xsdhttp : //www.springframework.org/schema/context/spring-context-3.0.xsd "> <!-dbconfig.properties 속성 파일을 소개합니다.> <context : property-placeholder location = "classpath : dbconfig.properties" /> <!-dbconfig.properties 속성 파일을 소개합니다. placeholder location = "classpath : dbconfig.properties" /> <! 패키지 및 클래스의 @Service 주석으로 주석이 붙은 모든 클래스-> <context : component-scan base-package = "me.gacl.service" /> < /beans>
Spring.xml 파일의 구성은 매우 간단하며 두 가지 구성 만 있습니다.
3. Spring-Mybatis.xml (spring 및 mybatis와 통합 된 구성 파일)
src/main/resources 디렉토리에서 spring-mybatis.xml 파일을 만듭니다. Spring-Mybatis.xml 파일은 Spring Framework 및 MyBatis 프레임 워크의 통합을 위해 작성된 구성 파일입니다. spring-mybatis.xml의 내용은 다음과 같습니다.
<? 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 : tx = "http://www.springframework.org/schema/tx"xmlns : aop = "http://www.springframework.org/schema/aop"xsi : schemalocation = "http://www.springframwork.org/schema/schema/springwork.org/schema/schemas http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/sprring-3 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop http://www.springframework.org/schema/spring-aop-3.0.xsd "> <!- id = "dataSource"> <property name = "jndiname"value = "$ {jndiname}"> </property> </bean>-> <!- ============================================================== ============================================================== ============================================================== ================================================================= ============================================================== ================================================================= ============================================================== ================================================================= 이름 = "username"value = "$ {jdbc_username}" /> <property name = "product name ="password "value ="$ {jdbc_password} " /> <!-연결 크기 초기화-> <property name ="value = "0" /> <! free-> <property name = "maxidle"value = "20" /> <!-최소 연결 숫자 무료-> <속성 이름 = "minidle"value = "0" /> <!-연결에 대한 최대 대기 시간을 얻습니다-> <속성 이름 = "maxwait"value = "60000" /> <!-<propertreparedStatements "value ="true " /> <Propertments. 이름 = "maxpoolpreparedStatementperConnectionsize"value = "33" /> -> <속성 이름 = "validationQuery"value = "$ {validationQuery}" /> <속성 "value ="false " /> <property name ="rectonborrow "value ="false "= <speration name ="testonreturn ""testonrethile ""testonrethile ""testonreturn ""testonrethil " value = "true" /> <!-밀리 초로 닫아야하는 유휴 연결을 감지하는 데 감지 간격을 수행하는 데 걸리는 시간-> <property name = "timebetweenevictionRunsmillis"value = "60000" /> <!-밀리 초기에서 생존하기 위해 최소한의 시간을 구성합니다. value = "25200000" /> <!-제거 기능-> <속성 이름 = "removeaBandoned"value = "true" /> <!-1800 초, 즉 30 분-> <속성 이름 = "removeAbandonEdTimeout"value = "1800" /> <!-포기 연결을 닫을 때 출력 오류 로그-> guctureded "" "" "" "" "" "" "" ""valueded "" " 모니터링 데이터베이스-> <!-<속성 이름 = "필터"value = "stat" />-> <속성 이름 = "필터"value = "mergestat" /> < /bean> <!- =============================================================================================================== ===================================================================================================================================== ===================================================================================================================================== ===================================================================================================================================== ======================================================================== =========================================================================== =========================================================================== =========================================================================== =========================================================================== =========================================================================== =========================================================================== =========================================================================== manual configuration value = "classpath : me/gacl/mapping/*. xml"configuration.xml의 usermapper.xml에서 classpath (classpath) 아래에있는 모든 xml 파일을 Me.gacl.mapping 패키지 아래에 위치하므로 usermapper.xml은 자동 스캔 할 수 있습니다. value = "classpath : me/gacl/mapping/*. xml"/> </bean> <!-구성 스캐너-> <ean> <!-하위 패키지에서 me.gacl.dao 패키지 및 모든 매핑 인터페이스 클래스-> <속성 이름 = "basepackage"value = "me.gacl.dao"= sqlseticessionents inclessionent ""sql actorysentions "value ="vasepackage "value ="vasepackage " value = "sqlsessionfactory" /> < /bean> <!- ============================================================== ============================================================== ============================================================== ============================================================== ============================================================== ============================================================== ============================================================== ================================================================= Transaction-Manager = "TransactionManager" />-> <!-인터셉터 구성-> <TX : 조언 ID = "TransActionAdVice"Transaction-Manager = "TransactionManager"> <TX : attributes> <TX : 메소드 이름 = "Add*"Propagation = "required" /> <tx : "method name ="propagation = "trod" />>>>>> "vprogation ="requed " /<tx :"adde ""<tx : method name*" 전파 = "필수" /> <tx : 메소드 이름 = "저장*"propagation = "필수" /> <tx : 메소드 이름 = "update*"propagation = "필수" /> <tx : 메소드 이름 = "modify*"propagation = "필수" /> <tx : method = "vistagation ="requagation = "required" /> <tx : method*"revelete*"provagate*. 이름 = "remove*"propagation = "필수" /> <tx : 메소드 이름 = "복구"propagation = "필수" /> <tx : 메소드 이름 = "delandrepair"propagation = "requed" /<tx : "delandRepair"propagation = "resire" /> <tx : "method name ="get*"finds*" 전파 = "지원" /> <tx : 메소드 이름 = "load*"propagation = "supports" /> <tx : 메소드 이름 = "검색*"propagation = "supports" /> <tx : "dataGrid*"propagation = "supports" /> <tx : method name = "*"propagation = "supports"*"*" "*" "" "" "" "" "" "*" </tx : attributes> </tx : 조언> <aop : config> <aop : pointcut id = "transactionpointcut"expression = "execution (*me.gacl.service ..*empr.*())"/> <aop : Advisor PointCut-Ref = "TransactionPointCut"Advicent-Ref = "transactionAdvice 드루이드 모니터링 스프링 jdbc-> <bean id = "druid-stat-interceptor"> </bean> <bean id = "druid-stat-pointcut"scope = "prototype"> <property name = "property"> <string> <value> me.gacl.service. 조언 -ref = "druid-stat-interceptor"pointcut-Ref = "druid-stat-pointcut"/> </aop : config> </beans>이 시점에서 아래 그림과 같이 관련 구성 파일이 작성되었습니다.
4.3. 단위 테스트를 수행하십시오
위의 두 단계 이후, Spring 4 및 MyBatis3의 통합이 완료되었습니다. 다음으로해야 할 일은 Spring4 및 MyBatis3의 통합이 성공적인지 테스트하기 위해 단위 테스트를 수행하는 것입니다.
1. SRC/Main/Java 디렉토리에서 me.gacl.service 패키지를 만듭니다. 그런 다음 me.gacl.service 패키지에서 userservicei 인터페이스를 만듭니다.
Me.gacl.Service를 포장합니다. import me.gacl.domain.user; public interface uservicei { / *** 추가* @param user* / void adduser (사용자); / ** * 사용자 ID * @param userId * @return */ user getUserById (String userId); }2. src/main/java 디렉토리에서 me.gacl.service.impl 패키지를 만듭니다. 그런 다음 me.gacl.service.impl 패키지에서 Userservicei 인터페이스에 대한 구현 클래스를 만듭니다.
me.gacl.service.impl을 패키지; org.springframework.beans.factory.annotation.autowired; org.springframework.stereotyp.service; import me.gacl.dao.usermapper; import me.gacl.domain.user; import me.gacl.service.userservicei; / ** * @author gaCl * @Service 주석을 사용하여 userviceimpl 클래스에 서비스로 userviceimpl 클래스에 주석을 달아서 서비스 ID는 userErvice */ @service ( "userservice") public class userserviceimpl userservicei를 구현합니다. usermapper usermapper; // dao @override public void adduser (사용자) {usermapper.insert (user); } @override public user getUserById (String userId) {return usermapper.selectByPrimaryKey (userId); }}생성 된 두 클래스는 다음과 같습니다.
3. SRC/Test/Java 디렉토리에서 단위 테스트 클래스를 작성하고 새 Me.gacl.test 패키지를 작성한 다음이 패키지에서 mybatistest 클래스를 만듭니다. 코드는 다음과 같습니다.
Me.gacl.test; import java.util.date; java.util.uuid import; import me.gacl.domain.user; import me.gacl.service.userservicei; // import me.gacl.service.userservicei; 가져 오기 org.junit.fore; import org.junit.test; import org.springframework.context.applicationcontext; import org.springframework.context.support.classPathXmlApplicationContext; 공개 클래스 mybatistest {private userservicei userservice; /***이 방법은 모든 테스트 방법 전에 실행되며 한 번에만 실행됩니다.* Junit 장치 테스트 중 모든 초기화 작업 이이 메소드에서 수행 될 수 있습니다. 예를 들어, 이전 메소드에서 ApplicationContext 및 Userservice 초기화 이전 메소드*/@Before public void 이전 () {// 두 구성 파일 "Spring.xml"및 "Spring-mybatis.xml"New act Contl "New act Contectonte act. classPathXmlApplicationContext (new String [] { "spring.xml", "spring-mybatis.xml"}); // 스프링 컨테이너의 Bean의 ID를 기준으로 사용하려는 userErvice 객체를 가져옵니다 } @Test public void testAdDuser () {// ApplicationContext ac = new ClassPathXmlApplicationContext (new String [] { "spring.xml", "spring-mybatis.xml"}); // userErvicei userErvice = (userServicei) ac.getBean ( "userservice"); 사용자 user = 새 사용자 (); user.setuserid (uuid.randomuuid (). tostring (). replaceall ( "-", ""); user.setusername ( "White Tiger God Emperor XDP"); user.setuserbirthday (new date ()); user.setUsersAlary (d); userervice.adduser (사용자); }}단위 테스트 코드를 실행할 때 다음 오류 가보고됩니다.
오류 메시지는 Maven을 사용하여 프로젝트에서 클래스를 컴파일하지 않았기 때문에 "me.gacl.test.mybatistest"클래스는 찾을 수 없다는 것입니다.
다음으로 Maven을 사용하여 프로젝트를 컴파일하고 프로젝트의 pom.xml 파일 → 【디버그를】 → 【maven install】으로 선택합니다.
컴파일 결과는 다음과 같습니다.
여기서는 Maven Install을 실행 한 후 발생한 문제에 대해 이야기하겠습니다. Maven Install 명령을 처음 실행했을 때 다음과 같은 지저분한 오류를 보았습니다.
나중에 프로젝트를 삭제하고 프로젝트를 다시 인상한 다음 다음 그림과 같이 Clean Project Operation을 실행했습니다.
Maven 설치 작업을 실행 한 후 정상적으로 컴파일하고 전달할 수있어 오랫동안 우울하게 만들었습니다. 이것이 내 프로젝트 구성의 이유가 아니라 Maven의 이유가되어야합니다. 이것이 왜 그런지 모르겠습니다. 어쨌든, 이것은 해결책입니다. Maven 설치 작업을 정상적으로 컴파일 할 수없는 상황에 직면 한 경우 : Maven Clean → Clean Project → Maven 설치를 사용하여 문제를 해결하십시오.
정기적 인 Junit과의 단위 테스트 외에도 Spring에서 제공하는 Junit 테스트 프레임 워크를 사용하여 단위 테스트를 위해 Me.gacl.test에서 다음과 같이 새로운 mybatistestestByspringTestFramework 클래스를 만들 수 있습니다.
Me.gacl.test; import java.util.date; java.util.uuid import; import me.gacl.domain.user; import me.gacl.service.userservicei; import org.junit.test; import org.junit.runner.runwith; org.springframework.beans.factory.annotation.autowired; org.springframework.test.context.contextConfiguration import; import org.springframework.test.context.junit.springjunitclassrunner; @RunWith (SpringJunitClassRunner.class) // @ConctextConfiguration 주석이 구성되고 주석의 위치 속성이 스프링 및 구성 파일로 지정된 후 @ContextConfiguration (위치 = { "classPath : spring.xml", "classPath : public class : xclass"}). mybatistestByspringTestFramework {// userOrvice를 주입합니다 @autowired private userervicei userservice; @Test public void testAdDuser () {user user = new user (); user.setuserid (uuid.randomuuid (). tostring (). replaceall ( "-", ""); user.setusername ( "xdp_gacl_white tiger god emperor"); user.setuserbirthday (new date ()); user.setUsersAlary (d); userervice.adduser (사용자); } @test public void testgetUserById () {String userId = "fbcebfdada"; user user = userervice.getUserById (userId); System.out.println (user.getusername ()); }}이 두 가지 테스트 방법을 수행하고 다음과 같이 정상 테스트를 통과하십시오.
이 시점에서 프레임 워크의 모든 통합 테스트가 통과하더라도 통합이 성공했습니다.
4.4. 웹 서버에서 테스트
1. Web.xml 파일을 편집하고 스프링 리스너 구성 항목을 추가하면 내용은 다음과 같습니다.
<? xml version = "1.0"encoding = "utf-8"?> <web-app xmlns = "http://java.sun.com/xml/ns/javaee"xmlns : xsi = "http://ww.w.w3.org/2001/xmlschema-instance" xsi : schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version = "3.0"> <welcome-file-list> index.jsp </welcome-file> <description>Spring listener</description> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- ContextLoaderListener to use contextConfigLocation parameters that need to be used when initializing Spring context--> <context-param> <param-name>contextConfigLocation</param-name> <!-- Configure the location of spring.xml and spring-mybatis.xml, fixed writing method--> <param-value>classpath:spring.xml,classpath:spring-mybatis.xml</param-value> </context-param></web-app>
2、在UserMapper接口中添加一个获取所有用户信息的getAllUser()方法,如下所示:
package me.gacl.dao; Java.util.list 가져 오기; import me.gacl.domain.User; public interface UserMapper { int deleteByPrimaryKey(String userId); int insert(User record); int insertSelective(User record); User selectByPrimaryKey(String userId); int updateByPrimaryKeySelective(User record); int updateByPrimaryKey(User record); /**Get all user information* @return List<User> */ List<User> getAllUser(); }3、在UserMapper.xml文件中编写getAllUser()方法要执行的SQL语句,如下所示:
<?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="me.gacl.dao.UserMapper" > <resultMap id="BaseResultMap" type="me.gacl.domain.User" > <id column="user_id" property="userId" jdbcType="CHAR" /> <result column="user_name" property="userName" jdbcType="VARCHAR" /> <result column="user_birthday" property="userBirthday" jdbcType="DATE" /> <result column="user_salary" property="userSalary" jdbcType="DOUBLE" /> </resultMap> <sql id="Base_Column_List" > user_id, user_name, user_birthday, user_salary </sql> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" > select <include refid="Base_Column_List" /> from t_user where user_id = #{userId,jdbcType=CHAR} </select> <delete id="deleteByPrimaryKey" parameterType="java.lang.String" > delete from t_user where user_id = #{userId,jdbcType=CHAR} </delete> <insert id="insert" parameterType="me.gacl.domain.User" > insert into t_user (user_id, user_name, user_birthday, user_salary) values (#{userId,jdbcType=CHAR}, #{userName,jdbcType=VARCHAR}, #{userBirthday,jdbcType=DATE}, #{userSalary,jdbcType=DOUBLE}) </insert> <insert id="insertSelective" parameterType="me.gacl.domain.User" > insert into t_user <trim prefix="(" suffix=")" suffixOverrides="," > <if test="userId != null" > user_id, </if> <if test="userName != null" > user_name, </if> <if test="userBirthday != null" > user_birthday, </if> <if test="userSalary != null" > user_salary, </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides="," > <if test="userId != null" > #{userId,jdbcType=CHAR}, </if> <if test="userName != null" > #{userName,jdbcType=VARCHAR}, </if> <if test="userBirthday != null" > #{userBirthday,jdbcType=DATE}, </if> <if test="userSalary != null" > #{userSalary,jdbcType=DOUBLE}, </if> </trim> </insert> <update id="updateByPrimaryKeySelective" parameterType="me.gacl.domain.User" > update t_user <set > <if test="userName != null" > user_name = #{userName,jdbcType=VARCHAR}, </if> <if test="userBirthday != null" > user_birthday = #{userBirthday,jdbcType=DATE}, </if> <if test="userSalary != null" > user_salary = #{userSalary,jdbcType=DOUBLE}, </if> </set> where user_id = #{userId,jdbcType=CHAR} </update> <update id="updateByPrimaryKey" parameterType="me.gacl.domain.User" > update t_user set user_name = #{userName,jdbcType=VARCHAR}, user_birthday = #{userBirthday,jdbcType=DATE}, user_salary = #{userSalary,jdbcType=DOUBLE} where user_id = #{userId,jdbcType=CHAR} </update> <!-- ==============以下内容是根据自身业务扩展的内容======================= --> <!-- select标签的id属性与UserMapper接口中定义的getAllUser方法要一模一样--> <select id="getAllUser" resultMap="BaseResultMap"> select user_id, user_name, user_birthday, user_salary from t_user </select></mapper>4、在UserServiceI接口中也添加一个getAllUser()方法,如下:
package me.gacl.service; Java.util.list 가져 오기; import me.gacl.domain.User; public interface UserServiceI { /** * Add user* @param user */ void addUser(User user); /** * Get user based on user id* @param userId * @return */ User getUserById(String userId); /** Get all user information* @return List<User> */ List<User> getAllUser(); }5、在UserServiceImpl类中实现getAllUser方法,如下:
package me.gacl.service.impl; Java.util.list 가져 오기; import org.springframework.beans.factory.annotation.Autowired; org.springframework.stereotyp.service; import me.gacl.dao.UserMapper; import me.gacl.domain.User; import me.gacl.service.UserServiceI; /** * @author gacl * Use @Service annotation to annotate the UserServiceImpl class as a service * The id of the service is userService */ @Service("userService") public class UserServiceImpl implements UserServiceI { /** * Use @Autowired annotation to annotate the userMapper variable, * When you need to use UserMapper, Spring will automatically inject UserMapper */ @Autowired private UserMapper userMapper;//Inject dao @Override public void addUser(User user) { userMapper.insert(user); } @Override public User getUserById(String userId) { return userMapper.selectByPrimaryKey(userId); } @Override public List<User> getAllUser() { return userMapper.getAllUser(); }}6、在src/main/java目录下创建一个me.gacl.web.controller包,然后在me.gacl.web.controller下创建一个UserServlet,如下:
package me.gacl.web.controller; import java.io.ioexception; Java.util.list 가져 오기; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import me.gacl.domain.User; import me.gacl.service.UserServiceI; /** * @author gacl * @WebServlet is an annotation provided by Servlet. The purpose is to label a normal java class that inherits the HttpServlet class as a Servlet * After the UserServlet uses the @WebServlet annotation, there is no need to configure it in web.xml */ @WebServlet("/UserServlet") public class UserServlet extends HttpServlet { //UserService private UserServiceI userService; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Get all user information List<User> lstUsers = userService.getAllUser(); request.setAttribute("lstUsers", lstUsers); request.getRequestDispatcher("/index.jsp").forward(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } public void init() throws ServletException { //Get Spring context object when Servlet initialization (ApplicationContext) ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext()); //Get userService from ApplicationContext userService = (UserServiceI) ac.getBean("userService"); }}7、编辑index.jsp页面,用于展示查询到的用户信息,内容如下:
<%@ page language="java" pageEncoding="UTF-8"%><%--Introducing JSTL core tag library--%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPE html><html> <head> <title>Show user information</title> <style type="text/css"> table,td{ border: 1px solid; 국경-콜라스 : 붕괴; } </style> </head> <body> <table> <tr> <td>User ID</td> <td>User name</td> <td>User birthday</td> <td>Salary</td> </tr> <%--Transfer the User object in the lstUsers collection--%> <c:forEach var="user" items="${lstUsers}"> <tr> <td>${user.userId}</td> <td>${user.userName}</td> <td>${user.userBirthday}</td> <td>${user.userBirthday}</td> <td>${user.userSalary}</td> </tr> </c:forEach> </table> </body></html>8、执行maven install命令编译项目,然后将项目部署到tomcat服务器中运行,注意,由于要使用Servlet3.0,所以必须将项目部署到tomcat7.x以上的服务器中去运行,如下所示:
输入地址:http://localhost:8080/spring4-mybatis3/UserServlet访问UserServlet,访问结果如下:
可以看到,t_user表中的用户信息全部查询出来显示到页面上了。这样在web服务器中的测试也正常通过了。
以上就是Spring4.x与MyBatis3.x整合的全部内容了。编写这个整合例子花了不少时间,使用Maven编译时总是出现莫名其妙的问题,有时候成功,有时候失败,反正很莫名其妙。如果遇到执行Maven install操作不能正常编译通过的情况:可以尝试采用:Maven clean→Clean项目→Maven install这三个步骤去解决问题