spring3与mybatis3的整合一例
2011-11-15 15:33
471 查看
整合版本:
SPRING3.0.5
MYBATIS:3.1.0
MYBATIS-SPRING:1.0.3(包mybatis-spring-1.0.3-SNAPSHOT.jar)
整合过程说简单也简单,说难也难,关键是现代人行文不像古人那么严谨,文档结构不严谨,没重点,有歧义,网上的资料有一些多多少少都有点问题,也或者那种整合结果并不是我想要的,经过了昨晚和今天的研究,终于将他们按我的想法整合了
整合过程中卡了两次,一次是在SPRING启动时sqlSessionFactory创建失败,网上的资料说MYBATIS3和SPRING2.5整合会报那个错,但是我的两个版本都是3.X,最终是将整合包换成了最新的才解决;另外一次是SPRING管理MYBATIS的事务,要让其管理事务必须使用SqlSessionTemplate才行,这是最后研究了MyBatis-Spring Reference Simplied Chinese.pdf这个文档的结果;
下面贴出spring的主要配置代码:
下面是DAO中的代码:
其中SqlSession也可以放在DAO中新建,那么新建的时候也必须用到SqlSessionTemplate;
下面是mapper
这么做了之后,第一个insert语句成功无问题,可以insert成功,第二个语句有问题,因为带了分号,执行时将抛出异常导致回滚,整个方法执行之后是全部回滚掉了的;如果在DAO中直接引入sqlSessionFactory,然后获取SqlSession的话,事务不会被Spring所管理,这个在DEBUG日志中可以看到;
以上就是整合的重点,欢迎交流!
SPRING3.0.5
MYBATIS:3.1.0
MYBATIS-SPRING:1.0.3(包mybatis-spring-1.0.3-SNAPSHOT.jar)
整合过程说简单也简单,说难也难,关键是现代人行文不像古人那么严谨,文档结构不严谨,没重点,有歧义,网上的资料有一些多多少少都有点问题,也或者那种整合结果并不是我想要的,经过了昨晚和今天的研究,终于将他们按我的想法整合了
整合过程中卡了两次,一次是在SPRING启动时sqlSessionFactory创建失败,网上的资料说MYBATIS3和SPRING2.5整合会报那个错,但是我的两个版本都是3.X,最终是将整合包换成了最新的才解决;另外一次是SPRING管理MYBATIS的事务,要让其管理事务必须使用SqlSessionTemplate才行,这是最后研究了MyBatis-Spring Reference Simplied Chinese.pdf这个文档的结果;
下面贴出spring的主要配置代码:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/mysys_dev" /> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mapperLocations" value="classpath:com/mycomp/mysys/dao/*.xml" /> </bean> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory"/> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" /> <context:component-scan base-package="com.mycomp" />
下面是DAO中的代码:
@Repository public class MyDAO{ @Resource private SqlSession sqlSession; public SqlSession getSqlSession() { return sqlSession; } public void setSqlSession(SqlSession sqlSession) { this.sqlSession = sqlSession; } @Transactional(readOnly=false,propagation=Propagation.REQUIRED) public void insertData(){ sqlSession.insert("mypkg.testInsert"); sqlSession.insert("mypkg.testInsertForEx"); } }
其中SqlSession也可以放在DAO中新建,那么新建的时候也必须用到SqlSessionTemplate;
下面是mapper
<mapper namespace="mypkg"> <insert id="testInsert"> insert into tmp_wmh_1(msg)values(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')) </insert> <insert id="testInsertForEx"> insert into tmp_wmh_1(msg)values(to_char(sysdate,'yyyymmdd')); </insert> </mapper>
这么做了之后,第一个insert语句成功无问题,可以insert成功,第二个语句有问题,因为带了分号,执行时将抛出异常导致回滚,整个方法执行之后是全部回滚掉了的;如果在DAO中直接引入sqlSessionFactory,然后获取SqlSession的话,事务不会被Spring所管理,这个在DEBUG日志中可以看到;
以上就是整合的重点,欢迎交流!
相关文章推荐
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- spring与mybatis三种整合方法
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(一)System.out.print与Log
- spring与mybatis三种整合方法
- spring boot整合mybatis
- spring+springMVC+mybatis三大框架整合学习总结
- mybatis与spring3.1整合
- mybatis和spring整合出现的sql异常
- springboot整合mybatis
- spring和mybatis整合代码
- springMVC+MyBatis+Spring 整合(4) ---解决Spring MVC 对AOP不起作用的问题
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- spring,springmvc,mybatis基本整合(一)--xml文件配置方式(1)
- spring boot整合mybatis的详细实例
- Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法
- Spring MVC+Mybatis+Maven+Velocity+Mysql整合实例
- spring与mybatis三种整合方法
- Spring+SpringMVC+Mybatis+Mysql整合实例【转】
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)