Spring and mybatis integration

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





Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325886518&siteId=291194637