在Spring3中使用MyBatis

jopen 11年前

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;         }     }