1. applicationContext.xml
- <!--这是原先的sqlSession和dao的配置, 增加事务时候配置保持不变-->
- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
- <property name="dataSource" ref="dataSource"></property>
- <property name="configLocation" value="classpath:mybatis.xml"></property>
- <property name="mapperLocations" value="classpath:com/sjl/dao/*-mapper.xml"></property>
- </bean>
- <bean id="idao" class="com.sjl.dao.IdaoImpl">
- <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
- </bean>
- <!--增加的mybatis 事务控制 -->
- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource"></property>
- </bean>
- <tx:annotation-driven transaction-manager="transactionManager"/>
- package com.sjl.base;
- import java.io.Serializable;
- import java.util.HashMap;
- import java.util.List;
- import javax.annotation.Resource;
- import org.springframework.transaction.annotation.Transactional;
- import com.sjl.common.EntityClassUtil;
- import com.sjl.common.Pager;
- import com.sjl.dao.Idao;
- public class AbstractBaseDao<T, PK extends Serializable> implements BaseDao <T, PK> {
- @Resource
- private Idao<T, PK> idao;
- private Class entityClass = EntityClassUtil.getEntityClass(getClass());
- /**
* 如果没有配置@Transactional 使用sqlSession的jdbc事务 每一个操作都是一个单独的事务
* 抛出异常事务也不会回滚 无论抛出什么异常了
*/
- @Transactional</span>
- public void save(T entity) {
- idao.save(entity);
- /**
- * 只有抛出运行期异常 事务才会回滚,如果抛出Exception默认是不会回滚的,
- * 需要配置@Transactional注解才可以
- */
- throw new RuntimeException();//抛出异常, 事务回滚
- }
- public void delete(PK pk) {
- idao.delete(entityClass, pk);
- }
- public Pager<T> findByPage(int pageOffset, int pageSize) {
- HashMap<String, Integer> map = new HashMap();
- map.put("pageOffset", pageOffset);
- map.put("pageSize", pageSize);
- Pager<T> pager = idao.findByPage(entityClass, map);
- return pager;
- }
- }
- 其中的idao定义如下:
- package com.sjl.dao;
- import java.io.Serializable;
- import java.util.List;
- import java.util.Map;
- import org.mybatis.spring.support.SqlSessionDaoSupport;
- import org.springframework.stereotype.Repository;
- import com.sjl.common.Pager;
- @Repository("idao")
- public class IdaoImpl<T, PK extends Serializable> extends SqlSessionDaoSupport implements Idao<T, PK> {
- public void save(T entity) {
- this.getSqlSession().insert(entity.getClass().getName()+".add", entity);
- }
- public void delete(Class<T> entityClass, PK pk) {
- this.getSqlSession().insert(entityClass.getName()+".delete", pk);
- }
- public Pager<T> findByPage(Class<T> entityClass, Map param){
- Pager<T> pager = new Pager();
- List<T> pageContent = this.getSqlSession().selectList(entityClass.getName()+".findPageContent", param);
- pager.setPageContent(pageContent);
- int count = this.getSqlSession().selectOne(entityClass.getName()+".findTotal");
- pager.setTotalCount(count);
- return pager;
- }
- }