spring mybatis整合

来源:互联网 发布:建筑网络 编辑:程序博客网 时间:2024/05/04 05:32
本文主要介绍Spring与Mybatis三种常用整合方法,需要的整合架包是mybatis-spring.jar,可通过链接

http://code.google.com/p/mybatis/下载到。


 1、采用数据映射器(MapperFactoryBean)的方式。

(1)Spring配置文件:

<!-- 引入jdbc配置文件 -->      <context:property-placeholder location="jdbc.properties"/>           <!--创建jdbc数据源 -->        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">           <property name="driverClassName" value="${driver}"/>          <property name="url" value="${url}"/>           <property name="username" value="${username}"/>           <property name="password" value="${password}"/>            <property name="initialSize" value="${initialSize}"/>            <property name="maxActive" value="${maxActive}"/>         <property name="maxIdle" value="${maxIdle}"/>            <property name="minIdle" value="${minIdle}"/>       </bean>        <!-- 创建SqlSessionFactory,同时指定数据源-->       <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">         <property name="dataSource" ref="dataSource" />         </bean>         <!--创建数据映射器,数据映射器必须为接口-->  <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">         <property name="mapperInterface" value="com.xxt.ibatis.dbcp.dao.UserMapper" />         <property name="sqlSessionFactory" ref="sqlSessionFactory" />        </bean>         <bean id="userDaoImpl2" class="com.xxt.ibatis.dbcp.dao.impl.UserDaoImpl2">        <property name="userMapper" ref="userMapper"/>  </bean>  

数据映射器UserMapper,代码如下:

public interface UserMapper {         @Select("SELECT * FROM user WHERE id = #{userId}")          User getUser(@Param("userId") long id);   }  

dao接口类UserDao,代码如下:
public interface UserDao {       public User getUserById(User user);   }  

dao实现类UserDaoImpl2,,代码如下:
public class UserDaoImpl2 implements UserDao {        private UserMapper userMapper;           public void setUserMapper(UserMapper userMapper) {             this.userMapper = userMapper;         }            public User getUserById(User user) {           return userMapper.getUser(user.getId());         }  } 

注:使用MapperFactoryBean,可以向上面那样不写mybatis映射文件,采用注解方式提供相应的sql语句和输入参数;也可以使用Mapper映射接口+sql配置文件的方式(方法名和配置文件中的方法一样即可)

数据映射器UserMapper,代码如下:

public interface UserMapper {       User getUser(long id);   } 
实体类映射文件user.map.xml:
<mapper namespace="com.xxt.ibatis.dbcp.domain.User">          <select id="getUser" parameterType="java.lang.Long" resultMap="cn.test.User">          select * from user where id = #{id}            </select>  <mapper/> 

 
 
2、采用接口org.apache.ibatis.session.SqlSession的实现类org.mybatis.spring.SqlSessionTemplate
       mybatis中, sessionFactory可由SqlSessionFactoryBuilder.来创建。使用spring整合后,在MyBatis-Spring 中,使用了SqlSessionFactoryBean来替代SqlSessionFactoryBuilder,创建sessionFactory。

       SqlSessionFactoryBean有一个必须属性dataSource,另外其还有一个通用属性configLocation(用来指定mybatis的xml配置文件路径)。
(1)Spring配置文件:
<!-- 创建SqlSessionFactory,同时指定数据源-->  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">      <property name="dataSource" ref="dataSource" />      <!-- 指定sqlMapConfig总配置文件,订制的environment在spring容器中不在生效-->    <property  name="configLocation"  value="classpath:sqlMapConfig.xml"/>    <!--指定实体类映射文件,可以指定同时指定某一包以及子包下面的所有配置文件,mapperLocations和configLocation有一个即可,当需要为实体类指定别名时,可指定configLocation属性,再在mybatis总配置文件中采用mapper引入实体类映射文件 -->    <!- - <property  name="mapperLocations"  value="classpath*:com/xxt/ibatis/dbcp/**/*.xml"/>  --> <bean>

(2)mybatis总配置文件sqlMapConfig.xml:
<configuration>     <typeAliases>       <typeAlias type="com.xxt.ibatis.dbcp.domain.User" alias="User" />    </typeAliases>     <mappers>        <mapper resource="com/xxt/ibatis/dbcp/domain/user.map.xml" />       </mappers>   </configuration> 

(3)实体类映射文件user.map.xml:
<mapper namespace="com.xxt.ibatis.dbcp.domain.User">        <resultMap type="User" id="userMap">           <id property="id" column="id" />           <result property="name" column="name" />           <result property="password" column="password" />           <result property="createTime" column="createtime" />        </resultMap>        <select id="getUser" parameterType="User" resultMap="userMap">          select * from user where id = #{id}        </select>  <mapper/> 

(4)dao层接口实现类UserDaoImpl:
public class UserDaoImpl implements  UserDao  {      public SqlSessionTemplate sqlSession;          public User getUserById(User user) {          return (User)sqlSession.selectOne("com.xxt.ibatis.dbcp.domain.User.getUser", user);      }      public void setSqlSession(SqlSessionTemplate sqlSession) {           this.sqlSession = sqlSession;      }    }  


3、采用抽象类org.mybatis.spring.support.SqlSessionDaoSupport提供SqlSession。
(1)spring配置文件:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">       <property name="dataSource" ref="dataSource" />      <property  name="configLocation"  value="classpath:sqlMapConfig.xml"/>      <!-- <property  name="mapperLocations"  value="classpath*:com/xxt/ibatis/dbcp/domain/user.map.xml"/   >  -->   </bean>      <bean id="sqlSession"     class="org.mybatis.spring.SqlSessionTemplate">          <constructor-arg index="0" ref="sqlSessionFactory" />    </bean>     <bean id="userDaoImpl3" class="com.xxt.ibatis.dbcp.dao.impl.UserDaoImpl3">      <!--注入SqlSessionTemplate实例 -->      <property name="sqlSessionTemplate" ref="sqlSession" />       <!--也可直接注入SqlSessionFactory实例,二者都指定时,SqlSessionFactory失效 -->      <!-- <property name="sqlSessionFactory" ref="sqlSessionFactory" />    -->  </bean>  

(2) dao层接口实现类UserDaoImpl3:
public class UserDaoImpl3 extends SqlSessionDaoSupport implements UserDao {     public User getUserById(User user) {             return (User) getSqlSession().selectOne("com.xxt.ibatis.dbcp.domain.User.getUser", user);        } }  



0 0
原创粉丝点击