读书人

spring与mybatis三种调整方法

发布时间: 2012-06-27 14:20:08 作者: rapoo

spring与mybatis三种整合方法

?本文主要介绍Spring与Mybatis三种常用整合方法,需要的整合架包是mybatis-spring.jar,可通过链接
http://code.google.com/p/mybatis/下载到。

??1、采用数据映射器(MapperFactoryBean)的方式,不用写mybatis映射文件,采用注解方式提供相应的sql语句和输入参数。
??(1)Spring配置文件:Java代码

  1. ????<!--?引入jdbc配置文件?--> ??
  2. ????<context:property-placeholder?location="jdbc.properties"/>? ??
  3. ??
  4. ?????<!--创建jdbc数据源?--> ??
  5. ?????<bean?id="dataSource"?class="org.apache.commons.dbcp.BasicDataSource"?destroy-method="close"> ??
  6. ???????<property?name="driverClassName"?value="${driver}"/> ??
  7. ???????<property?name="url"?value="${url}"/> ??
  8. ???????<property?name="username"?value="${username}"/> ??
  9. ???????<property?name="password"?value="${password}"/> ??
  10. ???????<property?name="initialSize"?value="${initialSize}"/> ??
  11. ???????<property?name="maxActive"?value="${maxActive}"/> ??
  12. ???????<property?name="maxIdle"?value="${maxIdle}"/> ??
  13. ???????<property?name="minIdle"?value="${minIdle}"/> ??
  14. ?????</bean> ??
  15. ??
  16. ?????<!--?创建SqlSessionFactory,同时指定数据源--> ??
  17. ?????<bean?id="sqlSessionFactory"?class="org.mybatis.spring.SqlSessionFactoryBean">? ??
  18. ?????<property?name="dataSource"?ref="dataSource"?/>? ??
  19. ?????</bean>? ??
  20. ??
  21. ?????<!--创建数据映射器,数据映射器必须为接口--> ??
  22. ?????<bean?id="userMapper"?class="org.mybatis.spring.mapper.MapperFactoryBean">? ??
  23. ?????<property?name="mapperInterface"?value="com.xxt.ibatis.dbcp.dao.UserMapper"?/>? ??
  24. ?????<property?name="sqlSessionFactory"?ref="sqlSessionFactory"?/>? ??
  25. ?????</bean> ??
  26. ??
  27. ?????<bean?id="userDaoImpl2"?class="com.xxt.ibatis.dbcp.dao.impl.UserDaoImpl2"> ??
  28. ?????<property?name="userMapper"?ref="userMapper"/> ??
  29. </bean>??
view plain
  1. ????<!--?引入jdbc配置文件?-->??
  2. ????<context:property-placeholder?location="jdbc.properties"/>???
  3. ??
  4. ?????<!--创建jdbc数据源?-->??
  5. ?????<bean?id="dataSource"?class="org.apache.commons.dbcp.BasicDataSource"?destroy-method="close">??
  6. ???????<property?name="driverClassName"?value="${driver}"/>??
  7. ???????<property?name="url"?value="${url}"/>??
  8. ???????<property?name="username"?value="${username}"/>??
  9. ???????<property?name="password"?value="${password}"/>??
  10. ???????<property?name="initialSize"?value="${initialSize}"/>??
  11. ???????<property?name="maxActive"?value="${maxActive}"/>??
  12. ???????<property?name="maxIdle"?value="${maxIdle}"/>??
  13. ???????<property?name="minIdle"?value="${minIdle}"/>??
  14. ?????</bean>??
  15. ??
  16. ?????<!--?创建SqlSessionFactory,同时指定数据源-->??
  17. ?????<bean?id="sqlSessionFactory"?class="org.mybatis.spring.SqlSessionFactoryBean">???
  18. ?????<property?name="dataSource"?ref="dataSource"?/>???
  19. ?????</bean>???
  20. ??
  21. ?????<!--创建数据映射器,数据映射器必须为接口-->??
  22. ?????<bean?id="userMapper"?class="org.mybatis.spring.mapper.MapperFactoryBean">???
  23. ?????<property?name="mapperInterface"?value="com.xxt.ibatis.dbcp.dao.UserMapper"?/>???
  24. ?????<property?name="sqlSessionFactory"?ref="sqlSessionFactory"?/>???
  25. ?????</bean>??
  26. ??
  27. ?????<bean?id="userDaoImpl2"?class="com.xxt.ibatis.dbcp.dao.impl.UserDaoImpl2">??
  28. ?????<property?name="userMapper"?ref="userMapper"/>??
  29. </bean>??

?
? (2)数据映射器UserMapper,代码如下:

Java代码
  1. public?interface?UserMapper?{ ??
  2. ??????@Select("SELECT?*?FROM?user?WHERE?id?=?#{userId}")? ??
  3. ??????User?getUser(@Param("userId")?long?id);? ??
  4. }??
view plain
  1. public?interface?UserMapper?{??
  2. ??????@Select("SELECT?*?FROM?user?WHERE?id?=?#{userId}")???
  3. ??????User?getUser(@Param("userId")?long?id);???
  4. }??

?
????(3)?dao接口类UserDao,代码如下:

Java代码
  1. public?interface?UserDao?{ ??
  2. ????public?User?getUserById(User?user); ??
  3. }??
view plain
  1. public?interface?UserDao?{??
  2. ????public?User?getUserById(User?user);??
  3. }??

?
???(4)dao实现类UserDaoImpl2,,代码如下:

Java代码
  1. public?class?UserDaoImpl2?implements?UserDao?{ ??
  2. ?????private?UserMapper?userMapper;? ??
  3. ??
  4. ?????public?void?setUserMapper(UserMapper?userMapper)?{? ??
  5. ?????????this.userMapper?=?userMapper;? ??
  6. ?????}?? ??
  7. ??
  8. ?????public?User?getUserById(User?user)?{ ??
  9. ????????return?userMapper.getUser(user.getId());? ??
  10. ?????} ??
  11. ?}??
view plain
  1. public?class?UserDaoImpl2?implements?UserDao?{??
  2. ?????private?UserMapper?userMapper;???
  3. ??
  4. ?????public?void?setUserMapper(UserMapper?userMapper)?{???
  5. ?????????this.userMapper?=?userMapper;???
  6. ?????}????
  7. ??
  8. ?????public?User?getUserById(User?user)?{??
  9. ????????return?userMapper.getUser(user.getId());???
  10. ?????}??
  11. ?}??

?
??2、采用接口org.apache.ibatis.session.SqlSession的实现类org.mybatis.spring.SqlSessionTemplate。
????mybatis中,?sessionFactory可由SqlSessionFactoryBuilder.来创建。MyBatis-Spring?中,使用了SqlSessionFactoryBean来替代。SqlSessionFactoryBean有一个必须属性dataSource,另外其还有一个通用属性configLocation(用来指定mybatis的xml配置文件路径)。
???(1)Spring配置文件:

Xml代码
  1. <!--?创建SqlSessionFactory,同时指定数据源-->??
  2. lt;bean?id="sqlSessionFactory"?class="org.mybatis.spring.SqlSessionFactoryBean">? ??
  3. ??<property?name="dataSource"?ref="dataSource"?/>? ??
  4. ??<!--?指定sqlMapConfig总配置文件,订制的environment在spring容器中不在生效-->??
  5. ??<property??name="configLocation"??value="classpath:sqlMapConfig.xml"/>??
  6. ??<!--指定实体类映射文件,可以指定同时指定某一包以及子包下面的所有配置文件,mapperLocations和configLocation有一个即可,当需要为实体类指定别名时,可指定configLocation属性,再在mybatis总配置文件中采用mapper引入实体类映射文件?-->??
  7. ??<!-?-?<property??name="mapperLocations"??value="classpath*:com/xxt/ibatis/dbcp/**/*.xml"/>??-->??
  8. lt;/bean>???
view plain
  1. <!--?创建SqlSessionFactory,同时指定数据源-->??
  2. lt;bean?id="sqlSessionFactory"?class="org.mybatis.spring.SqlSessionFactoryBean">???
  3. ??<property?name="dataSource"?ref="dataSource"?/>???
  4. ??<!--?指定sqlMapConfig总配置文件,订制的environment在spring容器中不在生效-->??
  5. ??<property??name="configLocation"??value="classpath:sqlMapConfig.xml"/>??
  6. ??<!--指定实体类映射文件,可以指定同时指定某一包以及子包下面的所有配置文件,mapperLocations和configLocation有一个即可,当需要为实体类指定别名时,可指定configLocation属性,再在mybatis总配置文件中采用mapper引入实体类映射文件?-->??
  7. ??<!-?-?<property??name="mapperLocations"??value="classpath*:com/xxt/ibatis/dbcp/**/*.xml"/>??-->??
  8. lt;/bean>???

?
????(2)mybatis总配置文件sqlMapConfig.xml:

Xml代码
  1. <configuration>??
  2. ???<typeAliases>??
  3. ?????<typeAlias?type="com.xxt.ibatis.dbcp.domain.User"?alias="User"?/>??
  4. ??</typeAliases>??
  5. ???<mappers>??
  6. ??????<mapper?resource="com/xxt/ibatis/dbcp/domain/user.map.xml"?/>??
  7. ?????</mappers>??
  8. ?</configuration>??
view plain
  1. <configuration>??
  2. ???<typeAliases>??
  3. ?????<typeAlias?type="com.xxt.ibatis.dbcp.domain.User"?alias="User"?/>??
  4. ??</typeAliases>??
  5. ???<mappers>??
  6. ??????<mapper?resource="com/xxt/ibatis/dbcp/domain/user.map.xml"?/>??
  7. ?????</mappers>??
  8. ?</configuration>??

?
????(3)实体类映射文件user.map.xml:

Java代码
  1. <mapper?namespace="com.xxt.ibatis.dbcp.domain.User"> ??
  2. ?????<resultMap?type="User"?id="userMap"> ??
  3. ????????<id?property="id"?column="id"?/> ??
  4. ????????<result?property="name"?column="name"?/> ??
  5. ????????<result?property="password"?column="password"?/> ??
  6. ????????<result?property="createTime"?column="createtime"?/> ??
  7. ?????</resultMap> ??
  8. ?????<select?id="getUser"?parameterType="User"?resultMap="userMap"> ??
  9. ???????select?*?from?user?where?id?=?#{id} ??
  10. ?????</select> ??
  11. <mapper/>??
view plain
  1. <mapper?namespace="com.xxt.ibatis.dbcp.domain.User">??
  2. ?????<resultMap?type="User"?id="userMap">??
  3. ????????<id?property="id"?column="id"?/>??
  4. ????????<result?property="name"?column="name"?/>??
  5. ????????<result?property="password"?column="password"?/>??
  6. ????????<result?property="createTime"?column="createtime"?/>??
  7. ?????</resultMap>??
  8. ?????<select?id="getUser"?parameterType="User"?resultMap="userMap">??
  9. ???????select?*?from?user?where?id?=?#{id}??
  10. ?????</select>??
  11. <mapper/>??

?
????(4)dao层接口实现类UserDaoImpl:

Java代码
  1. public?class?UserDaoImpl?implements??UserDao??{ ??
  2. ???public?SqlSessionTemplate?sqlSession; ??
  3. ???public?User?getUserById(User?user)?{ ??
  4. ???????return?(User)sqlSession.selectOne("com.xxt.ibatis.dbcp.domain.User.getUser",?user); ??
  5. ???} ??
  6. ???public?void?setSqlSession(SqlSessionTemplate?sqlSession)?{ ??
  7. ????????this.sqlSession?=?sqlSession; ??
  8. ???} ??
  9. ?}??
view plain
  1. public?class?UserDaoImpl?implements??UserDao??{??
  2. ???public?SqlSessionTemplate?sqlSession;??
  3. ???public?User?getUserById(User?user)?{??
  4. ???????return?(User)sqlSession.selectOne("com.xxt.ibatis.dbcp.domain.User.getUser",?user);??
  5. ???}??
  6. ???public?void?setSqlSession(SqlSessionTemplate?sqlSession)?{??
  7. ????????this.sqlSession?=?sqlSession;??
  8. ???}??
  9. ?}??

?
?3、采用抽象类org.mybatis.spring.support.SqlSessionDaoSupport提供SqlSession。
???(1)spring配置文件:

Java代码
  1. <bean?id="sqlSessionFactory"?class="org.mybatis.spring.SqlSessionFactoryBean">? ??
  2. ???<property?name="dataSource"?ref="dataSource"?/> ??
  3. ???<property??name="configLocation"??value="classpath:sqlMapConfig.xml"/> ??
  4. ???<!--?<property??name="mapperLocations"??value="classpath*:com/xxt/ibatis/dbcp/domain/user.map.xml"/???>??--> ??
  5. </bean> ??
  6. ??
  7. ?<bean?id="sqlSession"?????class="org.mybatis.spring.SqlSessionTemplate">? ??
  8. ??????<constructor-arg?index="0"?ref="sqlSessionFactory"?/>? ??
  9. </bean> ??
  10. ??
  11. <bean?id="userDaoImpl3"?class="com.xxt.ibatis.dbcp.dao.impl.UserDaoImpl3"> ??
  12. ???<!--注入SqlSessionTemplate实例?--> ??
  13. ???<property?name="sqlSessionTemplate"?ref="sqlSession"?/>? ??
  14. ???<!--也可直接注入SqlSessionFactory实例,二者都指定时,SqlSessionFactory失效?--> ??
  15. ???<!--?<property?name="sqlSessionFactory"?ref="sqlSessionFactory"?/>? ??
  16. --> ??
  17. </bean>??
view plain
  1. <bean?id="sqlSessionFactory"?class="org.mybatis.spring.SqlSessionFactoryBean">???
  2. ???<property?name="dataSource"?ref="dataSource"?/>??
  3. ???<property??name="configLocation"??value="classpath:sqlMapConfig.xml"/>??
  4. ???<!--?<property??name="mapperLocations"??value="classpath*:com/xxt/ibatis/dbcp/domain/user.map.xml"/???>??-->??
  5. </bean>??
  6. ??
  7. ?<bean?id="sqlSession"?????class="org.mybatis.spring.SqlSessionTemplate">???
  8. ??????<constructor-arg?index="0"?ref="sqlSessionFactory"?/>???
  9. </bean>??
  10. ??
  11. <bean?id="userDaoImpl3"?class="com.xxt.ibatis.dbcp.dao.impl.UserDaoImpl3">??
  12. ???<!--注入SqlSessionTemplate实例?-->??
  13. ???<property?name="sqlSessionTemplate"?ref="sqlSession"?/>???
  14. ???<!--也可直接注入SqlSessionFactory实例,二者都指定时,SqlSessionFactory失效?-->??
  15. ???<!--?<property?name="sqlSessionFactory"?ref="sqlSessionFactory"?/>???
  16. -->??
  17. </bean>??

?
???(2)?dao层接口实现类UserDaoImpl3:

Java代码
  1. public?class?UserDaoImpl3?extends?SqlSessionDaoSupport?implements?UserDao?{ ??
  2. ??public?User?getUserById(User?user)?{ ??
  3. ?????return?(User)?getSqlSession().selectOne("com.xxt.ibatis.dbcp.domain.User.getUser",?user); ??
  4. ??} ??

读书人网 >开源软件

热点推荐