1. Bangun lingkungan pengembangan
1.1. Buat proyek web dengan Maven
Jalankan perintah berikut:
Salin kode sebagai berikut: MVN Archetype: create -dgroupId = me.gacl -dartifactId = spring4 -mybatis3 -darchetypeartifactid = maven -archetype-webapp -dinteractiveMode = false
Seperti yang ditunjukkan pada gambar di bawah ini:
Proyek yang dibuat adalah sebagai berikut:
Edit file pom.xml
<Project xmlns = "http://maven.apache.org/pom/ .." xmlns: xsi = "http://www.w.org//xmlschema-instance" xsi: schemalocation = "http://maven.apache.orgace/orgom/pomom/poM/pom/ .. http://maven.apache.org/maven-v__.xsd"> <modelVersion>..</modelVersion> <groupId>me.gacl</groupId> <artifactId>spring-mybatis</artifactId> <packaging>war</packaging> <version>.-SNAPSHOT</version> <name>spring-mybatis Maven Webapp</name> <rerl> http://maven.apache.org </rerl> <dependencies> <dependency> <groupid> junit </groupid> <ArtifactId> Junit </artifactid> <version> </versi> <cupe> </scope-m springnis> </dependency> </Dependencies> </Versi> <cupe- final> </scope-mrope> </dependency> </Dependencies> </Versi> </scope- mange </scope-m
Ubah bagian <name> spring4-mybatis3 Maven Webapp </name> dan hapus spasi yang berisi konten di "Maven Webapp". Jika tidak, ketika Maven mengkompilasi proyek, beberapa kesalahan yang tidak dapat dijelaskan akan terjadi karena spasi, dan memodifikasinya menjadi: <name> spring4-mybatis3 </name> .
Juga, hapus yang berikut:
<dependency> <GroupId> junit </groupId> <ArTifactId> junit </artifactid> <version> .. </version> <scope> test </seupop> </gandendency>
Bagian ini adalah informasi ketergantungan Paket JAR dari JUnit. Versi ini terlalu rendah. Kami tidak menggunakan versi tes junit ini. Konten pom.xml yang dimodifikasi adalah sebagai berikut:
<Project xmlns = "http://maven.apache.org/pom/ .." xmlns: xsi = "http://www.w.org//xmlschema-instance" xsi: schemalocation = "http://maven.apache.orgace/orgom/pomom/poM/pom/ .. http://maven.apache.org/maven-v__.xsd"> <modelVersion>..</modelVersion> <groupId>me.gacl</groupId> <artifactId>spring-mybatis</artifactId> <packaging>war</packaging> <version>.-SNAPSHOT</version> <name>spring-mybatis</name> <rerl> http://maven.apache.org </rerl> <dependencies> </dependencies> <build> <finalname> Spring-mybatis </finalname> </bangun> </joyan>
1.2. Mengimpor proyek yang dibuat ke myeclipse
Langkah operasi spesifik ditunjukkan pada gambar di bawah ini:
Buat tiga folder sumber secara manual: [src/main/java], [src/test/sumber daya], dan [src/test/java], seperti yang ditunjukkan pada gambar di bawah ini:
Pada titik ini, semua pekerjaan konstruksi proyek telah selesai.
2. Buat Database dan Tabel (untuk MySQL)
Skrip SQL adalah sebagai berikut:
Create DATABASE spring4_mybatis3;USE spring4_mybatis3;DROP TABLE IF EXISTS t_user;CREATE TABLE t_user ( user_id char(32) NOT NULL, user_name varchar(30) DEFAULT NULL, user_birthday date DEFAULT NULL, user_salary double DEFAULT NULL, PRIMARY KEY (user_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Basis data dan tabel yang dibuat adalah sebagai berikut:
3. Gunakan alat generator untuk menghasilkan kode
Saya menemukan alat generator online yang dapat menghasilkan kelas entitas, file pemetaan SQL dan DAO yang sesuai dengan tabel MyBatis berdasarkan tabel database yang dibuat, dan temukan file generator.xml di direktori root alat generator. File ini digunakan untuk mengonfigurasi aturan pembuatan kode, seperti yang ditunjukkan pada gambar di bawah ini:
Edit file generator.xml, kontennya adalah sebagai berikut:
<? Xml Version = "." encoding="UTF-"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration .//EN" "http://mybatis.org/dtd/mybatis-generator-config__.dtd"> <generatorConfiguration> <!-- Database Driver Package Location--> <classPathEntry Lokasi = "e:/repositori/mysql/mysql-connector-java /../ mysql-connector-java -... jar"/> <!-<classpathentry location = "c:/oracle/product /../ db_/jdbc/lib/lib/ojdbc.jar"/>-> <"db_/jdbc/lib/lib/ojdbc.jar"/mybunt "ID =" "" "" <CommentSgenerator> <nama properti = "SuppressAllComments" value = "true"/> </commentgenerator> <!-URL tautan database, nama pengguna, kata sandi-> <jdbcconnection driverclass = "com.mysql.jdbc.driver" connection = "jdbc: mysql: //" mock = "mysql:/" mysql:/"mysql:/" mysql:/"mysql:/" mysql:/"mySQL:/" mySQL:/"mySQL:/" mySQL:/"mySQL:/" MYSQL:/" Kata Sandi = "XDP"> <!-<jdbcconnection driverclass = "oracle.jdbc.driver.oracledRiver" connectionUrl = "jdbc: oracle: tipis: @localhost :: orcl" userid = "msa" kata sandi = "msa"> </jdbcconection> <pemudies "forcePorper =" MSA "> </jdbcconection> <pemudies" "MSA" Kata sandi = "MSA"> </jdbcconnection> </jdbconection> value = "false" /> < /javatyperesolver> <!- menghasilkan nama paket dan lokasi kelas entitas. Di sini kelas entitas yang dihasilkan ditempatkan di bawah paket Me.gacl.domain-> <javaModelgenerator targetPackage = "me.gacl.domain" targetProject = "c:/user/gacl/spring-mybatis/src/main/java"> <nama properti = "enableSUBPACKAGES" value = "" Nilai "" NAMA "" NAMA "" NAMA "" NOVE "NOVET" NAME/JAVA/JAVA = " </javamodelgenerator> <!- Nama paket file SQL MAP yang dihasilkan. Here, place the generated SQL map file under the package me.gacl.mapping--> <sqlMapGenerator targetPackage="me.gacl.mapping" targetProject="C:/Users/gacl/spring-mybatis/src/main/java"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!-- Generate the package Nama dan Lokasi DAO. Di sini, tempatkan kelas DAO yang dihasilkan di bawah paket ME.GACL.DAO-> <javaClientGenerator type = "xmlmapper" targetPackage = "me.gacl.dao" targetProject = "c:/user/gacl/spring-mybatis/src/main/java"> <name = "encable"> "values/src/main/java"> <name = ">" encable "/src/src/main/java"> <name = ">"> "encable"/src/Main/JAVA "> <NAME ="> ">"> "NAMA"> "MAVA"> <" </javaClientGenerator> <!-- To generate those tables (change tableName and domainObjectName) --> <table tableName="t_user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" /> </context> </GeneratorConfiguration>
Buka jendela baris perintah, beralih ke direktori root dari alat generator, dan jalankan perintah berikut:
java -jar mybatis -generator-core -.3.2.jar -configfile generator.xml -Overwrite
Seperti yang ditunjukkan pada gambar di bawah ini:
Baru saja, kami mengkonfigurasi kode pemetaan kode dan SQL yang dihasilkan di file generator.xml untuk memasukkan kode yang dihasilkan dan file pemetaan SQL ke dalam direktori "C:/USERS/GACL/Spring4-MyBATIS3/SRC/Main/Java". Direktori ini adalah direktori di mana proyek Spring4-Mybatis3 kami berada. Kami menyegarkan direktori SRC/Main/Java dan Anda dapat melihat kode yang dihasilkan dan file pemetaan, seperti yang ditunjukkan pada gambar di bawah ini:
Kode dan file pemetaan yang dihasilkan tidak perlu diubah dalam suatu baris, dan dapat langsung diterapkan ke proyek. Mari kita lihat kode dan pemetaan file yang dihasilkan oleh alat generator:
1. Kelas DAO yang dihasilkan
Paket Me.Gacl.DAO; impor me.gacl.domain.user; antarmuka publik usermapper {int deletebyprimarykey (string userid); INS INSERT (Catatan Pengguna); int insertSelective (catatan pengguna); Pengguna SelectByPrimaryKey (String UserId); Int UpdateByPrimaryKey (Catatan Pengguna); }Usermapper yang dihasilkan adalah antarmuka yang mendefinisikan beberapa metode untuk menambah, menghapus, memodifikasi, dan mencari tabel T_USER.
2. Kelas Entitas yang Dihasilkan
Paket Me.Gacl.Domain; impor java.util.date; pengguna kelas publik {private string userId; nama pengguna string pribadi; Tanggal pribadi userbirthday; Pengguna ganda pribadi; string publik getUserId () {return userId; } public void setUserId (String userId) {this.userid = userid == null? null: userid.trim (); } string publik getUserName () {return username; } public void setusername (string username) {this.userName = username == null? null: username.trim (); } tanggal publik getUserbIrthday () {return userbirthday; } public void setuserbirthday (tanggal userbirthday) {this.userbirthday = userbirthday; } public double getUsersalary () {return usersalary; } public void setUsersalary (double usersalary) {this.usersalary = Usersalary; }}Kelas pengguna adalah kelas entitas yang sesuai dari tabel T_USER. Atribut yang ditentukan dalam kelas pengguna sesuai dengan bidang dalam tabel T_USER satu per satu.
3. File Pemetaan SQL yang Diberi
<? Xml Version = "." encoding = "utf-"?> <! Doctype mapper public "-// mybatis.org//dtd mapper .//en" "http://mybatis.org/dtd/mybatis--mapper.dtd"> <Mapper namespace = "me.gacl.dao.dao.dtd"> <mapper namespace = "me.gacl.dao.dao.dao.dtd"> <mapper namespace = "me.gacl.dao.dao.da.da.da.usmapper" type = "me.gacl.domain.user"> <id column = "user_id" properti = "userid" jdbctype = "char" /> <column hasil = "user_name" properti = "username" jdbctype = "varchar" /> <hasil column = "user_birthday" properti = "UserBirTy" JDBCT "" date "date =" date "date" date "date" date "date" date = "jdbcray = Properti = "Usersalary" jdbctype = "double"/> </resultMap> <sql id = "base_column_list"> user_id, user_name, user_birthday, user_salary </sql> <pilih id = "selectByprimary" resultMap = "paramer" paramerping = "paramerpy." refid = "base_column_list"/> dari t_user di mana user_id = #{userid, jdbctype = char} </select> <delete id = "deletyprimarykey" parameTerType = "java.Lang.string"> hapus dari t_user di mana user_id = #{java.Lang.string "> hapus dari t_user di mana user_id = #{" java. " parameterType = "me.gacl.domain.user"> masukkan ke t_user (user_id, user_name, user_birthday, user_salary) values ( #{userid, jdbctype = char}, #{uername, jdbctype = varchar}, #{UserBirTheDDay #{UsersAlary, jdbctype = double}) </sert> <masukkan id = "masukkan" parameTerType = "me.gacl.domain.user"> masukkan ke dalam t_user <trim prefix = "(" suffix = ")" suffixoverrides = ","> <if test = "userid! = null"> ufixoverrides = "," if test = "Userid! = null"> ufixover = "ifer =" if test = "Userid! user_name, </if> <if test = "userbirthday! = null"> user_birthday, </if> <if test = "userAlary! = null"> user_salary, </if> </ trim> <trim prefix = "values (" suffix = ")" suffixoverrides = ","> <if test = "Userid =") "AffixOverrides =", "> <if est =" </if> <if test = "username! = null"> #{username, jdbctype = varchar}, </if> <if test = "userbirthday! = null"> #{userbirthday, jdbctype = date}, </if> <if test = "Usersalary! </sert> <update id = "updateByPrimaryKeyselective" parameTerType = "me.gacl.domain.user"> update t_user <set> <if test = "userName! = null"> user_name = #{UserBirth, jdbctype = varchar}, </if> <if test = "Userbirth, jdbctype = varchar}, </if> <if test =" Userbirth, jdbctype = varchar}, </if> <if test = "Userbirth, jdbtype = varchar}, </if> <if test =" Userbirth, jdbtype = varchar}, </if> <if test = "Userbirth, jdbtype = varchar"> #{UserBirthday, jdbctype = date}, </if> <if test = "UsersAlary! = null"> user_salary = #{UsersAlary, jdbctype = double}, </if> </set> di mana user_id = #{userid, jdbctype = char} </update> <poudate> {"Userid, jdbctype = char} </updleater> <poudate> 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> </mapper>Konten file usermapper.xml adalah untuk menulis pernyataan SQL yang mengoperasikan tabel T_USER. Mari kita fokus pada beberapa detail kecil yang perlu diperhatikan di konfigurasi usermapper.xml:
1. Namespace dari tag <mapper> dari usermapper.xml harus menjadi nama kelas lengkap dari antarmuka usermapper, yaitu, <mapper namespace = "me.gacl.dao.usermapper">
2. Usermapper.xml Definisi Nilai atribut ID dari basis data operasi harus konsisten dengan nama metode yang ditentukan oleh antarmuka usermapper, seperti yang ditunjukkan pada gambar di bawah ini:
Alasan untuk dua persyaratan di atas adalah bahwa MyBatis dapat secara otomatis mengimplementasikan metode yang relevan yang ditentukan dalam antarmuka Usermapper berdasarkan antarmuka Usermapper dan file Usermapper.xml, sehingga kami tidak perlu lagi menulis kode implementasi spesifik untuk antarmuka USermapper.
4. Integrasi Spring dan Mybatis
Pertama, kita perlu menambahkan paket JAR yang relevan yang kita butuhkan untuk proyek. Kita dapat pergi ke repositori pusat Maven: http://search.maven.org/ untuk menemukan paket toples yang relevan yang kita inginkan, seperti yang ditunjukkan pada gambar berikut:
Kami hanya perlu memasukkan nama paket JAR yang kami cari di kotak pencarian dan klik tombol [Cari] untuk menemukan paket JAR yang kami cari.
4.1. Tambahkan Paket Guci Terkait Spring dan Mybatis
1. Tambahkan spring-core, masukkan kata kunci spring-core untuk mencari, seperti yang ditunjukkan pada gambar di bawah ini:
Temukan informasi deskripsi ketergantungan tentang spring-core, seperti yang ditunjukkan pada gambar berikut:
Akan
<dependency> <GroupId> org.springframework </groupid> <ArTifactId> Spring-core </artifactid> <version> 4.1.4.release </version> </dependency>
Salin ke file pom.xml proyek sebagai berikut:
<Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http:/maven.romp.romp.romp. http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>me.gacl</groupId> <artifactId>spring4-mybatis3</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name> spring4-mybatis3 </name> <rerl> http://maven.apache.org </rerl> <dependencies> <!-tambahkan spring4.1.4 Paket inti-> <dependency> </org.springframework </groupid> <Arttifactid> <cruptence> </artrency> </groupid <artifactid> </art/art/art/versi </groupid> <crupter> </artfactid </art/art </dependencies> <build> <finalname> spring4-mybatis3 </finalname> </build> </project>
Dengan cara ini, Maven akan secara otomatis membantu kami mengunduh Paket JAR Spring-Core dari Repositori Pusat Maven ke repositori lokal kami, dan kemudian menambahkan paket JAR Spring-Core dan dependensi terkait ke proyek kami, seperti yang ditunjukkan di bawah ini:
Paket toples terkait yang diperlukan oleh Spring4.x dan mybatis3.x dapat dicari dalam metode di atas dan kemudian ditambahkan ke proyek. Setelah menambahkan paket toples terkait yang terkait dengan spring4.x dan mybatis3.x, konten file pom.xml akhirnya sebagai berikut:
<Project xmlns = "http://maven.apache.org/pom/ .." xmlns: xsi = "http://www.w.org//xmlschema-instance" xsi: schemalocation = "http://maven.apache.orgace/orgom/pomom/poM/pom/ .. http://maven.apache.org/maven-v__.xsd"> <modelVersion>..</modelVersion> <groupId>me.gacl</groupId> <artifactId>spring-mybatis</artifactId> <packaging>war</packaging> <version>.-SNAPSHOT</version> <name>spring-mybatis</name> <rerl> http://maven.apache.org </rerl> <dependencies> <!-Tambahkan paket spring-core-> <dependency> <groupid> org.springframework </groupId> <ArTifactid> Spring-core </arttifactid> <version> ... rilis </version> </dependency> <! <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>...RELEASE</version> </dependency> <!-- Add spring-tx package--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>...RELEASE</version> </dependency> <!-- Add spring-jdbc package--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>...RELEASE</version> </dependency> <!-- Add spring-jdbc package--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version> ... rilis </version> </dependency> <!-Untuk memfasilitasi pengujian unit, tambahkan paket test spring-> <dependency> <groupid> org.springframework </groupid> <Artifactid> Spring-test </artifactid> <version> </Versi </Versi </Dependency> <!-Tambah Paket Spring-WEB-> Versi </Versi </Versi </Dependency> <! <ArTifactId> Spring-Web </stifactid> <version> ... rilis </version> </dependency> <!-tambahkan paket aspekjweaver-> <dependency> <groupid> org.aspectj </groupid> <ArTifactId> aspekjweaver </arttifactid> <version> </Versi </Versi> </Dependency> <! <groupId> org.mybatis </groupId> <ArTifactId> mybatis </t Artifactid> <version> .. </version> </dependency> <!-tambahkan paket inti mybatis yang terintegrasi dengan Spring-> <dependency> <groupid> org.mybatis </groupid> <ArtiFAcid> Mybate-Mybatid .. Version--versies .. Version--Version </ArtiFAcid> <ArtiFAcD> <ArtiFAcD> <Artis-SRIPTICED .. MYTAFICID .. MYTAFICID .. MYTAFICID </ARTIFICID> <ArTIFACID> <!-Tambahkan Paket Servlet.Core-> <dependency> <GroupId> javax.servlet </proupid> <t Artifactid> javax.servlet-api </t Artifactid> <version> .. </version> </artif> <sependency> <groupid> javax.servlet.jspsid </groupid> <sortifact> <groupd> <version> ..- B </version> </dependency> <!-jstl-> <dependency> <groupid> javax.servlet </groupid> <ArTifactId> JSTL </artifactId> <version> </version> </dependency> <! <ArtifactId> mysql-connector-java </stifactid> <version> .. </version> </gandendency> <!-tambahkan paket kumpulan koneksi druid-> <dependency> <groupid> com.alibaba </groupid> <artifactid> druid </artifactid> <lion versi> </versi/versi </versi> </versi </versi/druid </artifactid> <liet> </versi/versi </versi> </versi> </versi> <groupid> JUnit </groupid> <ArTifactId> junit </artifactid> <version>. </version> <scope> test </seupop> </gandendency> </dependencies> <build> <finalname> Spring-Mybatis </finalname> </depsing> </Project>
4.2. Tulis file konfigurasi yang relevan
1. DBConfig.Properties
Buat file dbconfig.properties di direktori SRC/Main/Resources untuk menulis informasi yang relevan tentang menghubungkan ke database MySQL. Isi dbconfig.properties adalah sebagai berikut:
driverclassname = com.mysql.jdbc.drivervalidationQuery = SELECT 1JDBC_URL = JDBC: mysql: // localhost: 3306/spring4_mybatis3? UseUnicode = true & characterencoding = UTF-8 & ZerodateTimebehavior = converttonulljdbc_username = rootjdbc_password = xdp
2. Spring.xml (File Konfigurasi Kerangka Pegas)
Buat file spring.xml di direktori src/main/sumber daya. File Spring.xml adalah file konfigurasi inti yang ditulis untuk kerangka kerja Spring. Konten spring.xml adalah sebagai berikut:
<? XML Versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmls 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 "> <!-Memperkenalkan file properti dbconfig.properties-> <konteks: lokasi pemegang properti = "classpath: dbconfig.properties" /> <!-memperkenalkan dbconfig.properties file properti-> <Context: Properti-Place-Lokasi = "ClassPath: DBConfig.Properties" /> <! ME.GACL. Paket layanan dan semua kelas dijelaskan dengan anotasi @Service dari kelas-> <konteks: komponen-scan-package = "me.gacl.service" /> </tobe>
Konfigurasi file spring.xml kami sangat sederhana, hanya ada dua konfigurasi.
3. Spring-mybatis.xml (file konfigurasi terintegrasi dengan pegas dan mybatis)
Buat file spring-mybatis.xml di direktori src/main/sumber daya. File Spring-Mybatis.xml adalah file konfigurasi yang ditulis untuk integrasi kerangka kerja Spring dan MyBatis. Isi Spring-Mybatis.xml adalah sebagai berikut:
<? XML Versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmls xmlns: tx = "http://www.springframework.org/schema/tx" xmlns: aop = "http://www.springframework.org/schema/aop" xsi: schemalocation = "http:/schema http://www.springframework.org/schema/beans/spring-weans-3.0.xsd http://www.springframework.org/schema/tx http://www.spramework.org/schema/tx:tx:-3. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop http://www.springfringework.org/schema/aop/spring-aop-3.0.xsd " id = "DataSource"> <properti name = "jndiname" value = "$ {jndiname}"> </propert> </tean>-> <!- ============================================================== ============================================================== ============================================================== ================================================================ ============================================================== ================================================================ ============================================================== ================================================================ name = "nama pengguna" value = "$ {jdbc_username}" /> <name properti = "kata sandi" value = "$ {jdbc_password}" /> <!-inisialisasi ukuran koneksi-> <nama properti =-name pool "name =" 0 " Koneksi Gratis-> <nama properti = "maxidle" value = "20" /> <!-Jumlah minimum koneksi gratis-> <nama properti = "minidle" value = "0" /> <!-Dapatkan waktu tunggu maksimum untuk koneksi-> <nama properti = "maxwait" value = "60000" /<!-<nama properti = "pool propertaPared. name = "maxPoolPreparedStatementPerConnectionSize" value = "33" / -> <name properti = "validationquery" value = "$ {validationQuery}" /> <name properti = "testonborrow" value = "false" /<name = "testonborrow" value = "false" /<name properte = "false" false = "testonborrow" value = "false" /<property name = "false" /false = "false" value "value" false "false" /<a name = "false" false = "false" false "value" false "false" false "false" false "false" false "false" false " value = "true" /> <!-Mengkonfigurasi berapa lama untuk melakukan interval deteksi untuk mendeteksi koneksi idle yang perlu ditutup, dalam milidetik-> <nama properti = "timebetweeneVictionRunsmillis" value = "60000" /> <!-Konfigurasi waktu minimum untuk koneksi untuk bertahan hidup di kumpulan, di millisec-"MINEVOUM-" MINEVOUBLEICTERICE- " value = "25200000" /> <!-Nyalakan fungsi yang dilepas-> <nama properti = "removeAbandoned" value = "true" /> <!-1800 detik, yaitu, 30 menit-> <nama properti = "RemoveAbandonTimeOut" value = "1800" /<!-output kesalahan logam ketika tutup peperdon ("Nilai =" Nilai = "1800" /> <! <!-Database Pemantauan-> <!-<name properti = "filter" value = "stat" />-> <name properti = "filter" value = "grestat" /> </ bean> <!- ======================================================================================================================================================= ====================================================================================================================================================================== ====================================================================================================================================================================== ====================================================================================================================================================================== ================================================================== =================================================================== =================================================================== =================================================================== =================================================================== =================================================================== =================================================================== =================================================================== Simpan nilai konfigurasi manual = "ClassPath: Me/GACL/Mapping/*. XML" di Configuration.xml mengacu pada semua file XML di paket ME.GACL. value = "classpath: me/gacl/pemetaan/*. xml"/> </ bean> <!-pemindai konfigurasi-> <bean> <!-pindai paket me.gacl.dao dan semua kelas pemetaan di bawah subpakimnya-> <nama properti = "BasEpackage" value = "Me.gacl.daoKory-nya-> <Property nama" value = "Me.gacl.daoxory" a name = "value =" Me.gacl.daoxory "a name =" value = "Me.gacl.daoFeAnpory-> <" name = "value =" Me.gacl.daoNF " value = "sqlSessionFactory" /> </ bean> <!- ============================================================== ============================================================== ============================================================== ============================================================== ============================================================== ============================================================== ============================================================== ================================================================ Transaction-manager = "TransactionManager" />-> <!-Konfigurasi Interceptor-> <tx: nasihat id = "transactionadvice" transaction-manager = "transactionManager"> <tx: atribut> <tx: nama metode = "add*" propagasi = "wajib" /<tx: nama metode = "append*" "propagasi =" wajib " /<tx: Metode nama =" "" "" "" "TX:" TX: "TX:" TX: "TAMBAH" "TAMBAH" = "TX:" TX: "TAMPUR" ADD "TAMPAGAS =" propagation="REQUIRED" /> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="modify*" propagation="REQUIRED" /> <tx:method name="edit*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="remove*" propagation="REQUIRED" /> <tx:method name="repair" propagation="REQUIRED" /> <tx:method name="delAndRepair" propagation="REQUIRED" /> <tx:method name="delAndRepair" propagation="REQUIRED" /> <tx:method name="get*" propagation="SUPPORTS" /> <tx:method name="find*" propagasi = "mendukung" /> <tx: nama metode = "muat*" propagasi = "mendukung" /> <tx: nama metode = "pencarian*" propagasi = "dukungan" /> <tx: nama metode = "datagrid*" propagation = "dukungan" /> <TX: Metode Nama Metode = "*" Propagasi "" </tx: Atribut> </tx: Saran> <aop: config> <aop: pointcut id = "transactionpointcut" ekspresi = "eksekusi (*me.gacl.service ..*IMPS.*(..))"/> <AOP: penasihat pointcut = "transactioncut" adve-ref = "nasihat:" Transaction ", Transaction, jdbc-> <bean id = "druid-stat-interceptor"> </tact> <bean id = "druid-stat-pointcut" scope = "prototipe"> <name properti = "pola"> <cist> <value> me.gacl.service.*</value> </list> </list> </bean> aop: a: a: a: a: a: a: a: a: a: a: a: a: a: a: a: a: a: a: a: a: a: a: a: a: a: a: a: a. Saran-REF = "Druid-stat-interceptor" pointcut-ref = "druid-stat-pointcut"/> </aop: config> </beans>Pada titik ini, file konfigurasi yang relevan telah ditulis, seperti yang ditunjukkan pada gambar di bawah ini:
4.3. Melakukan tes unit
Setelah dua langkah di atas, integrasi Spring 4 dan MyBATIS3 telah selesai. Tugas selanjutnya yang perlu kita lakukan adalah melakukan pengujian unit untuk menguji apakah integrasi Spring4 dan MyBATIS3 berhasil.
1. Buat paket layanan Me.GACL. Di direktori SRC/Main/Java, dan kemudian buat antarmuka UserserviceI di paket ME.GACL.Service, seperti yang ditunjukkan di bawah ini:
Paket Me.Gacl.Service; impor me.gacl.domain.user; Public Interface UserServiceI { / *** Tambahkan pengguna* @param user* / void addUser (pengguna pengguna); / ** * Dapatkan pengguna berdasarkan ID pengguna * @param userid * @return */ user getUserbyId (string userId); }2. Buat paket Me.GacL.Service.Impl di direktori SRC/Main/Java, dan kemudian buat kelas implementasi untuk antarmuka UserserviceI di paket ME.GACL.SERVICE.IMPL: UserserViceImpl, seperti yang ditunjukkan di bawah ini:
Paket Me.Gacl.Service.impl; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.stereotype.service; impor me.gacl.dao.usermapper; impor me.gacl.domain.user; impor me.gacl.service.userservicei; /** * @Author GACL * Gunakan anotasi @Service untuk memberi anotasi kelas UserserviceImpl sebagai layanan * ID layanan adalah Userservice */@service ("Userservice") Kelas Publik UserServiceImpl mengimplementasikan UserServeri {/** * Ontuals @Autowired Annotation untuk menganugerahkan variabel US USERIMPRICE {/** * @Autowired Private Usermapper Usermapper; // menyuntikkan DAO @Override public void addUser (pengguna pengguna) {usermapper.insert (pengguna); } @Override pengguna publik getUserbyId (string userId) {return usermapper.selectByprimarykey (userId); }}Dua kelas yang dibuat adalah sebagai berikut:
3. Kodenya adalah sebagai berikut:
Paket Me.Gacl.Test; impor java.util.date; impor java.util.uuid; impor me.gacl.domain.user; impor me.gacl.service.userservicei; // impor me.gacl.service.userservicei; Impor org.junit. Before; impor org.junit.test; impor org.springframework.context.applicationContext; impor org.springframework.context.support.classpathxmlapplicationContext; kelas publik mybatistest {private userserverServiceSerService; /*** Metode sebelum ini dieksekusi sebelum semua metode pengujian dan hanya dieksekusi sekali* semua inisialisasi bekerja selama pengujian unit junit dapat dilakukan dalam metode ini* misalnya, menginisialisasi ApplicationContext dan UserService dalam metode sebelumnya*/@before public batal sebelum () {// Buat konteks pegas menggunakan dua file konfigurasi "spring.xml" springmlat "springmlat. ClasspathxmlapplicationContext (string baru [] {"spring.xml", "spring-mybatis.xml"}); // Ambil objek Userservice yang ingin kami gunakan berdasarkan ID Bean dari Spring Container Userservice = (UserserService) ac.getBean ("Userservice"); } @Test public void testAddUser () {// ApplicationContext ac = new classpathxMlappleCicedContext (string baru [] {"spring.xml", "spring-mybatis.xml"}); // UserserService UserService = (UserserviceI) ac.getBean ("Userservice"); Pengguna pengguna = pengguna baru (); user.setUserId (uuid.randomuuid (). tostring (). Replaceall ("-", "")); user.setusername ("White Tiger God Emperor XDP"); user.setuserbirthday (tanggal baru ()); user.setusersalary (D); Userservice.adduser (pengguna); }}Saat menjalankan kode uji unit, kesalahan berikut akan dilaporkan:
Pesan kesalahannya adalah bahwa kelas "me.gacl.test.mybatistest" tidak ditemukan, karena kami tidak menggunakan Maven untuk mengkompilasi kelas dalam proyek.
Selanjutnya, kami menggunakan Maven untuk mengkompilasi proyek, pilih file pom.xml proyek → 【debug sebagai】 → 【install maven】, seperti yang ditunjukkan di bawah ini:
Hasil kompilasi adalah sebagai berikut:
Di sini saya akan berbicara tentang masalah yang saya temui setelah menjalankan pemasangan Maven. Ketika saya pertama kali mengeksekusi perintah pemasangan maven, saya melihat kesalahan berantakan berikut:
Kemudian saya menghapus proyek, mengimpor kembali proyek, dan kemudian mengeksekusi operasi proyek bersih, seperti yang ditunjukkan pada gambar berikut:
Saya dapat mengkompilasi dan meneruskannya secara normal setelah menjalankan operasi pemasangan Maven, yang membuat saya tertekan untuk waktu yang lama. Ini seharusnya bukan alasan untuk konfigurasi proyek saya, tetapi alasan Maven. Saya tidak tahu mengapa ini masalahnya. Bagaimanapun, ini solusi. Jika Anda menghadapi situasi di mana operasi pemasangan Maven tidak dapat dikompilasi secara normal: Anda dapat mencoba menggunakan tiga langkah: Maven Clean → Clean Project → Maven Instal untuk menyelesaikan masalah.
Selain pengujian unit dengan JUnit biasa, kami juga dapat menggunakan kerangka kerja pengujian JUnit yang disediakan oleh Spring untuk pengujian unit, dan membuat kelas myBatistestByspringTestFramework baru di bawah me.gacl.test, dengan kode sebagai berikut:
Paket Me.Gacl.Test; impor java.util.date; impor java.util.uuid; impor me.gacl.domain.user; impor me.gacl.service.userservicei; impor org.junit.test; impor org.junit.runner.runwith; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.test.context.contextConfiguration; impor org.springframework.test.context.junit.springjunitclassrunner; @Runwith (springjunitclassrunner.class) // Setelah anotasi @contextConfiguration dikonfigurasi dan atribut lokasi dari anotasi ditentukan dengan file spring dan konfigurasi, @contextConfiguration (locations = {"classpath: spring.xml", "classpath: spring-mybatis (spring-mybatis (classlat (classpath (spring-mybatis (spring-mybatis (spring mymlatis (classpath") classpath: spring-mybatis (spring-mymlatis (classpath ") public") classpath: spring-mybatis) Mybatistestbyspringtestframework {// inject userervice @autowired private userservice UserserService; @Test public void testAddUser () {user user = new user (); user.setUserId (uuid.randomuuid (). tostring (). Replaceall ("-", "")); user.setusername ("xdp_gacl_white Tiger God Emperor"); user.setuserbirthday (tanggal baru ()); user.setusersalary (D); Userservice.adduser (pengguna); } @Test public void testGetUserById () {string userid = "fbcebfdada"; Pengguna pengguna = UsserService.getUserById (UserId); System.out.println (user.getusername ()); }}Lakukan dua metode tes ini dan lulus tes normal, seperti yang ditunjukkan di bawah ini:
Pada titik ini, bahkan jika semua tes integrasi kerangka kerja kami telah dilewati, integrasi telah berhasil.
4.4. Test in web server
1、编辑web.xml文件,添加spring监听器配置项,内容如下:
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.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> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <listener> <description>Spring监听器</description> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- ContextLoaderListener初始化Spring上下文时需要使用到的contextConfigLocation参数--> <context-param> <param-name>contextConfigLocation</param-name> <!-- 配置spring.xml和spring-mybatis.xml这两个配置文件的位置,固定写法--> <param-value>classpath:spring.xml,classpath:spring-mybatis.xml</param-value> </context-param></web-app>
2、在UserMapper接口中添加一个获取所有用户信息的getAllUser()方法,如下所示:
package me.gacl.dao; impor 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; impor 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; impor 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; impor 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这三个步骤去解决问题