spring 和 mybatis 整合

上文写到mybatis的搭建,现在写一下spring 和 mybatis 整合;

1,pom文件里增加依赖

这里要注意如果出现java.lang.NoClassDefFoundError: org/apache/ibatis/cursor/Cursor 错误!说明是版本兼容问题

解决办法:mybatis的3.4.0及以上版本用mybatis-spring1.3.0及以上版本;mybatis的3.4.0以下版本用mybatis-spring1.3.0以下版本。

<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整合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,把mybatis-config.xml中的关于数据库的配置删除,因为要交由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,在resource下,建一个spring配置文件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">
    <!-- 自动扫描 -->
    <context:component-scan base-package="com.cn" />
    
    <!-- 引入properties文件 -->
    <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和MyBatis完美整合,不需要mybatis的配置映射文件 -->
    <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,使用时直接让spring注入即可 -->
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
    </bean>

    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
</beans>
4,原本service中通过 SqlSessionFactory 类来获取sqlSession现在改为通过注入的方式获取
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 除了查询的,都要进行事物提交
		sqlSessionTemplate.commit();
		return count;
	}
}

5,测试

	@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,结果





猜你喜欢

转载自blog.csdn.net/sxlzs_/article/details/79388386