I wrote about the construction of mybatis above, now I will write about the integration of spring and mybatis;
1. Add dependencies to the pom file
Pay attention here if there is a java.lang.NoClassDefFoundError: org/apache/ibatis/cursor/Cursor error! The description is a version compatibility issue
Solution: use mybatis-spring1.3.0 and above for versions 3.4.0 and above of mybatis; use versions below mybatis-spring1.3.0 for versions below 3.4.0 of mybatis.
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>mybatis</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>demo</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.8</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.0</version> </dependency> <!-- spring integration mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.2.0.RELEASE</version> </dependency> <!-- Spring-4.2.0 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>4.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>4.2.0.RELEASE</version> </dependency> </dependencies> </project>
2. Delete the configuration of the database in mybatis-config.xml, because it is to be managed by spring
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- <properties resource="database.properties"></properties> <environments default="dev"> <environment id="dev"> <transactionManager type="jdbc"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> --> <mappers> <mapper resource="UserMapper.xml"/> </mappers> </configuration>
3. Under the resource, create a spring configuration file applicationContext.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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- Auto Scan --> <context:component-scan base-package="com.cn" /> <!-- Import properties file--> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:database.properties" /> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </bean> <!-- Spring and MyBatis are perfectly integrated, no configuration mapping file of mybatis is needed--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis-config.xml"/> </bean> <!-- mybatis spring sqlSessionTemplate, you can directly inject spring when you use it --> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg> </bean> <!-- (transaction management) transaction manager, use JtaTransactionManager for global tx --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> </beans>4. The sqlSession obtained by the SqlSessionFactory class in the original service is now obtained by injection
package com.cn.service; import javax.annotation.Resource; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.stereotype.Service; import com.cn.mapper.UserMapper; import com.cn.model.User; @Service public class UserService { @Resource private SqlSessionTemplate sqlSessionTemplate; public User selectById(){ UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class); User user = mapper.selectById(); return user; } public User selectUserAndAddress(){ UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class); User user = mapper.selectUserAndAddress(); return user; } public int addUser(User user){ UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class); int count = mapper.addUser(user); // curd In addition to the query, all things must be submitted sqlSessionTemplate.commit(); return count; } }
5. Test
@Test public void test5(){ ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); UserService bean = (UserService)ctx.getBean(UserService.class); User user = bean.selectById(); System.err.println(user.getLoginName()); }
6. Results