1. Aufbau einer Entwicklungsumgebung
1.1. Erstellen Sie ein Webprojekt mit Maven
Führen Sie den folgenden Befehl aus:
Kopieren Sie den Code wie folgt: MVN -Archetyp: erstellen -dgroupid = me.gacl -dartifactid = Spring4 -mybatis3 -darchetypeartifactid = maven -archetype -webapp -dinteractivemode = false
Wie in der Abbildung unten gezeigt:
Das erstellte Projekt lautet wie folgt:
Bearbeiten Sie die Datei pom.xml
<project xmlns = "http://maven.apache.org/pom/ .." xmlns: xsi = "http://www.w.org//xmlschema-instance" xsi: schenalocation 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> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>..</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>spring-mybatis</finalName> </build> </project>
Ändern Sie den Abschnitt <Name> Spring4-Mybatis3 Maven WebApp </name> und entfernen Sie die Inhalte, die Räume in der "Maven WebApp" enthalten. Andernfalls treten bei Maven das Projekt auf, einige unerklärliche Fehler aufgrund von Leerzeichen und ändern sie an: <Name> Spring4-mybatis3 </name> .
Löschen Sie auch Folgendes:
<De vorhöhe> <gruppe> junit </GroupId> <artifactId> junit </artifactId> <version> .. </Version> <Schope> Test </scope> </abhängig>
Dieser Teil ist die JAR -Paketabhängigkeitsinformationen von JUNIT. Diese Version ist zu niedrig. Wir verwenden diese JUNIT -Testversion nicht. Der modifizierte Inhalt von pom.xml lautet wie folgt:
<project xmlns = "http://maven.apache.org/pom/ .." xmlns: xsi = "http://www.w.org//xmlschema-instance" xsi: schenalocation http://maven.apache.org/maven-v__.xsd "> <modelVersion> .. </modelversion> <gruppe> me.gacl </gruppenintersion> <artifactId> Spring-mybatis </artifactId> </packaging> </packaging> <version>. <URL> http://maven.apache.org </url> <depeopcies> </abhängigen> <builds> <finanzname> Spring-mybatis </finalName> </build> </project>
1.2. Importieren Sie das erstellte Projekt in MyeClipse
Die spezifischen Betriebsschritte sind in der folgenden Abbildung dargestellt:
Erstellen Sie manuell drei Quellordner: [SRC/Main/Java], [SRC/Test/Ressourcen] und [SRC/Test/Java], wie in der folgenden Abbildung gezeigt:
Zu diesem Zeitpunkt wurden alle Projektbaus abgeschlossen.
2. Erstellen Sie Datenbanken und Tabellen (für MySQL)
Das SQL -Skript lautet wie folgt:
Datenbank erstellen Spring4_Mybatis3; Verwenden Sie Spring4_Mybatis3; Droptabelle, wenn existiert T_USER; TABLE T_USER (user_id char (32) nicht null, user_name varchar (30) Standardnull, user_birthday Datum Default Null, user_salary doppelungsversandnull, utfault null null, primär (user_id)).
Die erstellte Datenbank und Tabelle lautet wie folgt:
3. Verwenden Sie das Generator -Tool, um Code zu generieren
Ich habe ein Generator -Tool online gefunden, mit dem Entitätsklassen, SQL -Zuordnungsdateien und DAOs basierend auf der erstellten Datenbanktabelle entsprechend der Tabelle myBatis generiert werden können und die Datei für Generator.xml im Stammverzeichnis des Generator -Tools ermittelt haben. Diese Datei wird verwendet, um Code -Erzeugungsregeln zu konfigurieren, wie in der folgenden Abbildung gezeigt:
Bearbeiten Sie die Datei von Generator.xml, der Inhalt lautet wie folgt:
<? xml Version = ".". coding = "utf-"?> <! docType GeneratorConfiguration public "-// mybatis.org//dtd mybatis generator Konfiguration .//en" http://mybatis.org/dtd/mybatis-Generator-Dreiber-Paket-Paket-> <generatorung-> <generators-> <generators> <generators-> <Gerators-<generators-> <generators> <! location="E:/repository/mysql/mysql-connector-java/../mysql-connector-java-...jar" /> <!-- <classPathEntry location="C:/oracle/product/../db_/jdbc/lib/ojdbc.jar" />--> <context id="DBTables" targetRuntime="MyBatis"> <commentGenerator> <property name="suppressAllComments" value="true" /> </commentGenerator> <!-- Database Link URL, Username, Password--> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:/spring_mybatis" userId="root" password = "xdp"> <!-<jdbcconnection driverClass = "oracle.jdbc.driver.oracledriver" Connectionurl = "Jdbc: Oracle: Thin: @LocalHost :: orcl" userId = "msa" kennwort = "msa">-> </jdbcconnection> <JavatyPeresolver>-</jdbcconnection> <JavatyPeresolver>-</jdbcconnection> <JavatyPeresolver>-</jdbcconnection> <JavatyPeresolver>-</jdbcconnection> <JavatyPeresolver>-</jdbcconnection> <JavatyPeresolver>-</jdbcconnection> <javatyperesolvers value = "false" /> < /javatyperesolver> <!- Generieren Sie den Paketnamen und den Ort der Entitätsklasse. Hier wird die generierte Entitätsklasse unter das Paket me.gaCl.domain-> <JavamodelGenerator targetPackage = "me.gaCl.domain" targetProject = "C:/Benutzer/gaCl/Spring-mybatis/src/main/java"> <Eigensteuername = "truings," truings "/" truings "/" truings "/" truings "/" truings "/" truings "/" truings "/" truings "/" truings "/" truing = "/" truing = "/" truing = "/" truing "/" truing = "gestellt. </javamodelGenerator> <!- Der generierte SQL-Kartendateipaket Name und Speicherort. Platzieren Sie hier die generierte SQL-Kartendatei unter das Paket me.gacl.mapping-> <SQLMapgenerator targetPackage = "me.gacl.mapping" targetProject = "c:/user/gaCl/Spring-mybatis/src/main/java"> <-ideensubpackages "! Der Paketname und der Ort des DAO. Platzieren Sie hier die generierte DAO-Klasse unter das Paket me.gacl.dao-> <JavaClientGenerator type = "xmlmapper" targetPackage = "me.gaCl.dao" targetProject = "c:/user/gaCl/Spring-mybatis/src/main/java"> <Stiefname = "ENGABLE". < /JavaClientGenerator> <!-Um diese Tabellen zu generieren (TableName und DomainObjectName)-> <table tableName = "t_user" DomainObjectName = "Benutzer" EnableCountByExample = "False" EnableUpDateByExample = "falseyExample /falseyExample" -Elable "-Elable" -Elable "-Elable" -Elable "-Elable" -Elable "-Elable" -Elable "-Elable" -Elable ". </context> </generatorConfiguration>
Öffnen Sie das Befehlszeilenfenster, wechseln Sie zum Root -Verzeichnis des Generator -Tools und führen Sie den folgenden Befehl aus:
Java -Jar Mybatis -Generator -Core -1.3.2.jar -configfile Generator.xml -overwrite
Wie in der Abbildung unten gezeigt:
Gerade jetzt haben wir die generierte Code- und SQL-Mapping-Datei in der Datei von Generator.xml konfiguriert, um den generierten Code und die SQL-Zuordnungsdatei in das Verzeichnis "C:/user/gaCl/Spring4-mybatis3/src/main/java" einzulegen. Dieses Verzeichnis ist das Verzeichnis, in dem sich unser Spring4-Mybatis3-Projekt befindet. Wir aktualisieren das Verzeichnis SRC/Main/Java und Sie können die generierte Code- und Zuordnungsdatei sehen, wie in der folgenden Abbildung gezeigt:
Die generierte Code- und Zuordnungsdatei muss in einer Zeile nicht geändert werden und kann direkt auf das Projekt angewendet werden. Schauen wir uns den vom Generator -Tool generierten Code und Zuordnungsdateien an:
1. DAO -Klasse erzeugt
Paket me.gacl.dao; importiere me.gacl.domain.user; public interface usermapper {int deleteByprimaryKey (String userID); Int Insert (Benutzerdatensatz); INT InsertSeLective (Benutzerdatensatz); Benutzer auswählen ByprimaryKey (String userID); int updateByprimaryKey (Benutzerdatensatz); }Der generierte UsMapper ist eine Schnittstelle, die einige Methoden zum Hinzufügen, Löschen, Ändern und Durchsuchen der T_USER -Tabelle definiert.
2. Die erzeugte Entitätsklasse
Paket me.gacl.domain; import Java.util.date; public class user {private String userID; privater String -Benutzername; private Datum UserBirthday; private doppelte Nutzer; public String getUserid () {userID zurückgeben; } public void setUerId (String userID) {this.userid = userId == null? null: userId.trim (); } public String getUnername () {return userername; } public void setUnername (String -Benutzername) {this.username = userername == null? null: userername.trim (); } public date getUserBirthday () {userBirthday zurückgeben; } public void setUserBirthday (Datum UserBirthday) {this.userBirthday = userBirthday; } public double getuSerSalary () {return userSalary; } public void setUserSalary (doppelte Benutzeralary) {this.userSalary = Benutzeralary; }}Die Benutzerklasse ist die entsprechende Entitätsklasse der T_USER -Tabelle. Die in der Benutzerklasse definierten Attribute entsprechen den Feldern in der T_USER -Tabelle eins nach dem anderen.
A. Erzeugte SQL -Zuordnungsdatei
<? xml Version = ".". coding = "utf-"?> <! docType mapper public "-// mybatis.org//dtd mapper ./en" "http://mybatis.org/dtd/mybatis--mapper.dtd"> <mapper namenspace- 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> <einfügen id = "parameterType =" me.gacl.domain.user "> in t_user (user_id, user_name, user_birthday, user_salary) vales ( #{userid, jdbctype = char}, # #{username, {{userId, jdbctype = char}, #{{username, {{userAn, {{userAn, {{userid, jdbctype =), # #{username, Jdbctype = char}}, #{{{{username, {{{userame, {{userid, jdbctype =), | #{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 = "userername! test = "userId! test = "userSalary! #{Benutzername, jdbctype = varchar}, </if> <if test = "userBirthday! </set> wobei user_id = #{userId, jdbctype = char} </update> <update id = "updbyprimaryKey" parameterType = "me.gacl.domain.user"> aktualisieren t_user set user_name = {username, jdbctype = varchar}, user_name = user_birtday = #{userBirthday, jdbcType = date}, user_salary = #{userSalary, jdbctype = double} wobei user_id = #{userId, jdbctype = char} </update> </mapper>Der Inhalt der Datei userMapper.xml besteht darin, SQL -Anweisungen zu schreiben, die die T_USER -Tabelle betreiben. Konzentrieren wir uns auf einige kleine Details, auf die in der Konfiguration usermapper.xml geachtet werden muss:
1. Der Namespace des <kunger> -Tags von usermapper.xml muss der vollständige Klassenname der UsMapper -Schnittstelle sein, dh <mapper namespace = "me.gacl.dao.usermapper">
2. usermapper.xml Definition Der Wert des ID -Attributs der Betriebsdatenbank muss mit dem von der UsMapper -Schnittstelle definierten Methodennamen übereinstimmen, wie in der folgenden Abbildung gezeigt:
Der Grund für die beiden oben genannten Anforderungen ist, dass MyBatis die in der UsMapper -Schnittstelle definierten relevanten Methoden basierend auf der UsMapper -Schnittstelle und der Datei userMapper.xml automatisch implementieren kann, sodass wir keinen spezifischen Implementierungscode mehr für die UsMaper -Schnittstelle mehr schreiben müssen.
4. Integration von Frühling und MyBatis
Zunächst müssen wir die relevanten JAR -Pakete hinzufügen, die wir zum Projekt benötigen. Wir können zu Mavens zentralem Repository gehen: http://search.maven.org/, um die gewünschten entsprechenden JAR -Pakete zu finden, wie in der folgenden Abbildung gezeigt:
Wir müssen nur den Namen des JAR -Pakets eingeben, nach dem wir im Suchfeld suchen, und klicken Sie auf die Schaltfläche [Suche], um das von uns gesuchte JAR -Paket zu finden.
4.1. Fügen Sie Frühlings- und MyBatis -verwandte JAR -Pakete hinzu
1. Fügen Sie Spring-Core hinzu, geben Sie das Federkernschlüsselwort ein, um zu suchen, wie in der folgenden Abbildung gezeigt:
Suchen Sie die Informationen zur Abhängigkeitsbeschreibung über Spring-Core, wie in der folgenden Abbildung gezeigt:
Wille
<Depopentcy> <gruppe> org.springFramework </Groupid> <artifactId> Spring-Core </artifactid> <version> 4.1.4.Release </Version> </abhängig>
Kopieren Sie in die POM.xml -Datei des Projekts wie folgt:
<project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance 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> <url>http://maven.apache.org</url> <dependencies> <!-- Add Spring4.1.4 Core Package--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.4.RELEASE</version> </dependency> </abhängigen> <build> <finanzname> Spring4-mybatis3 </finalName> </build> </project>
Auf diese Weise hilft uns Maven automatisch beim Herunterladen des Spring-Core-JAR-Pakets von Mavens zentralem Repository in unser lokales Repository und füge dann das Spring-Core-JAR-Paket und seine zugehörigen Abhängigkeiten zu unserem Projekt hinzu, wie unten gezeigt:
Die zugehörigen JAR -Pakete, die von Spring4.x und MyBatis3.x benötigt werden, können in der obigen Methode durchsucht und dann dem Projekt hinzugefügt werden. Nach dem Hinzufügen der zugehörigen JAR -Pakete im Zusammenhang mit Spring4.x und mybatis3.x ist der Inhalt der Datei pom.xml endgültig wie folgt:
<project xmlns = "http://maven.apache.org/pom/ .." xmlns: xsi = "http://www.w.org//xmlschema-instance" xsi: schenalocation http://maven.apache.org/maven-v__.xsd "> <modelVersion> .. </modelversion> <gruppe> me.gacl </gruppenintersion> <artifactId> Spring-mybatis </artifactId> </packaging> </packaging> <version>. <URL> http://maven.apache.org </url> <Deponcies> <!-Spring-Core-Paket hinzufügen-> <depeopcy> <GroupID> org.springFramework </Groupid> <artifactID> Spring-Core </tealifactID> <Version> ... Release </Version> </abhängig> </abhängig> <! <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> ... Release </Version> </abhängig> <!-Erleichterung von Unit-Tests, fügen Sie das Spring-Test-Paket hinzu-> <De vorangetrieben> <gruppe> org.springframework </GroupID> <artifactID> Spring-Test </artifactid> <version> ... Release </Version> </abhängig> <! <artifactId>spring-web</artifactId> <version>...RELEASE</version> </dependency> <!--Add aspectjweaver package --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>..</version> </dependency> <!-- Add mybatis core package --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>..</version> </dependency> <!-- Add mybatis core packages integrated with Spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>..</version> </dependency> <!-- Add servlet.core package --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>..</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp</artifactId> <version> ..- B </Version> </abhängig> <!-JSTL-> <De vorstellen> <gruppe> javax.servlet </Groupid> <artifactID> JSTL </artifactID> <version>. <artifactId> mysql-connector-java </artifactId> <version> .. </Version> </abhängig> <!-Druid Connection Pool-Paket-> <Deponcy> <gruppe> com.alibaba </gruppaId> <artifactid> druid </artifactId> <version> </Version> </fusion> </vl. <gruppeId> junit </Groupid> <artifactId> junit </artifactId> <version>. </Version> <Schops> Test </scope> </abhängig> </abhängig> <builds> <ElgaleName> Spring-mybatis </endgültigName> </build> </project> </project>
4.2. Schreiben Sie relevante Konfigurationsdateien
1. DBCONfig.Properties
Erstellen Sie eine dbconfig.Properties -Datei im Verzeichnis SRC/Main/Ressourcen, um relevante Informationen zur Verbindung zur MySQL -Datenbank zu schreiben. Der Inhalt von dbconfig.Properties lautet wie folgt:
DriverClassName = com.mysql.jdbc.drivervalidationQuery = select 1JDBC_URL = JDBC: MySQL: // localhost: 3306/spring4_mybatis3? UseUnicode = true & charakterencodierung = utf-8 & zerodatetimebehavior = convertonulljdbc_username = rootjdbc_password = xdp
2. Spring.xml (Konfigurationsdatei des Spring Framework)
Erstellen Sie im Verzeichnis SRC/Main/Ressourcen eine fRINDE.XML -Datei. Die Datei spring.xml ist die für das Spring Framework geschriebene Kernkonfigurationsdatei. Der Inhalt von Spring.xml lautet wie folgt:
<? 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 Eigenschaftsdatei vorstellen-> <Context: Property-Placeholder Standort = "ClassPath: Dbconfig.Properties" /> <!-DBCONFIG.PROPERSE-DATEI-> <CONTEXT: Property-Place-Standort = "Classpath: dbconefig. Paket und alle Klassen, die mit @Service-Annotation der Klasse kommentiert werden-> <Kontext: Komponenten-scan-Basis-Package = "me.gacl.service" /> < /beans>
Die Konfiguration unserer Spring.xml -Datei ist sehr einfach, es gibt nur zwei Konfigurationen.
3.. Spring-Mybatis.xml (Konfigurationsdatei integriert in Spring und MyBatis)
Erstellen Sie im Verzeichnis SRC/Main/Ressourcen eine Spring-Mybatis.xml-Datei. Die Spring-Mybatis.xml-Datei ist eine Konfigurationsdatei für die Integration von Spring Framework und MyBatis Framework. Der Inhalt von Spring-Mybatis.xml lautet wie folgt:
<? xmlns: tx = "http://www.springframework.org/schema/tx" xmlns: aop = "http://www.spingframework.org/schema/aop" xsi: schemalocation = "http://wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww.Stramework." http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springFramework.org/schema/tx http://www.springframe.g/schema/tx/sping-tx- http://www.springframework.org/schema/aop http://www.springFramework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd "> <! id = "dataSource"> <Eigenschaft name = "jndiname" value = "$ {jndiname}"> </property> </bean>-> <!--! =======================================================ieben =======================================================ieben =======================================================ieben ================================================================= =======================================================ieben ================================================================= =======================================================ieben ================================================================= name = "userername" value = "$ {jdbc_username}" /> <Eigenschaft name = "password" value = "$ {jdbc_password}" /> <!-initialisieren Sie die Verbindungsgröße-> <Eigenschaft Name "InitialSize" "value =" 0 " /> <!-Maximum-Nr. Free-> <Eigenschaft name = "maxidle" value = "20" /> <!-Mindestanzahl von Verbindungen kostenlos-> <Eigenschaft name = "minidle" value = "0" /> <!-Erhalten Sie die maximale Wartezeit für Verbindungen-> <Property name = "maxwait" value = "60000" /> <! name = "maxpoolpreparedStatementPerConnectionSize" value = "33" /> -> <Eigenschaft name = "validationQuery" value = "$ {validationQuery}" /> <Eigenschaft name = "testonborrow" value = "false" /> <Property name = "testonborrow". value="true" /> <!-- Configure how long it takes to perform a detection interval to detect the idle connection that needs to be closed, in milliseconds --> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <!-- Configure the minimum time for a connection to survive in the pool, in milliseconds --> <property name="minEvictableIdleTimeMillis" value = "25200000" /> <!-Einschalten removeaBandoned function-> <Eigenschaft name = "removeaBandoned" value = "true" /> <!-1800 Sekunden, das heißt 30 Minuten-> <Eigenschaftsname = "RemoveaBandOnedTimeOut" value = "1800" /> <!-Ausgabebraute, wenn der abgeschlossene Anbieter der Verlassene die Verlassene der Abschlussverbindung abschließt. Datenbank-> <!-<Eigenschaft name = "filter" value = "stat" />-> <Eigenschaft name = "filter" value = "mergestat" /> < /bean> <! ==========================================================ieben ==================================================================ieben ==================================================================ieben ==================================================================ieben =================================================================== ====================================================================== ====================================================================== ====================================================================== ====================================================================== ====================================================================== ====================================================================== ====================================================================== Speichern Sie den manuellen Konfigurationswert = "ClassPath: me/gaCl/mapping/*. Xml" in configuration.xml bezieht sich auf alle XML -Dateien in me.gacl.mapping Paket unter classpatpath (classPath) im usermapper.xml befindet sich unter dem ME.Gacl.maping Package, sodass usermapper. value = "classPath: me/gaCl/mapping/*. xml"/> </bean> <!-Konfigurationsscanner-> <bean> <!-scannen Sie das Paket me.gacl.dao und alle Mapping-Schnittstellenklassen unter dem Subpackage-> <Property name = "basepackage" value = "me.gacl.dao"/> < value = "sqlSessionFactory" /> < /bean> <!-- =======================================================ieben =======================================================ieben =======================================================ieben =======================================================ieben =======================================================ieben =======================================================ieben =======================================================ieben ================================================================= transaction-manager="transactionManager" /> --> <!-- Interceptor configuration --> <tx:advice id="transactionAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="append*" propagation="REQUIRED" /> <tx:method name="insert*" Propagation = "Erforderlich" /> <tx: method name = "savagation*" propagation = "Erforderlich" /> <tx: method name = "update*" Propagation = "Erforderlich" /> <tx: method name = "modify*" Propagation = "Erforderlich" /> <tx: method name = "propagation name = "entfernen*" propagation = "Erforderlich" /> <tx: method name = "reparieren" propagation = "Erforderlich" /> <tx: method name = "delandrepair" Propagation = "Erforderlich" /> <tx: method name = "delandrepair" propagation = "fordert" /> <tx: method name = "propagation Propagation = "Unterstützt" /> <tx: Method name = "load*" propagation = "unterstützt" /> <tx: method name = "such*" Propagation = "unterstützt" /> <tx: method name = "datagrid*" Propagation = "Supports" /> <Tx: Method name = "*" Propagation = "Supports" /<tx: "<Tx:" <Tx: "<Tx:" <Tx: "<Tx:" <Tx: "<Tx:" <Tx: "<Tx:" <Tx: "<Tx:" <Tx: "<Tx:" <Tx: "<Tx:" <Tx: "<Tx:" <Tx: "<Tx:" <Tx: "<Tx:" <Tx: "<Tx:"; </tx: Attribute> </tx: Ratschläge> <AOP: config> <AOP: pointcut id = "transactionPointCut" Expression = "Ausführung (*me.gaCl.Service ..*impl. jdbc-> <bean id = "druid-stat-interceptor"> </bean> <bean id = "druid-stat-pointcut" scope = "prototype"> <Eigenschaft name = "Muster"> <liste> <value> me.gaCl.Service. Ratschläge-ref = "Druid-Stat-Interceptor" PointCut-ref = "Druid-stat-Pointcut"/> </aoP: config> </beans>Zu diesem Zeitpunkt wurden die relevanten Konfigurationsdateien geschrieben, wie in der folgenden Abbildung gezeigt:
4.3. Unit -Tests durchführen
Nach den obigen zwei Schritten wurde die Integration von Frühling 4 und MyBatis3 abgeschlossen. Die nächste Aufgabe, die wir durchführen müssen, ist, Unit -Tests durchzuführen, um zu testen, ob die Integration von Spring4 und MyBatis3 erfolgreich ist.
1. Erstellen Sie ein ME.GaCl.Service -Paket im Verzeichnis SRC/Main/Java und erstellen Sie dann eine UserServicei -Schnittstelle im Paket me.gaCl.Service, wie unten gezeigt:
Paket me.gacl.service; importiere me.gacl.domain.user; public interface userServicei { / *** Benutzer hinzufügen* @param user* / void adduser (Benutzer Benutzer); / ** * Benutzer basierend auf der Benutzer -ID erhalten * @param userID * @return */ user getUserById (String userID); }2. Erstellen Sie ein Paket me.gacl.service.impl im Verzeichnis SRC/Main/Java und erstellen Sie dann eine Implementierungsklasse für die Benutzerservicei -Schnittstelle im Paket me.gaCl.service.impl: UserServiceImpl, wie unten gezeigt:
Paket me.gacl.service.impl; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.service; importiere me.gacl.dao.usmapper; importiere me.gacl.domain.user; import me.gacl.service.userservicei; /** * @Author GaCl * Verwenden Sie @Service Annotation, um die UserServiceImpl -Klasse als Service zu kommentieren. @Autowired Private UsMapper UsMapper; // Inject DAO @Override public void adduser (Benutzerbenutzer) {UsMapper.insert (Benutzer); } @Override öffentlicher Benutzer getUserById (String userID) {return userMapper.SelectByprimaryKey (userId); }}Die beiden erstellten Klassen sind wie folgt:
3. Schreiben Sie eine Unit -Testklasse in das Verzeichnis src/test/java, erstellen Sie ein neues me.gacl.testpaket und erstellen Sie dann eine myBatistest -Klasse unter diesem Paket. Der Code ist wie folgt:
Paket me.gacl.test; import Java.util.date; import Java.util.uuid; importiere me.gacl.domain.user; import me.gacl.service.userservicei; // me.gacl.service.userservicei; import org.junit.before; import org.junit.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.classPathXmlApplicationContext; öffentliche Klasse MyBatistest {private UserServicei UserService; /*** Diese Bevor die Methode vor allen Testmethoden ausgeführt wird und nur einmal ausgeführt wird ClassPathXmlApplicationContext (neuer String [] {"Spring.xml", "Spring-Mybatis.xml"}); // das userService -Objekt abrufen, das wir basierend auf der ID der Bean aus dem Spring Container UserService = (UserServicei) ac.getBean ("UserService") verwenden möchten. } @Test public void testadduser () {// applicationContext ac = new classPhoxMlApplicationContext (neuer String [] {"Spring.xml", "Spring-mybatis.xml"}); // userServicei userService = (userServicei) ac.getbean ("userService"); User user = new user (); user.setUerId (uUid.randomuuId (). toString (). ersetzen ("-", "")); user.setusername ("White Tiger God Emperor XDP"); user.setUserBirthday (neues Datum ()); user.SetUSersalary (d); userService.adduser (Benutzer); }}Beim Ausführen von Unit -Testcode wird der folgende Fehler gemeldet:
Die Fehlermeldung ist, dass die Klasse "me.gacl.test.mybatistest" nicht gefunden wurde, da wir Maven nicht verwendet haben, um die Klasse im Projekt zu kompilieren.
Als nächstes verwenden wir Maven, um das Projekt zu kompilieren. Wählen Sie die POM.xml -Datei des Projekts → 【Debuggen als】 → 【Maven install】, wie unten gezeigt:
Die Kompilierungsergebnisse sind wie folgt:
Hier werde ich über die Probleme sprechen, die ich nach der Ausführung der Maven -Installation begegnet bin. Als ich den Befehl maven installiert habe, sah ich die folgenden unordentlichen Fehler:
Später habe ich das Projekt gelöscht, das Projekt neu verarbeitet und dann den Clean Project-Betrieb ausgeführt, wie in der folgenden Abbildung gezeigt:
Ich kann es normalerweise kompilieren und bestehen, nachdem ich den Betrieb der Maven -Installation ausgeführt habe, wodurch ich lange Zeit depressiv gemacht wurde. Dies sollte nicht der Grund für meine Projektkonfiguration sein, sondern der Grund für Maven. Ich weiß nicht, warum dies der Fall ist. Wie auch immer, das ist eine Lösung. Wenn Sie auf eine Situation stoßen, in der der Betrieb der Maven -Installation nicht normal kompiliert werden kann: Sie können versuchen, die drei Schritte zu verwenden: Maven Clean → Clean Project → Maven -Installation, um das Problem zu lösen.
Zusätzlich zu Unit -Tests mit regulärem JUNIT können wir auch das von Spring für Spring -Tests bereitgestellte JUNIT -Testframework verwenden und eine neue MyBatistestBySpringtestFramework -Klasse unter me.gacl.test erstellen, mit dem Code wie folgt:
Paket me.gacl.test; import Java.util.date; import Java.util.uuid; importiere me.gacl.domain.user; import me.gacl.service.userservicei; import org.junit.test; import org.junit.runner.runwith; import org.springframework.beans.factory.annotation.autowired; import org.springframework.test.context.contextConfiguration; import org.springframework.test.context.junit.springJunitClasRunner; @Runwith (SpringJunitClASSrunner.class) // Nach der Konfiguration der @ContextConfiguration-Annotation und der Position des Standorts der Annotation wird mit der Frühlings- und Konfigurationsdatei angegeben, @ContextConfiguration (Standorte = {"ClassPath: Spring.xml", klassifiziert: Spring-mybatis.xml "}) myBatistsMlingSmybatis. {// Injize userService @Autowired private userServicei userService; @Test public void testadduser () {user user = new user (); user.setUerId (uUid.randomuuId (). toString (). ersetzen ("-", "")); user.setUserName ("xDP_GACL_WHITE TIGER GOTT KEPEROR"); user.setUserBirthday (neues Datum ()); user.SetUSersalary (d); userService.adduser (Benutzer); } @Test public void testgetUserById () {String userId = "fbcebfdada"; User user = userService.getUserById (userID); System.out.println (user.getUnername ()); }}Führen Sie diese beiden Testmethoden durch und bestehen Sie den normalen Test, wie unten gezeigt:
Zu diesem Zeitpunkt war die Integration erfolgreich, selbst wenn alle Integrationstests unseres Rahmens bestanden wurden.
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; importieren 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; importieren 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; importieren 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; importieren 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这三个步骤去解决问题