1. สร้างสภาพแวดล้อมการพัฒนา
1.1. สร้างโครงการเว็บด้วย maven
ดำเนินการคำสั่งต่อไปนี้:
คัดลอกรหัสดังต่อไปนี้: MVN archetype: สร้าง -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:/ http://maven.apache.org/maven-v__.xsd "> <moderversion> .. </modelversion> <sroupid> me.gacl </groupid> <ratifactid> Spring-Mybatis </artifactid> <url> http://maven.apache.org </url> <การพึ่งพา> <การพึ่งพา> <roupId> Junit </groupId> <ratifactid> Junit </artifactid> <version>
แก้ไขส่วน <name> Spring4-Mybatis3 Maven Webapp </name> และลบเนื้อหาที่มีช่องว่างใน "Maven Webapp" มิฉะนั้นเมื่อ Maven รวบรวมโครงการข้อผิดพลาดที่อธิบายไม่ได้บางอย่างจะเกิดขึ้นเนื่องจากช่องว่างและแก้ไข เป็น: <name> Spring4-Mybatis3 </name>
นอกจากนี้ลบสิ่งต่อไปนี้:
<Ederency> <sderctId> Junit </GroupId> <ratifactId> Junit </artifactId> <version> .. </Scope> <Scope> ทดสอบ </cope>
ส่วนนี้เป็นข้อมูลการพึ่งพาแพ็คเกจ JAR ของ Junit รุ่นนี้ต่ำเกินไป เราไม่ได้ใช้เวอร์ชันทดสอบ Junit นี้ เนื้อหา POM.XML ที่ได้รับการแก้ไขมีดังนี้:
<Project xmlns = "http://maven.apache.org/pom/ .. " xmlns: xsi = "http://www.w.org//xmlschema-instance" xsi: schemalocation = "http:/ http://maven.apache.org/maven-v__.xsd "> <moderversion> .. </modelversion> <sroupid> me.gacl </groupid> <ratifactid> Spring-Mybatis </artifactid> <url> http://maven.apache.org </url> <การพึ่งพา> </pendencies> <uffer> <build> <finalName> Spring-Mybatis </finalname>
1.2. นำเข้าโครงการที่สร้างขึ้นใน myeclipse
ขั้นตอนการดำเนินการเฉพาะจะแสดงในรูปด้านล่าง:
สร้างโฟลเดอร์แหล่งที่มาด้วยตนเอง: [SRC/Main/Java], [SRC/Test/Resources] และ [SRC/Test/Java] ดังแสดงในรูปด้านล่าง:
ณ จุดนี้งานก่อสร้างโครงการทั้งหมดเสร็จสิ้นแล้ว
2. สร้างฐานข้อมูลและตาราง (สำหรับ MySQL)
สคริปต์ SQL มีดังนี้:
สร้างฐานข้อมูล Spring4_MyBatis3; ใช้ Spring4_MyBatis3; ตารางวางถ้ามี t_user; สร้างตาราง t_user (user_id char (32) ไม่ใช่ null, user_name varchar (30) ค่าเริ่มต้น user_birthday เริ่มต้น
ฐานข้อมูลและตารางที่สร้างขึ้นมีดังนี้:
3. ใช้เครื่องมือเครื่องกำเนิดไฟฟ้าเพื่อสร้างรหัส
ฉันพบเครื่องมือเครื่องกำเนิดไฟฟ้าออนไลน์ที่สามารถสร้างคลาสเอนทิตีไฟล์การแมป SQL และ DAO ที่สอดคล้องกับตาราง mybatis ตามตารางฐานข้อมูลที่สร้างขึ้นและค้นหาไฟล์ generator.xml ในไดเรกทอรีรูทของเครื่องมือสร้าง ไฟล์นี้ใช้เพื่อกำหนดค่ากฎการสร้างรหัสดังแสดงในรูปด้านล่าง:
แก้ไขไฟล์ generator.xml เนื้อหามีดังนี้:
<? xml version = "." การเข้ารหัส = "utf-"?> <! Doctype GeneratorConfiguration สาธารณะ "-// mybatis.org//dtd mybatis generator. location = "e:/repository/mysql/mysql-connector-java /../ mysql-connector-java -... jar"/> <!-<classpathentry location = "c:/oracle/product /../ db_/jdbc/lib/ojdbc.jar <commentGenerator> <property name = "suppressallComments" value = "true"/> </commentGenerator> <!-URL ลิงก์ฐานข้อมูลชื่อผู้ใช้รหัสผ่าน-> <jdbcconnection driverclass = "com.mysql.jdbc.driver" การเชื่อมต่อ " รหัสผ่าน = "xdp"> <!-<jdbcconnection driverclass = "oracle.jdbc.driver.oracledriver" การเชื่อมต่อ = "jdbc: oracle: Thin: @localhost :: orcl" userid = "msa" รหัสผ่าน = "msa">-> value = "false" /> < /javatyperesolver> <!- สร้างชื่อแพ็คเกจและตำแหน่งของคลาสเอนทิตี ที่นี่คลาสเอนทิตีที่สร้างขึ้นจะอยู่ภายใต้แพ็คเกจ me.gacl.domain-> <javamodelgenerator targetPackage = "me.gacl.domain" targetProject = "c:/ผู้ใช้/gaCl/spring-mybatis/src/main/java"> </javamodelGenerator> <!- ชื่อแพคเกจไฟล์และตำแหน่งไฟล์ SQL ที่สร้างขึ้น ที่นี่วางไฟล์แผนที่ SQL ที่สร้างขึ้นไว้ใต้แพ็คเกจ me.gacl.mapping-> <sqlmapgenerator targetpackage = "me.gacl.mapping" targetProject = "c:/ผู้ใช้/gacl/spring-mybatis/src/main/java"> ชื่อและที่ตั้งของ DAO ที่นี่วางคลาส DAO ที่สร้างขึ้นไว้ใต้แพ็คเกจ me.gacl.dao-> <javaclientgenerator type = "xmlmapper" targetPackage = "me.gacl.dao" เป้าหมาย project = "c:/ผู้ใช้/gacl/spring-mybatis/src/main/main/java" </javaclientGenerator> <!-เพื่อสร้างตารางเหล่านั้น (เปลี่ยนชื่อ tablename และ domainObjectName)-> <table tablename = "t_user" domainObjectName = "ผู้ใช้" enableCountByExample = "false" enableUpDateByExample = "false" false /> </บริบท> </generatorconfiguration>
เปิดหน้าต่างบรรทัดคำสั่งสลับไปที่ไดเรกทอรีรูทของเครื่องมือเครื่องกำเนิดและดำเนินการคำสั่งต่อไปนี้:
java -jar mybatis -generator -core -1.3.2.jar -configfile generator.xml -overwrite
ดังที่แสดงในรูปด้านล่าง:
ตอนนี้เรากำหนดค่าไฟล์การแมปรหัสที่สร้างขึ้นและ SQL ในไฟล์ generator.xml เพื่อวางรหัสที่สร้างขึ้นและไฟล์การแมป SQL ลงในไดเรกทอรี "C:/ผู้ใช้/GACL/Spring4-Mybatis3/Src/Main/Java" ไดเรกทอรีนี้เป็นไดเรกทอรีที่โครงการ Spring4-Mybatis3 ของเราตั้งอยู่ เรารีเฟรชไดเรกทอรี SRC/Main/Java และคุณสามารถดูรหัสที่สร้างขึ้นและไฟล์การแมปดังที่แสดงในรูปด้านล่าง:
ไม่จำเป็นต้องเปลี่ยนแปลงรหัสรหัสและการแมปที่สร้างขึ้นเป็นบรรทัดและสามารถนำไปใช้โดยตรงกับโครงการ ลองดูที่รหัสและการแมปไฟล์ที่สร้างโดยเครื่องมือสร้าง:
1. คลาส DAO ที่สร้างขึ้น
แพ็คเกจ me.gacl.dao; นำเข้า me.gacl.domain.user; อินเทอร์เฟซสาธารณะ usermapper {int deleteByPrimaryKey (String userId); int แทรก (บันทึกผู้ใช้); int insertSelective (บันทึกผู้ใช้); ผู้ใช้ SELECTBYPRIMARYKEY (String USERID); IntupterbyPrimaryKey (บันทึกผู้ใช้); -UserMapper ที่สร้างขึ้นเป็นอินเทอร์เฟซที่กำหนดวิธีการบางอย่างสำหรับการเพิ่มการลบการแก้ไขและการค้นหาตาราง t_user
2. คลาสเอนทิตีที่สร้างขึ้น
แพ็คเกจ me.gacl.domain; นำเข้า java.util.date; ผู้ใช้ระดับสาธารณะ {userid String ส่วนตัว; ชื่อผู้ใช้สตริงส่วนตัว; วันที่ผู้ใช้วันที่ส่วนตัว; ผู้ใช้สองคนส่วนตัว; สตริงสาธารณะ getUserId () {return userId; } โมฆะสาธารณะ setUserId (String userId) {this.userId = userId == null? NULL: userId.Trim (); } สตริงสาธารณะ getUserName () {ส่งคืนชื่อผู้ใช้; } โมฆะสาธารณะ setUserName (ชื่อผู้ใช้สตริง) {this.userName = username == null? null: username.trim (); } วันที่สาธารณะ getUserBirthday () {return userbirthday; } โมฆะสาธารณะ setUserBirthday (วันที่ UserBirthday) {this.userBirthday = UserBirthday; } public double getusersalary () {return usersalary; } โมฆะสาธารณะ setUsersalary (ผู้ใช้สองเท่า) {this.UserSalary = usersAlary; -คลาสผู้ใช้เป็นคลาสเอนทิตีที่สอดคล้องกันของตาราง t_user แอตทริบิวต์ที่กำหนดไว้ในคลาสผู้ใช้สอดคล้องกับฟิลด์ในตาราง t_user หนึ่งทีละหนึ่ง
3. ไฟล์การแมป SQL ที่สร้างขึ้น
<? xml version = "." การเข้ารหัส = "utf-"?> <! doctype mapper สาธารณะ "-// mybatis.org//dtd mapper .//en" "http://mybatis.org/dtd/mybatis--mapper.dtd"> type = "me.gacl.domain.user"> <id column = "user_id" คุณสมบัติ = "userid" jdbctype = "char" /> <result column = "user_name" คุณสมบัติ = "ชื่อผู้ใช้" jdbctype = "varchar" /> <result column = "user_birthday" column = "user_salary" คุณสมบัติ = "usersalary" jdbctype = "double"/> </resultmap> <sql id = "base_column_list"> user_id, user_name, user_birthday, user_salary </sql> parameterType = "java.lang.string"> เลือก <รวม refid = "base_column_list" /> จาก t_user ที่ user_id = #{userid, jdbctype = char} < /select> <delete id = "deleteBrimarykey" parameterType = "Java.lang.lang.lang.lang.lang.lang #{userId, jdbcType = char} </delete> <แทรก id = "แทรก" parameterType = "me.gacl.domain.user"> แทรกลงใน t_user (user_id, user_name, user_birthday, user_salary) #{ชื่อผู้ใช้, jdbcType = varchar}, #{userbirthday, jdbctype = วันที่}, #{usersalary, jdbctype = double}) </insert> <insert id = "insertSelective" parameterType = "me.gacl.domain. Suffix = ")" SuffixOverrides = ","> <ถ้า test = "userId! = null"> user_id, </ถ้า> <ถ้า test = "ผู้ใช้! = null"> user_name, </if> <ถ้า test = "userbirthday! <trim prefix = "ค่า (" suffix = ")" suffixoverRides = ","> <ถ้า test = "userId! = null"> #{userId, jdBcType = char}, </ถ้า> <ถ้าทดสอบ = "ผู้ใช้! = null"> #{username #{userbirthday, jdbcType = วันที่}, </if> <ถ้า test = "usersalary! = null"> #{usersalary, jdbcType = double}, </if> </trim> test = "username! = null"> user_name = #{ชื่อผู้ใช้, jdbctype = varchar}, </ถ้า> <ถ้า test = "userbirthday! = null"> user_birthday = #{userbirthday, jdbcType = วันที่} #{usersalary, jdbcType = double}, </if> </et> โดยที่ user_id = #{userId, jdbcType = char} </update> <update id = "updateByPrimaryKey" parameterType = "me.gacl.domain.user.user" user_birthday = #{userbirthday, jdbcType = วันที่}, user_salary = #{usersalary, jdbcType = double} โดยที่ user_id = #{userId, jdbcType = char}เนื้อหาของไฟล์ usermapper.xml คือการเขียนคำสั่ง SQL ที่ใช้งานตาราง t_user ให้ความสำคัญกับรายละเอียดเล็ก ๆ น้อย ๆ ที่ต้องให้ความสนใจในการกำหนดค่า usermapper.xml:
1. เนมสเปซของแท็ก <mapper> ของ usermapper.xml ต้องเป็นชื่อคลาสเต็มของอินเทอร์เฟซ USERMAPPER นั่นคือ <MAPPER NAMESPACE = "ME.GACL.DAO.USERMAPPER">
2. usermapper.xml นิยามค่าของแอตทริบิวต์ id ของฐานข้อมูลการดำเนินการจะต้องสอดคล้องกับชื่อวิธีที่กำหนดโดยอินเตอร์เฟส usermapper ดังแสดงในรูปด้านล่าง:
เหตุผลสำหรับข้อกำหนดสองประการข้างต้นคือ MyBatis สามารถใช้วิธีการที่เกี่ยวข้องที่กำหนดไว้ในอินเทอร์เฟซ USERMAPPER โดยอัตโนมัติตามอินเตอร์เฟส USERMAPPER และไฟล์ USERMAPPER.XML เพื่อที่เราจะได้เขียนรหัสการใช้งานเฉพาะสำหรับอินเทอร์เฟซ USERMAPPER อีกต่อไป
4. การรวมสปริงและ mybatis
ก่อนอื่นเราต้องเพิ่มแพ็คเกจ JAR ที่เกี่ยวข้องที่เราต้องการในโครงการ เราสามารถไปที่ที่เก็บกลางของ Maven: http://search.maven.org/ เพื่อค้นหาแพ็คเกจ Jar ที่เกี่ยวข้องที่เราต้องการดังที่แสดงในรูปต่อไปนี้:
เราเพียงแค่ต้องป้อนชื่อแพ็คเกจ JAR ที่เรากำลังมองหาในช่องค้นหาและคลิกปุ่ม [ค้นหา] เพื่อค้นหาแพ็คเกจ JAR ที่เรากำลังมองหา
4.1. เพิ่มแพ็คเกจขวดที่เกี่ยวข้องกับฤดูใบไม้ผลิและ mybatis
1. เพิ่มสปริงคอร์ป้อนคำหลักสปริงคอร์เพื่อค้นหาดังแสดงในรูปด้านล่าง:
ค้นหาข้อมูลคำอธิบายการพึ่งพาเกี่ยวกับสปริงคอร์ดังแสดงในรูปต่อไปนี้:
จะ
<การพึ่งพา> <roupId> org.springframework </groupId> <ratifactid> Spring-Core </artifactId> <version> 4.1.4.release </version>
คัดลอกไปยังไฟล์ pom.xml ของโครงการดังนี้:
<Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http:/MANCMMMMMMMMMMMMMMMMMMMMMMMMMMBM http://maven.apache.org/maven-v4_0_0.xsd "> <moderVersion> 4.0.0 </modelversion> <roupid> me.gacl </groupid> <name> spring4-mybatis3 </name> <url> http://maven.apache.org </url> <การพึ่งพา> <!-เพิ่มแพ็คเกจ Spring4.1.4 หลัก-> <การพึ่งพา> <loupid> org.springframework </groupid> </dependencies> <uffer> <finalName> Spring4-Mybatis3 </malname> </ufferive> </project>
ด้วยวิธีนี้ Maven จะช่วยเราดาวน์โหลดแพ็คเกจ Spring-Core Jar จากที่เก็บกลางของ Maven ไปยังที่เก็บในพื้นที่ของเราโดยอัตโนมัติจากนั้นเพิ่มแพ็คเกจ Spring-Core Jar และการพึ่งพาที่เกี่ยวข้องกับโครงการของเราดังที่แสดงด้านล่าง:
แพ็คเกจ JAR ที่เกี่ยวข้องที่ต้องการโดย Spring4.x และ MyBatis3.x สามารถค้นหาได้ในวิธีการข้างต้นแล้วเพิ่มลงในโครงการ หลังจากเพิ่มแพ็คเกจ JAR ที่เกี่ยวข้องที่เกี่ยวข้องกับ Spring4.x และ MyBatis3.x เนื้อหาของไฟล์ pom.xml จะมีดังนี้: ในที่สุด:
<Project xmlns = "http://maven.apache.org/pom/ .. " xmlns: xsi = "http://www.w.org//xmlschema-instance" xsi: schemalocation = "http:/ http://maven.apache.org/maven-v__.xsd "> <moderversion> .. </modelversion> <sroupid> me.gacl </groupid> <ratifactid> Spring-Mybatis </artifactid> <url> http://maven.apache.org </url> <การพึ่งพา> <!-เพิ่มแพ็คเกจสปริง-คอร์-> <การพึ่งพา> <GroupId> org.springframework </groupid> <RoupID> org.springframework </groupId> <ratifactId> Spring-Context </artifactId> <persion> ... ปล่อย </เวอร์ชั่น> </perctency> <!-เพิ่มแพ็คเกจ Spring-Tx-> <การพึ่งพา แพ็คเกจ Spring-JDBC-> <pendency> <merdency> <roupId> org.springframework </groupId> <ratifactId> Spring-Jdbc </artifactid> <version> ... ปล่อย </เวอร์ชั่น> </derness> <!-เพิ่มแพ็คเกจ Spring-JdBc-> <การพึ่งพา <ArtIfactId> Spring-Jdbc </artifactid> <persion> ... ปล่อย </เวอร์ชัน> </การพึ่งพา> <!-เพื่ออำนวยความสะดวกในการทดสอบหน่วยเพิ่มแพ็คเกจทดสอบฤดูใบไม้ผลิ-> <การพึ่งพาอาศัย> <การพึ่งพา> <roupId> org.springframework </groupId> <ratifactid> Spring-Web </ArtifactId> <version> ... ปล่อย </เวอร์ชัน> </การพึ่งพา> <!-เพิ่มแพ็คเกจ ApectJweaver-> <!-เพิ่มแพ็คเกจ MyBatis Core-> <การพึ่งพา> <roupId> org.mybatis </groupId> <ArtIfactId> mybatis </artifactid> <cersion> .. </version> </การพึ่งพา> <! <ArtIfactId> MyBatis-SPRING </artifactId> <persion> .. </เวอร์ชัน> </การพึ่งพา> <!-เพิ่มแพ็คเกจ servlet.core-> <predency> <sdependency> <roupId> javax.servlet.jsp </groupId> <ratifactid> javax.servlet.jsp </artifactid> <sersion> ..- b </version> </การพึ่งพา> <!-jstl-> <predency> แพ็คเกจไดรเวอร์ mysql-> <cendency> <sdercy> <sderctiD> mysql </groupid> <ratifactid> mysql-connector-java </artifactid> <persion> .. </version> </การพึ่งพา> <!-เพิ่มแพ็คเกจการเชื่อมต่อ Druid-> </permentency> <!-เพิ่มแพ็คเกจทดสอบ junit uno unit-> <pendency> <sdeperency> <sdependency> <sderctiD> junit </groupId> <ratifactid> Junit </artifactId> <version>. </เวอร์ชัน> <pope> ทดสอบ </cope> </การพึ่งพา> </การพึ่งพา
4.2. เขียนไฟล์กำหนดค่าที่เกี่ยวข้อง
1. dbconfig.properties
สร้างไฟล์ dbconfig.properties ในไดเรกทอรี SRC/Main/Resources เพื่อเขียนข้อมูลที่เกี่ยวข้องเกี่ยวกับการเชื่อมต่อกับฐานข้อมูล MySQL เนื้อหาของ dbconfig.properties มีดังนี้:
driverclassName = com.mysql.jdbc.drivervalidationQuery = เลือก 1jdbc_url = jdbc: mysql: // localhost: 3306/spring4_mybatis3?
2. Spring.xml (ไฟล์การกำหนดค่าของ Framework Spring)
สร้างไฟล์ Spring.xml ในไดเรกทอรี SRC/Main/Resources ไฟล์ Spring.xml เป็นไฟล์การกำหนดค่าหลักที่เขียนขึ้นสำหรับกรอบ Spring เนื้อหาของ Spring.xml มีดังนี้:
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org/2001/xml 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-> <บริบท: สถานที่ตั้งสถานที่ตั้งสถานที่ = "classpath: dbconfig.properties" /> <!-แนะนำ dbconfig.properties ไฟล์ทรัพย์สิน-> <บริบท: สถานที่ตั้งของผู้ถือครอง แพ็คเกจและคลาสทั้งหมดที่มีคำอธิบายประกอบด้วยคำอธิบายประกอบ @Service ของคลาส-> <บริบท: Component-Scan base-package = "me.gacl.service" /> </ebeans>
การกำหนดค่าของไฟล์ Spring.xml ของเรานั้นง่ายมากมีเพียงสองการกำหนดค่า
3. Spring-mybatis.xml (ไฟล์การกำหนดค่ารวมกับ Spring และ MyBatis)
สร้างไฟล์ Spring-mybatis.xml ในไดเรกทอรี SRC/Main/Resources ไฟล์ Spring-mybatis.xml เป็นไฟล์กำหนดค่าที่เขียนขึ้นสำหรับการรวมกรอบสปริงและกรอบ MyBatis เนื้อหาของ Spring-mybatis.xml มีดังนี้:
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org/2001/xml xmlns: tx = "http://www.springframework.org/schema/tx" xmlns: aop = "http://www.springframework.org/schema/aop" xsi: schemalocation = "http:/ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://ww.springframework.org/schema http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.0.0.0.0.org <bean id = "dataSource"> <property name = "jnDiname" value = "$ {jndiname}"> </porement> </ebean>-> <!-!- - - - - - - - - name = "username" value = "$ {jdbc_username}" /> <property name = "รหัสผ่าน" value = "$ {jdbc_password}" /> <!-เริ่มต้นขนาดการเชื่อมต่อ-> <property name = "ค่าเริ่มต้น" ฟรี-> <property name = "maxidle" value = "20" /> <!-จำนวนการเชื่อมต่อขั้นต่ำฟรี-> <property name = "minidle" value = "0" /> <! name = "MaxPoolPreparedStatementPerConnesionesize" value = "33" /> -> <property name = "ValidationQuery" value = "$ {ValidationQuery}" /> <property name = "testOnBorrow" value = "false" /> value = "true" /> <!-กำหนดระยะเวลาในการดำเนินการตรวจจับช่วงเวลาเพื่อตรวจจับการเชื่อมต่อที่ไม่ได้ใช้งานที่ต้องปิดในมิลลิวินาที-> <property name = "timebetweenevictionrunsmillis" ค่า = "60000" /> <! value = "25200000" /> <!-เปิดฟังก์ชั่น removeAbandOned-> <ชื่อคุณสมบัติ = "removeAbandOned" value = "true" /> <!-1800 วินาทีนั่นคือ 30 นาที-> <property name = "RemoveAbandOnedTimeOut" value = "1800" /> <! ฐานข้อมูล-> <!-<property name = "ตัวกรอง" value = "stat" />-> <property name = "filters" value = "Merestat" /> </ebean> <!-! - - - - - - - - - - - - บันทึกค่าการกำหนดค่าด้วยตนเอง = "classpath: ME/GACL/Mapping/*. xml" ใน configuration.xml หมายถึงไฟล์ XML ทั้งหมดใน me.gacl.mapping แพ็คเกจภายใต้ classpath (classpath) ใน usermapper.xml อยู่ภายใต้ me.gacl.mapping แพ็คเกจ value = "classpath: me/gaCl/mapping/*. xml"/> </ebean> <!-สแกนเนอร์การกำหนดค่า-> <bean> <!-สแกนแพ็คเกจ me.gacl.dao และคลาสอินเตอร์เฟสการแมปทั้งหมด value = "sqlsessionfactory" /> </ebean> <!- - - - - - - - - Transaction-Manager = "TransactionManager" />-> <!-การกำหนดค่า interceptor-> <tx: คำแนะนำ id = "transactionAdvice" transaction-manager = "TransactionManager"> <tx: แอตทริบิวต์> <tx: method name = "เพิ่ม*" การแพร่กระจาย = "จำเป็น" /> <tx: method name = "บันทึก*" การแพร่กระจาย = "ต้องการ" /> <tx: method name = "update*" การแพร่กระจาย = "ต้องการ" /> <tx: method name = "Modify*" การเผยแพร่ = "name*> <tx: tx: method =" edit*" name = "ลบ*" การแพร่กระจาย = "ต้องการ" /> <tx: method name = "recheam" การแพร่กระจาย = "จำเป็น" /> <tx: method name = "delandRepair" การแพร่กระจาย = "จำเป็น" /> <tx: method name = "delandRepair" การแพร่กระจาย = "รองรับ" /> <tx: method name = "โหลด*" การแพร่กระจาย = "สนับสนุน" /> <tx: method name = "search*" การแพร่กระจาย = "สนับสนุน" /> <tx: method name = "dataGrid*" propagation = "supports" /> <tx: method name = "*" </tx: แอตทริบิวต์> </tx: คำแนะนำ> <aop: config> <aop: pointcut id = "transactionpointcut" expression = "การดำเนินการ (*me.gacl.service ..*Impl.*(.. )) jdbc-> <bean id = "druid-stat-interceptor"> </epean> <bean id = "druid-stat-pointcut" scope = "prototype"> <property name = "patterns"> <list> <value> me.gacl.service* คำแนะนำ-ref = "druid-stat-interceptor" pointcut-ref = "druid-stat-pointcut"/> </aop: config> </ebeans>ณ จุดนี้ไฟล์การกำหนดค่าที่เกี่ยวข้องได้ถูกเขียนดังแสดงในรูปด้านล่าง:
4.3. ดำเนินการทดสอบหน่วย
หลังจากสองขั้นตอนข้างต้นการรวม Spring 4 และ MyBatis3 เสร็จสมบูรณ์แล้ว ภารกิจต่อไปที่เราต้องทำคือทำการทดสอบหน่วยเพื่อทดสอบว่าการรวม Spring4 และ MyBatis3 ประสบความสำเร็จหรือไม่
1. สร้างแพ็คเกจ me.gacl.service ในไดเรกทอรี SRC/Main/Java จากนั้นสร้างอินเทอร์เฟซ UserserVicei ในแพ็คเกจ me.gacl.service ดังที่แสดงด้านล่าง:
แพ็คเกจ me.gacl.service; นำเข้า me.gacl.domain.user; อินเทอร์เฟซสาธารณะ userservicei { / *** เพิ่มผู้ใช้* ผู้ใช้ @param ผู้ใช้* / void adduser (ผู้ใช้ผู้ใช้); / ** * รับผู้ใช้ตามรหัสผู้ใช้ * @param userId * @return */ ผู้ใช้ getUserById (String userId); -2. สร้างแพ็คเกจ me.gacl.service.impl ในไดเรกทอรี src/main/java จากนั้นสร้างคลาสการใช้งานสำหรับอินเตอร์เฟส userservicei ใน me.gacl.service.impl: userserviceimpl ดังที่แสดงด้านล่าง:
แพ็คเกจ me.gacl.service.impl; นำเข้า org.springframework.beans.factory.annotation.autowired; นำเข้า org.springframework.stereotype.service; นำเข้า me.gacl.dao.usermapper; นำเข้า me.gacl.domain.user; นำเข้า me.gacl.service.userservicei; /** * @author GACL * ใช้ @Service คำอธิบายประกอบเพื่อใส่คำอธิบายประกอบคลาส UserserViceImpl เป็นบริการ * ID บริการคือ Userservice */@Service ("Userservice") คลาสสาธารณะ UserserViceImpl ใช้ Userservicei @autowired ส่วนตัว USERMAPPER USERMAPPER; // Inject DAO @Override Public Void Adduser (ผู้ใช้ผู้ใช้) {USERMAPPER.INSERT (ผู้ใช้); } @Override ผู้ใช้สาธารณะ getUserById (String userId) {ส่งคืน usermapper.selectByPrimaryKey (userId); -ทั้งสองคลาสที่สร้างขึ้นมีดังนี้:
3. เขียนคลาสทดสอบหน่วยในไดเรกทอรี SRC/Test/Java สร้างแพ็คเกจ me.gacl.test ใหม่จากนั้นสร้างคลาส mybatistest ภายใต้แพ็คเกจนี้ รหัสมีดังนี้:
แพ็คเกจ me.gacl.test; นำเข้า java.util.date; นำเข้า java.util.uuid; นำเข้า me.gacl.domain.user; นำเข้า me.gacl.service.userservicei; // นำเข้า me.gacl.service.userservicei; นำเข้า org.junit. ก่อน; นำเข้า org.junit.test; นำเข้า org.springframework.context.applicationContext; นำเข้า org.springframework.context.support.classpathxmlapplicationContext; ชั้นเรียนสาธารณะ mybatistest {ผู้ใช้ส่วนตัวผู้ใช้บริการผู้ใช้; /*** วิธีการนี้ก่อนที่จะดำเนินการก่อนวิธีการทดสอบทั้งหมดและดำเนินการเพียงครั้งเดียว* การเริ่มต้นทั้งหมดในระหว่างการทดสอบหน่วย Junit สามารถทำได้ในวิธีนี้* ตัวอย่างเช่นการเริ่มต้นแอปพลิเคชันแอปพลิเคชันและผู้ใช้บริการในวิธีการก่อนหน้า*/@before public void ก่อน () {// สร้างบริบทสปริง String [] {"Spring.xml", "Spring-mybatis.xml"}); // ดึงข้อมูลวัตถุ Userservice ที่เราต้องการใช้ตาม ID ของถั่วจาก Spring Container Userservice = (userservicei) ac.getBean ("Userservice"); } @Test โมฆะสาธารณะ TestAdDuser () {// ApplicationContext AC = ใหม่ classPathxMlApplicationContext (สตริงใหม่ [] {"Spring.xml", "Spring-mybatis.xml"}); // userservicei userservice = (userservicei) ac.getBean ("userservice"); ผู้ใช้ผู้ใช้ = ผู้ใช้ใหม่ (); user.setUserId (uuid.randomuuid (). toString (). replaceall ("-", "")); user.setUserName ("White Tiger God Emperor XDP"); user.setUserBirthday (วันที่ใหม่ ()); user.setUsersalary (D); userservice.adduser (ผู้ใช้); -เมื่อดำเนินการรหัสทดสอบหน่วยจะมีการรายงานข้อผิดพลาดต่อไปนี้:
ข้อความแสดงข้อผิดพลาดคือคลาส "me.gacl.test.mybatistest" ไม่พบเพราะเราไม่ได้ใช้ Maven เพื่อรวบรวมคลาสในโครงการ
ต่อไปเราใช้ Maven เพื่อรวบรวมโครงการเลือกไฟล์ pom.xml ของโครงการ→【 debug เป็น】→【 maven ติดตั้ง】ดังที่แสดงด้านล่าง:
ผลการรวบรวมมีดังนี้:
ที่นี่ฉันจะพูดถึงปัญหาที่ฉันพบหลังจากดำเนินการติดตั้ง Maven เมื่อฉันดำเนินการคำสั่ง Maven Install ครั้งแรกฉันเห็นข้อผิดพลาดที่ยุ่งเหยิงต่อไปนี้:
หลังจากนั้นฉันลบโครงการนำเข้าโครงการอีกครั้งแล้วดำเนินการโครงการที่สะอาดดังแสดงในรูปต่อไปนี้:
ฉันสามารถรวบรวมและส่งผ่านตามปกติหลังจากดำเนินการติดตั้ง Maven ซึ่งทำให้ฉันหดหู่เป็นเวลานาน นี่ไม่ควรเป็นเหตุผลสำหรับการกำหนดค่าโครงการของฉัน แต่เป็นเหตุผลของ Maven ฉันไม่รู้ว่าทำไมถึงเป็นเช่นนี้ อย่างไรก็ตามนี่เป็นทางออก หากคุณพบสถานการณ์ที่การทำงานติดตั้ง Maven ไม่สามารถรวบรวมได้ตามปกติ: คุณสามารถลองใช้สามขั้นตอน: Maven Clean → Clean Project → Maven ติดตั้งเพื่อแก้ปัญหา
นอกเหนือจากการทดสอบหน่วยกับ Junit ปกติแล้วเรายังสามารถใช้กรอบการทดสอบ Junit ที่จัดทำโดย Spring สำหรับการทดสอบหน่วยและสร้างคลาส MyBatistestBySpringTestFramework ใหม่ภายใต้ ME.GACL.Test ด้วยรหัสดังต่อไปนี้:
แพ็คเกจ me.gacl.test; นำเข้า java.util.date; นำเข้า java.util.uuid; นำเข้า me.gacl.domain.user; นำเข้า me.gacl.service.userservicei; นำเข้า org.junit.test; นำเข้า org.junit.runner.runwith; นำเข้า org.springframework.beans.factory.annotation.autowired; นำเข้า org.springframework.test.context.contextconfiguration; นำเข้า org.springframework.test.context.junit.springjunitclassrunner; @Runwith (SpringJunitClassRunner.class) // หลังจากการกำหนดค่าคำอธิบายประกอบ @ContextConfiguration และแอตทริบิวต์ตำแหน่งของคำอธิบายประกอบถูกระบุด้วยไฟล์สปริงและการกำหนดค่า @ContextConfiguration (locations = {"classPath: Spring.xml" // ฉีด Userservice @AutoWired Userservicei Userservice; @Test โมฆะสาธารณะ TestAdDuser () {ผู้ใช้ผู้ใช้ = ผู้ใช้ใหม่ (); user.setUserId (uuid.randomuuid (). toString (). replaceall ("-", "")); user.setUserName ("XDP_GACL_WHITE Tiger God Emperor"); user.setUserBirthday (วันที่ใหม่ ()); user.setUsersalary (D); userservice.adduser (ผู้ใช้); } @Test โมฆะสาธารณะ TestGetEnbyId () {string userId = "fbCeBfDada"; user user = userservice.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.w3.org/2001/xml XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd <SecutionS> สปริงฟัง </คำอธิบาย> <Sistener-Lass> org.springframework.web.context.contextloaderlistener </listener-class> </listener> <! Spring.xml และ Spring-mybatis.xml, วิธีการเขียนแก้ไข-> <param-value> classpath: spring.xml, classpath: spring-mybatis.xml </param-value>
2. เพิ่มวิธีการ getAlluser () เพื่อรับข้อมูลผู้ใช้ทั้งหมดในอินเทอร์เฟซ USERMApper ดังที่แสดงด้านล่าง:
แพ็คเกจ me.gacl.dao; นำเข้า java.util.list; นำเข้า me.gacl.domain.user; อินเทอร์เฟซสาธารณะ usermapper {int deleteByPrimaryKey (String userId); int แทรก (บันทึกผู้ใช้); int insertSelective (บันทึกผู้ใช้); ผู้ใช้ SELECTBYPRIMARYKEY (String USERID); intupterbyPrimaryKeySelective (บันทึกผู้ใช้); IntupterbyPrimaryKey (บันทึกผู้ใช้); / ** รับข้อมูลผู้ใช้ทั้งหมด*@return list <ผู้ใช้>*/ list <ผู้ใช้> getAlluser (); -3. เขียนคำสั่ง SQL เพื่อเรียกใช้วิธี getAllUser () ในไฟล์ usermapper.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="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; import org.springframework.stereotype.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"%><%--引入JSTL核心标签库--%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPE html><html> <head> <title>显示用户信息</title> <style type="text/css"> table,td{ border: 1px solid; border-collapse: collapse; } </style> </head> <body> <table> <tr> <td>用户ID</td> <td>用户名</td> <td>用户生日</td> <td>工资</td> </tr> <%--遍历lstUsers集合中的User对象--%> <c:forEach var="user" items="${lstUsers}"> <tr> <td>${user.userId}</td> <td>${user.userName}</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这三个步骤去解决问题