MyBatis+Spring整合方案

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://wanqiufeng.blog.51cto.com/409430/511566 




由于目前Spring官方还没有出整合Mybatis的特性,所以这里的整合框架是“mybatis-spring-1.0.0.jar”

   在使用该框架来编写DAO层的时候有以下几种方式:

1,           注入SqlSessionFactory,通过它自己编写创建SqlSession然后进行数据操作。

Spring的配置方式为:

  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

    <property name="dataSource" ref="dataSource" />

  </bean>

Java代码为:

  public class UserMapperSqlSessionImpl implements UserMapper {

      // SqlSessionFactory会通常由SqlSessionDaoSupport来设置

      private SqlSessionFactory sqlSessionFactory;

      public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {

          this.sqlSessionFactory = sqlSessionFactory;

      }

      public User getUser(String userId) {

          // 注意标准的MyBatis API用法手动打开和关闭session

          SqlSession session = sqlSessionFactory.openSession();

          try {

               return (User)

          session.selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser",

          userId);

           } finally {

               session.close();

           }

      }

  }

这种方式的缺点:

    它不会参与到Spring  的事务之中。

    如果SqlSession使用DataSource,它也会被Spring  事务管理器使用,而且当前有事务在进行时,这段代码会抛出异常。

     MyBatis 默认的SqlSession是线程不安全的。如果在bean 中注入了它,就会发生错误。

你必须保证SqlSession用完就关闭了。

2,           注入SqlSessionTemplate或者继承SqlSessionSupport来获得SqlSession来操作数据、

3,           注入映射器Mapper(最佳实践)

这种方式就再也不用上面那样手动调用SqlSessionDaoSupportSqlSessionTemplate来获取SqlSession,并来操作SqlSession了。因为直接将sqlSessionFactory注入给MapperFactoryBean,该Bean会自己创建获取SqlSession,然后完成相应的Sql语句执行操作,事务提交或回滚。高智能化啊。而且在映射器(Mapper)较多时,可以采用配置MapperScannerConfiguer来扫描包,将所有Mapper注册到Spring


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值