您的位置:首页 > 编程语言 > Java开发

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的主要配置代码:

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

以上就是整合的重点,欢迎交流!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: