在Spring3中运用MyBatis

在Spring3中使用MyBatis

Mybatis Spring3


1.MyBatis 例子

首先,单独使用MyBatis时:

import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil {
 // 每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心
 // 使用SqlSessionFactory的最佳实践是在应用运行期间不要重复创建多次,最佳范围是应用范围
 private final static SqlSessionFactory sqlSessionFactory;
 static {
  String resource = "configuration.xml";
  Reader reader = null;
  try {
   reader = Resources.getResourceAsReader(resource);
  } catch (IOException e) {
   System.out.println(e.getMessage());
  }
  // SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象来获得
  // SqlSessionFactoryBuilder实例的最佳范围是方法范围(也就是本地方法变量)。
  sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
 }
 public static SqlSessionFactory getSqlSessionFactory() {
  return sqlSessionFactory;
 }
}

配置文件:

<?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="Mapper.UserMapper"> 
<!-- 这里namespace必须是UserMapper接口的路径,不然要运行的时候要报错 “is not known to the MapperRegistry”--> 
    <insert id="insertUser" parameterType="User"> 
       insert into vincent_user(name,age) values(#{name},#{age}) 
       <!-- 这里sql结尾不能加分号,否则报“ORA-00911”的错误 --> 
    </insert> 
 
    <!-- 这里的id必须和UserMapper接口中的接口方法名相同,不然运行的时候也要报错 --> 
    <select id="getUser" resultType="User" parameterType="java.lang.String"> 
        select * from vincent_user where name=#{name} 
    </select> 
</mapper> 

使用的测试类为:

import org.apache.ibatis.session.SqlSession; 
import org.apache.ibatis.session.SqlSessionFactory; 
import org.junit.Test; 
  
public class TestMapper { 
    static SqlSessionFactory sqlSessionFactory = null; 
    static { 
       sqlSessionFactory = MyBatisUtil.getSqlSessionFactory(); 
    } 
    
    @Test 
    public void testAdd() { 
       SqlSession sqlSession = sqlSessionFactory.openSession(); 
       try { 
           UserMapper userMapper = sqlSession.getMapper(UserMapper.class); 
           User user = new User("tom",new Integer(5)); 
           userMapper.insertUser(user); 
           sqlSession.commit();//这里一定要提交,不然数据进不去数据库中 
       } finally { 
           sqlSession.close(); 
       } 
    } 
    
    @Test 
    public void getUser() { 
       SqlSession sqlSession = sqlSessionFactory.openSession(); 
       try { 
           UserMapper userMapper = sqlSession.getMapper(UserMapper.class); 
           User user = userMapper.getUser("jun"); 
           System.out.println("name: "+user.getName()+"|age: "+user.getAge()); 
       } finally { 
           sqlSession.close(); 
       } 
    } 
  
} 

2.整合Spring3后,单独使用Mybatis

首先,Spring3配置文件中(applicationContext.xml)有:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
    	<property name="configLocation" value="classpath:ibatis-config.xml" /> 
    	<property name="dataSource" ref="dataSource" /> 
    	<!-- mapper和resultmap配置路径 -->
    	<property name="mapperLocations">
		<list>
			<value>classpath:com/log/bean/mapper/*.xml</value>
    		</list>
    	</property>
</bean>
<!-- 通过扫描的模式,扫描目录在com/log/bean/mapper目录下,所有的mapper都继承
			SQLMapper接口的接口, 这样一个bean就可以了 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<property name="basePackage" value="com.log.bean.mapper"/>
	<property name="markerInterface" value="com.log.bean.mapper.SQLMapper"/>
</bean>

工具类:

import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class MyBatisUtil  {   
	
    private  final static SqlSessionFactory sqlSessionFactory;   
    
    static {   
    	ApplicationContext ac = new FileSystemXmlApplicationContext("classpath:applicationContext.xml"); 
    	sqlSessionFactory = (SqlSessionFactory)ac.getBean("sqlSessionFactory"); 
    }   
   
    public static SqlSessionFactory getSqlSessionFactory() {   
       return sqlSessionFactory;   
    }   
}