spring3与mybatis3的整合一例

整合版本:

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日志中可以看到;

以上就是整合的重点,欢迎交流!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值