1. Создайте среду разработки
1.1. Создайте веб -проект с Maven
Выполнить следующую команду:
Скопируйте код следующим образом: MVN Archetype: Create -dgroupid = me.gacl -dartifactid = spring4 -mybatis3 -darchetypeartifactid = maven -archetype -webapp -dinteractivemode = false
Как показано на рисунке ниже:
Созданный проект заключается в следующем:
Редактировать файл pom.xml
<project xmlns = "http://maven.apache.org/pom/ .." xmlns: xsi = "http://www.w.org//xmlschema-instance" xsi: schemalocation = "http://maven.apache.org/pom/ .." http://maven.apache.org/maven-v__.xsd"> <modelVersion>..</modelVersion> <groupId>me.gacl</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>
Измените раздел <mame> spring4-mybatis3 maven webapp </name> и удалите контент, содержащий пробелы в «Maven WebApp». В противном случае, когда Maven собирает проект, из-за пробелов возникнут некоторые необъяснимые ошибки, и изменит их на: <mame> spring4-mybatis3 </name> .
Также удалите следующее:
<depervice> <groupid> junit </groupid> <artifactid> junit </artifactid> <serse> .. </version> <cerpope> test </scope> </deperency>
Эта часть является информацией о зависимости от JAR Junit. Эта версия слишком низкая. Мы не используем эту тестовую версию JUNIT. Модифицированное содержание pom.xml выглядит следующим образом:
<project xmlns = "http://maven.apache.org/pom/ .." xmlns: xsi = "http://www.w.org//xmlschema-instance" xsi: schemalocation = "http://maven.apache.org/pom/ .." http://maven.apache.org/maven-v__.xsd "> <doliderversion> .. </modelversion> <groupid> me.gacl </GroupId> <strifactid> Spring-mybatis </artifactid> <Cavegaging> War </упаковка> <sersing> .- Snapshot </версия> <1geing> spring-mybatis </упаковка>. <URL> http://maven.apache.org </url> <dependencies> </dependencies> <buld> <finalname> Spring-mybatis </finalName> </build> </project>
1.2. Импортировать созданный проект в MyEclipse
Конкретные шаги работы показаны на рисунке ниже:
Вручную создайте три исходных папки: [src/main/java], [src/test/resources] и [src/test/java], как показано на рисунке ниже:
На этом этапе все строительные работы проекта были завершены.
2. Создать базы данных и таблицы (для MySQL)
Сценарий SQL выглядит следующим образом:
Создать базу данных spring4_mybatis3; используйте spring4_mybatis3; Drop Table, если существует t_user; создать таблицу t_user (user_id char (32) не нулевой, user_name varchar (30) по умолчанию Null, user_birthday Date Date Deflet, user_salary null, первичный ключ (user_id) engine = innodb affeme affeme = in affecte affeme = in affeme alceme sault = in in in in in in in in in in in in affe8;
Созданная база данных и таблица следующие:
3. Используйте инструмент генератора для генерации кода
Я нашел онлайн -инструмент генератора, который может генерировать классы объектов, файлы отображения SQL и DAO, соответствующие таблице MyBatis на основе созданной таблицы базы данных, и нахожу файл Generator.xml в корневом каталоге инструмента генератора. Этот файл используется для настройки правил генерации кодов, как показано на рисунке ниже:
Отредактируйте файл Generator.xml, содержимое следующее:
<? xml version = "." Encoding = "utf-"?> <! Doctype GeneratorConfiguration public "-// mybatis.org//dtd Mybatis Generator Configuration .//en" "http://mybatis.org/dtd/mybatis-generator-config__.dtd"> <generatorcovercyrage> <! location = "e:/Repository/mysql/mysql-connector-java /../ mysql-connector-java -... jar"/> <!-<classpathentry location = "c:/oracle/product /../ db_/jdbc/lib/ojdbc.jar"/>-> <context id = "db_/jdbc/lib/ojdbc.jar"/>-> <context id = "db_/jdbc/lib/ojdbc.jar"/>-> <context id = <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" connectureUrl = "jdbc: oracle: thin: @localhost :: orcl" userid = "msa" пароль = "msa">-> < /jdbcconnection> <javatyperesolver> <provest name = "fistbigmam" /vally " /vally" /vally " /vally" /vally " /vallyciM" /vally " /valieCim" /jdbcConnection> <javatyperesolver> <vilfyBegIM " /" </javatyperesolver> <!- генерируйте имя пакета и местоположение класса Entity. Здесь сгенерированный класс объектов размещен в пакете me.gacl.domain-> <javamodelgenerator targetpackage = "me.gacl.domain" targetProject = "c:/users/gacl/spring-mybatis/src/main/java"> name = "enablesubpacgages" = "true"/> <name = "tramest"/"value"/value "/value"/value "/value"/"/" value "/value"/value "/value"/value "/"/value "/" value "/value"/value "/"/"tramStres"/"/" </javamodelgenerator> <!- Сгенерированное имя пакета файла карты SQL. Здесь поместите сгенерированный файл карты SQL в пакет me.gacl.mapping-> <sqlmapgenerator targetpackage = "me.gacl.mapping" targetProject = "c:/users/gacl/spring-mybatis/src/main/java"> name = "ensulsUbpackages" value = "true"/> <//java ">« eNealsUbpackages »="/> <//java "<> name =" ensablesUbpackages "/> <//java" <> name = "enablesUbpackages ="/> <//java "< Название и расположение Дао. Здесь поместите сгенерированный класс DAO в пакет me.gacl.dao-> <javaclientgenerator type = "xmlmapper" targetpackage = "me.gacl.dao" targetProject = "c:/users/gacl/spring-mybatis/src/main/java"> <name = "enables/vitue"/rue "/rue"/rue "/rue"/> "/rue"/rue "/rue"/rue "/rue"/rue "/rue"/rue "/rue"/> "/rue"/java "> <свойство =". </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>
Откройте окно командной строки, переключитесь на корневой каталог инструмента генератора и выполните следующую команду:
java -jar mybatis -Generator -core -1.3.2.jar -configfile Generator.xml -Overwrite
Как показано на рисунке ниже:
Только сейчас мы настроили сгенерированный код и файл отображения SQL в файле Generator.xml для размещения сгенерированного кода и файла отображения SQL в каталог "C:/users/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 insert (пользовательская запись); int insertselective (пользовательская запись); User selectbyprimarykey (String userId); int updateByPrimaryKey (пользовательская запись); }Сгенерированный USERMAPPER - это интерфейс, который определяет некоторые методы для добавления, удаления, изменения и поиска таблицы T_USER.
2. Сгенерированный класс сущности
упаковать me.gacl.domain; импортировать java.util.date; открытый класс user {private String userId; частное имя пользователя; частная дата пользовательский день рождения; частный двойной пользователи; public String getUserid () {return userId; } public void setUserid (string userId) {this.userid = userId == null? null: userid.trim (); } public String getUsername () {return username; } public void setUsername (String username) {this.username = username == null? null: username.trim (); } public date getUserbirthday () {return userbirthday; } public void setUserBirthDay (дата пользовательского дня) {this.UserBirthDay = userBirthDay; } public double getUsersalary () {return useralary; } public void setUserSalary (двойная пользователя) {this.Usersalary = useralary; }}Пользовательский класс является соответствующим классом объекта таблицы T_USER. Атрибуты, определенные в классе пользователя, соответствуют полям в таблице t_user один за другим.
3. Сгенерированный файл отображения SQL
<? xml version = "." Encoding = "utf-"?> <! Doctype Mapper public "-// mybatis.org//dtd mapper .//en" "http://mybatis.org/dtd/mybatis-mapper.dtd"> <mapper namespace = "me.gacl.dao.usermapper"> <sutparemapper = "routmapper"> <restursmapper "> <restursmapper"> <restursmapper ">" resturesmapper ">" routmapper ">" resturesmapper " type = "me.gacl.domain.user"> <id column = "user_id" property = "userid" jdbctype = "char" /> <result column = "user_name" property = "username" jdbctype = "varcharch" /> <result column = "user_birthday" = "userbirthday" jdbcty jdbcty = "user_birthday" = "userbirthday". Column = "user_salary" property = "useralary" 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" /> из t_user, где user_id = #{userId, jdbctype = char} < /selet> <delete id = "deleteByPrimaryKey" parameterType = "java.Lang.String"> delete useRET #{userid, jdbctype = char} </delete> <insert id = "insert" parametertype = "me.gacl.domain.user"> insert в t_user (user_id, user_name, user_birthday, user_salary) #{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 test = "user! prefix = "values (" Suffix = ")" SuffixOverrides = ","> <if test = "userId! = null"> #{userId, jdbctype = char}, </if> <if test = "username! = null"> #{usermeme, jdbctype = varchch}, </if> <if test = "userbil! #{userbirthday, jdbctype = date}, </if> <if test = "useralary! = null"> #{useralary, jdbctype = double}, </if> </trim> </insert> <обновление идентификатор = "updatePrimAryKective" parameterType = "me.gacl.mer. ademare avemare. test = "username! = null"> user_name = #{username, jdbctype = varchar}, </if> <if test = "user -birthday! = null"> user_birthday = #{userbirthday, jdbctype = date}, </if> <if test = " #{useralary, jdbctype = double}, </if> </set>, где user_id = #{userId, jdbctype = char} </update> <update id = "updatebyprimarykey" parametertype = "me.gacl.domain.user"> update t_user set user_name = #{usermam user_birthday = #{userbirthday, jdbctype = date}, user_salary = #{useralary, jdbctype = double}, где user_id = #{userid, jdbctype = char} </update> </mapper>Содержание файла usermapper.xml заключается в том, чтобы написать операторы SQL, которые управляют таблицей T_USER. Давайте сосредоточимся на нескольких мелких деталях, на которые необходимо обратить внимание в конфигурации usermapper.xml:
1. Пространство имен интерфейса usermapper интерфейса <mapper> usermapper.xml должно быть полным именем класса интерфейса Usermapper, то есть <mapper = "me.gacl.dao.usermapper">
2. USERMAPPER.XML Определение Значение атрибута ID базы данных операций должно соответствовать имени метода, определяемому интерфейсом USERMAPPER, как показано на рисунке ниже:
Причиной приведенных выше двух требований является то, что Mybatis может автоматически реализовать соответствующие методы, определенные в интерфейсе Usermapper на основе интерфейса Usermapper и файла usermapper.xml, поэтому нам больше не нужно писать конкретный код реализации для интерфейса Usermapper.
4. Интеграция Spring и Mybatis
Во -первых, нам нужно добавить соответствующие пакеты JAR, которые нам нужны в проект. Мы можем перейти в центральный репозиторий Maven: http://search.maven.org/, чтобы найти соответствующие пакеты JAR, которые мы хотим, как показано на следующем рисунке:
Нам просто нужно ввести имя пакета JAR, которое мы ищем в окне поиска, и нажать кнопку [Search], чтобы найти пакет JAR, который мы ищем.
4.1. Добавить пакеты банок, связанных с пружиной и mybatis
1. Добавьте Spring-Core, введите ключевое слово Spring-Core для поиска, как показано на рисунке ниже:
Найдите информацию о описании зависимости о Spring-Core, как показано на следующем рисунке:
Воля
<Depective> <groupId> org.springframework </GroupId> <artifactid> Spring-core </artifactid> <sersive> 4.1.4.Release </version> </vehyse>
Скопируйте в файл pom.xml проекта следующим образом:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 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> <mame> Spring4-mybatis3 </name> <Url> http://maven.apache.org </url> <deperiation> <!-Add Spring4.1.4 Основной пакет-> <Dependency> <groupId> org.springframework </GroupD> <Artifactid> spring-core </artifactid> <sers> 4.1.4.1. </dependencies> <buld> <finalname> spring4-mybatis3 </finalname> </build> </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://maven.apache.org/pom/ .." http://maven.apache.org/maven-v__.xsd "> <doliderversion> .. </modelversion> <groupid> me.gacl </GroupId> <strifactid> Spring-mybatis </artifactid> <Cavegaging> War </упаковка> <sersing> .- Snapshot </версия> <1geing> spring-mybatis </упаковка>. <URL> http://maven.apache.org </url> <deperiations> <!-Добавить пакет Spring-Core-> <DepeCted> <groupId> org.springframework </GroupId> <strifactid> Spring-Core </artifactid> <serse> ... release </version> </redytience> <!-Добавить Spring-context Package-> <Serview> </versement> </redytiency> <! <groupId> org.springframework </GroupId> <StrifactId> Spring-Context </artifactId> <sersion> ... выпуск </version> </depertive> <!-Добавить пакет Spring-tx-> <Depoydency> <groupId> org.springframe </artifactid> </artifactid> <serserame> </artifactid> </artifactid> </resdive> </artifactid> </artifactid> </ardfactid> </resdister> </artifactid> </artifactid>. Пакет Spring-JDBC-> <Dependency> <groupId> org.springframework </GroupId> <strifactId> Spring-jdbc </artifactid> <sersion> ... выпуск </version> </dependency> <!-Добавить пакет Spring-jdbc> spring-jdbc </artifactid> spring-jdbc </artifactid> spring-jdbc </artifactid> spring-jdbc <sersive> ... выпуск </version> </dependency> <!-Чтобы облегчить модульное тестирование, добавить пакет Spring-test-> <dependency> <groupid> org.springframework </GroupId> <straCactId> Spring-test </artifactId> <sersive> ... Group </version> </jeperency> <!-Добавить пакет-web-web-> <derving> <groupd> </version> </jeperdenty> <! <strifactid> Spring-web </artifactid> <sersion> ... выпуск </version> </dependency> <!-Добавить пакет AspectJweaver-> <Dependency> <groupId> org.aspectj </GroupId> <strifactid> AmposeJweaver </artifactid> <sersive> .. </version> </зависимость> <!-Добавить myBatis-> <Serview> </version> </upective> <!-Add MyBatis-> <series> </version> </upectient> <!-Add MyBatis-> <serse> </version> </зависимость> <! <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> <!-Добавить пакет Servlet.core-> <Dependency> <groupId> javax.servlet </GroupId> <ArtifactId> javax.servlet-api </artifactid> <sersive> .. </version> </repertive> <deyedency> <groupid> javax.servlet.jspact </GroupId> <ratifactid> javax.sers.sers.jospact.jespact.jespact.jespact. <serse> ..- B </version> </dependency> <!-jstl-> <dependency> <groupid> javax.servlet </GroupId> <ratifactid> jstl </artifactid> <sersive>. </version> </devestion> <!-Добавить пакет драйверов MySQL-> <Dependency> <groupId> mySql </GroupD> <! <ratfactid> mysql-connector-java </artifactid> <sersion> .. </version> </dependency> <!-Добавить пакет пула подключений Druid-> <dependency> <groupid> com.alibaba </groupid> <artifactid> Druid </artifactid> <sersion> .. </version> </resture> <! <groupId> junit </GroupId> <ArtifactId> junit </artifactid> <sersion>. </version> <scope> test </scope> </depervice> </depertion> <buld> <finalName> Spring-mybatis </finalName> </build> </project> </project> </project> </project> </project> </project>
4.2. Напишите соответствующие файлы конфигурации
1. dbconfig.properties
Создайте файл dbconfig.properties в каталоге SRC/Main/Resources, чтобы написать соответствующую информацию о подключении к базе данных MySQL. Содержание dbconfig.properties заключается в следующем:
DriverClassName = com.mysql.jdbc.drivervalidationquery = select 1jdbc_url = jdbc: mysql: // localhost: 3306/spring4_mybatis3? useunicode = true & harementencoding = utf-8 & zerodateTeTeMeMehavior = convertonullhodejdbc_UseSrAmerameRemAmerameSermAmeRAMER =
2. Spring.xml (файл конфигурации Spring Framework)
Создайте файл Spring.xml в каталоге SRC/Main/Resources. Файл Spring.xml - это файл Core Configuration, записанный для Spring Framework. Содержание Spring.xml заключается в следующем:
<? xml version = "1.0" Encoding = "UTF-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beanshttp://www.springframework.org/sche MA/Beans/Spring-Beans-3.0.xsdhttp: //www.springframework.org/schema/context/spring-context-3.0.xsd "> <!-Представьте DBConfig.Properties File-> <Контекст: Property-Placeholder location = "classPath: dbconfig.properties" /> <!-Введение dbconfig.properties file-> <Контекст: Automaticalloder scan (Automatic Automatic anctection), Automatic Scanese), SCANEPATE), SCANEPATE), SCANEPATE). ME.GACL.Service Пакет и все классы, аннотированные с помощью аннотации @Service класса-> <Контекст: Component Scan Base-package = "me.gacl.service" /> < /beans>
Конфигурация нашего файла Spring.xml очень проста, есть только две конфигурации.
3. Spring-mybatis.xml (файл конфигурации, интегрированный с Spring и Mybatis)
Создайте файл Spring-mybatis.xml в каталоге SRC/Main/Resources. Файл Spring-mybatis.xml-это файл конфигурации, записанный для интеграции Spring Framework и Mybatis Framework. Содержание Spring-mybatis.xml выглядит следующим образом:
<? xml version = "1.0" Encoding = "UTF-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: tx = "http://www.springframework.org/schema/tx" xmlns: aop = "http://www.springframework.org/schema/aop" xsi: schemalocation = "http://wwww.springframe. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-3.0.xsd 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"> <name = "jndiname" value = "$ {jndiname}"> </property> </bean>-> <!- ==================================================================== ==================================================================== ==================================================================== ===================================================================== ==================================================================== ===================================================================== ==================================================================== ===================================================================== name = "username" value = "$ {jdbc_username}" /> <name = "password" value = "$ {jdbc_password}" /> <!-Инициализировать размер соединения-> <name = "initialsize" value = "0" /> <!-Максимальное число соединений, используемых пулом соединений-> <свойство name = "maxactive". БЕСПЛАТНО-> <name = name = "maxidle" value = "20" /> <!-Минимальное количество соединений бесплатно-> <name = "miniDle" value = "0" /> <!-Получить максимальное время ожидания для соединений-> <name = "maxwait" value = "60000" /> <! name="maxPoolPreparedStatementPerConnectionSize" value="33" /> --> <property name="validationQuery" value="${validationQuery}" /> <property name="testOnBorrow" value="false" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <property name="testWhileIdle" value = "true" /> <!-Настройте, сколько времени требуется для выполнения интервала обнаружения, чтобы обнаружить непрерывное соединение, которое необходимо закрыть, в Milliseconds-> <Property Name = "TimeWeedEvictionRunsmillis" Value = "60000" /> <! value = "25200000" /> <!-Включите Functioned Function-> <name = "removeabandone" value = "true" /> <!-1800 секунд, то есть 30 минут-> <name = "removabandontimeout" value = "1800" /> <!-log Orfer Orry, когда закрывает отброшенное соединение-> <свойство name name = "value value value value value value value value value value"! -> <!-<name = "filters" value = "stat" />-> <name = "filters" value = "merestat" /> < /bean> <!- ========================================================================================= ========================================================================================== ========================================================================================== ========================================================================================== ======================================================================= ======================================================================= ======================================================================= ======================================================================= ======================================================================= ======================================================================= ======================================================================= ======================================================================= Сохранить значение ручной конфигурации = "classpath: me/gacl/mapping/*. Xml" в configuration.xml относится ко всем файлам xml в пакете me.gacl.mapping в разделе ClassPath (ClassPath) в usermapper.xml расположен в пакете Me.gacl.mapping, так что usermapper.xml может быть автоматически scaner -nameles naments vomecport. value = "classpath: me/gacl/mapping/*. xml"/> </bean> <!-конфигурационное сканер-> <Bean> <!-Сканирование пакета me.gacl.dao и все классы интерфейса картирования под его подпакетом-> name = "basepackage" value = "me.gacl.dao"/> <property name = "namesailsecory =" nameSecory = "vaseAmescory =" weansArescory = "weansecory =" vacy. value = "sqlSessionFactory" /> < /bean> <!- ==================================================================== ==================================================================== ==================================================================== ==================================================================== ==================================================================== ==================================================================== ==================================================================== ===================================================================== Transaction-Manager = "TransactionManager" />-> <!-Конфигурация Interceptor-> <TX: Advice ID = "TransactionAdvice" Transaction-Manager = "TransactionManager"> <TX: атрибуты> <TX: Method name = "Add*" Propagation = "требуется" /> <tx: method name = "Append*Propagation =" " /" /> " /> <TX:" Method = "Append*" ". Распродукция = "Требуется" /> <tx: method name = "save*" opragation = "требуется" /> <tx: method name = "upply*" opragation = "требуется" /> <tx: имя метода = "modify*" Propagation = "требуется" /> <tx: method name = "edit*" Пропаганс = "Требуется" /> <tx: method name = "delete*vopagation =" xpagation = "xpagation =" xpagation = "xpagation =" xpagation = "xpagation =" xpagation = "xpagation =" xpagation = "xpagation =" xpagation = " /" /> <tx: method name ": name = "remove*" opragation = "требуется" /> <tx: method name = "Repaagation =" требуется " /> <tx: method name =" delandrepair "Propagation =" требуется " /> <tx: имя метода =" delandrepair "Propagation =" Требуется " /> <tx: method name =" get*"Propagation =" Найти " /> <tx:" tx " /" tx ". propagation="SUPPORTS" /> <tx:method name="load*" propagation="SUPPORTS" /> <tx:method name="search*" propagation="SUPPORTS" /> <tx:method name="datagrid*" propagation="SUPPORTS" /> <tx:method name="*" propagation="SUPPORTS" /> <tx:method name="*" propagation="SUPPORTS" /> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="transactionPointcut" expression="execution(* me.gacl.service..*Impl.*(..))" /> <aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" /> </aop:config> <!-- Configure druid Мониторинг Spring JDBC-> <Bean Id = "Druid-Stat-Interceptor"> </bean> <bean id = "Druid-stat-pointcut" scope = "prototype"> <name = "patterns"> <siled> <value> me.gacl.service.*</value> </list> </properation> </bean> <aop: aop: aop: aop: aop: aop: aop: aop: aop: aop: aop: aop: advisor> </property> Advice-ref = "Druid-Stat-Interceptor" pointcut-ref = "Druid-Stat-pointcut"/> </aop: config> </beans>На этом этапе были записаны соответствующие файлы конфигурации, как показано на рисунке ниже:
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; public interface userservicei { / *** добавить пользователь* @param user* / void adduser (пользователь пользователя); / ** * Получить пользователя на основе идентификатора пользователя * @param userid * @return */ user 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 в качестве сервиса * Идентификатор службы - это пользовательский сервис */@service ("userservice") открытый класс пользователи userserviceimp @Autowired private usermapper usermapper; // inject dao @override public void adduser (пользователь пользователя) {usermapper.insert (пользователь); } @Override public user getUserbyid (string userid) {return 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.fore; Импорт org.junit.test; Импорт org.springframework.context.applicationContext; Import org.springframework.context.support.classpathxmlapplicationContext; открытый класс mybatistest {private userservicei userservice; /*** Этот метод перед выполнено перед всеми методами испытаний и выполняется только один раз* Все работы инициализации во время тестирования модуля Юнита могут быть выполнены в этом методе* Например, инициализация ApplicationContext и Userservice в методе перед до начала*/@Befor String [] {"spring.xml", "Spring-mybatis.xml"}); // Извлекать объект userservice, который мы хотим использовать на основе идентификатора бобов из пружинного контейнера userservice = (userservicei) ac.getbean ("userservice"); } @Test public void testadduser () {// ApplicationContext ac = new classpathxmlapplicationcontext (new String [] {"spring.xml", "Spring-mybatis.xml"}); // userservicei userservice = (userservicei) ac.getbean ("userservice"); Пользователь пользователь = новый пользователь (); user.setuserid (uuid.randomuuid (). user.setusername («Белый тигр бог Император XDP»); user.setuserBirthDay (new Date ()); user.setusersalary (d); userservice.adduser (пользователь); }}При выполнении модульного тестового кода сообщается о следующей ошибке:
Сообщение об ошибке заключается в том, что класс "me.gacl.test.mybatistest" не был найден, потому что мы не использовали Maven для составления класса в проекте.
Далее мы используем Maven для компиляции проекта, выберите файл PoM.xml от POM.xml → 【отладка как】 → 【Maven Install】, как показано ниже:
Результаты компиляции следующие:
Здесь я расскажу о проблемах, с которыми я столкнулся после выполнения установки Maven. Когда я впервые выполнил команду установки Maven, я увидел следующие грязные ошибки:
Позже я удалил проект, повторно импортировал проект, а затем выполнил операцию «Чистый проект», как показано на следующем рисунке:
Я могу скомпилировать и передавать его обычно после выполнения операции установки 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; Import org.springframework.test.context.contextConfiguration; Импорт org.springframework.test.context.junit.springjunitclassrunner; @Runwith (springjunitclassrunner.class) // После настройки аннотации @ContextConfiguration и атрибута местоположения определяется с файлом пружины и конфигурации, @ContextConfiguration (местоположения = {"classpath: spring.xml", "classpath: spring-mybatis.xmlestespring. {// Inject userservice @autowired private userservicei userservice; @Test public void testadduser () {user user = new user (); user.setuserid (uuid.randomuuid (). user.setusername ("xdp_gacl_white tiger God Imperor"); user.setuserBirthDay (new Date ()); user.setusersalary (d); userservice.adduser (пользователь); } @Test public void testgetUserById () {String userId = "fbceBfdada"; User user = userservice.getuserbyid (userid); System.out.println (user.getusername ()); }}Выполните эти два метода испытаний и пройдите нормальный тест, как показано ниже:
На этом этапе, даже если все интеграционные тесты нашей структуры были проведены, интеграция была успешной.
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; импортировать java.util.list; import me.gacl.domain.User; public interface UserMapper { int deleteByPrimaryKey(String userId); int insert(User record); int insertSelective(User record); User selectByPrimaryKey(String userId); int updateByPrimaryKeySelective(User record); int updateByPrimaryKey(User record); /**Get all user information* @return List<User> */ List<User> getAllUser(); }3、在UserMapper.xml文件中编写getAllUser()方法要执行的SQL语句,如下所示:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="me.gacl.dao.UserMapper" > <resultMap id="BaseResultMap" type="me.gacl.domain.User" > <id column="user_id" property="userId" jdbcType="CHAR" /> <result column="user_name" property="userName" jdbcType="VARCHAR" /> <result column="user_birthday" property="userBirthday" jdbcType="DATE" /> <result column="user_salary" property="userSalary" jdbcType="DOUBLE" /> </resultMap> <sql id="Base_Column_List" > user_id, user_name, user_birthday, user_salary </sql> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" > select <include refid="Base_Column_List" /> from t_user where user_id = #{userId,jdbcType=CHAR} </select> <delete id="deleteByPrimaryKey" parameterType="java.lang.String" > delete from t_user where user_id = #{userId,jdbcType=CHAR} </delete> <insert id="insert" parameterType="me.gacl.domain.User" > insert into t_user (user_id, user_name, user_birthday, user_salary) values (#{userId,jdbcType=CHAR}, #{userName,jdbcType=VARCHAR}, #{userBirthday,jdbcType=DATE}, #{userSalary,jdbcType=DOUBLE}) </insert> <insert id="insertSelective" parameterType="me.gacl.domain.User" > insert into t_user <trim prefix="(" suffix=")" suffixOverrides="," > <if test="userId != null" > user_id, </if> <if test="userName != null" > user_name, </if> <if test="userBirthday != null" > user_birthday, </if> <if test="userSalary != null" > user_salary, </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides="," > <if test="userId != null" > #{userId,jdbcType=CHAR}, </if> <if test="userName != null" > #{userName,jdbcType=VARCHAR}, </if> <if test="userBirthday != null" > #{userBirthday,jdbcType=DATE}, </if> <if test="userSalary != null" > #{userSalary,jdbcType=DOUBLE}, </if> </trim> </insert> <update id="updateByPrimaryKeySelective" parameterType="me.gacl.domain.User" > update t_user <set > <if test="userName != null" > user_name = #{userName,jdbcType=VARCHAR}, </if> <if test="userBirthday != null" > user_birthday = #{userBirthday,jdbcType=DATE}, </if> <if test="userSalary != null" > user_salary = #{userSalary,jdbcType=DOUBLE}, </if> </set> where user_id = #{userId,jdbcType=CHAR} </update> <update id="updateByPrimaryKey" parameterType="me.gacl.domain.User" > update t_user set user_name = #{userName,jdbcType=VARCHAR}, user_birthday = #{userBirthday,jdbcType=DATE}, user_salary = #{userSalary,jdbcType=DOUBLE} where user_id = #{userId,jdbcType=CHAR} </update> <!-- ==============以下内容是根据自身业务扩展的内容======================= --> <!-- select标签的id属性与UserMapper接口中定义的getAllUser方法要一模一样--> <select id="getAllUser" resultMap="BaseResultMap"> select user_id, user_name, user_birthday, user_salary from t_user </select></mapper>4、在UserServiceI接口中也添加一个getAllUser()方法,如下:
package me.gacl.service; импортировать java.util.list; import me.gacl.domain.User; public interface UserServiceI { /** * Add user* @param user */ void addUser(User user); /** * Get user based on user id* @param userId * @return */ User getUserById(String userId); /** Get all user information* @return List<User> */ List<User> getAllUser(); }5、在UserServiceImpl类中实现getAllUser方法,如下:
package me.gacl.service.impl; импортировать java.util.list; import org.springframework.beans.factory.annotation.Autowired; 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这三个步骤去解决问题