事务管理

全局的异常处理要放在@controller层抛出,不能捕获

 数据库的事务一定要放在@service层

1,基于注解声明式事务

  <!-- 设定transactionManager -->

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

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

    </bean>

    <!-- 使用annotation定义事务 -->

    <tx:annotation-driven transaction-manager="transactionManager" />

    @Override

@Transactional(rollbackFor=Exception.class)//标记回滚方式(默认是runningTimeException,)

public int updateUser(String myRole, OpmUser user, int flag) throws Exception {

// TODO Auto-generated method stub

if(user.getId()!=null&&!"".equals(user.getId())){

flag= updateOpmUser(user);

}else{

String psd= PasswordMD5.createEncryptPSW("123");

user.setPassword(psd);

insertUser(user);

if(!"".equals(myRole)&&myRole!=null){

OpmUserRole ur = new OpmUserRole();

ur.setRoleid(myRole);

//ur.setUserid(user.getId());//mybatis的通用mapper会自动插入返回主键

flag=opmUserRoleMapper.insert(ur);//这里用户id为空插入异常

}

}

return flag;

}

  2,基于《tx》声明标签声明式事务

  面向切面也要声明是那种异常事务回滚

猜你喜欢

转载自yuhuiblog6338999322098842.iteye.com/blog/2309821