首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

急 急 SpringJDBC 宣言式事物不回滚 求大家帮忙看看

2012-06-27 
急急急 急急急SpringJDBC 声明式事物不回滚求大家帮忙看看basedaopublic class BaseDaoT, PK extends Ser

急急急 急急急 SpringJDBC 声明式事物不回滚 求大家帮忙看看
basedao

public class BaseDao<T, PK extends Serializable> extends JdbcDaoSupport{

/**
* 添加 ,属性和数据库字段名一致,返回主键
* @param objForSave ,继承Saveable 的接口的类
* @return
*/
public Number saveAndReturnKey(Saveable objForSave){
return saveAndReturnKey(objForSave, objForSave.getTableName(), objForSave.getKeyColumns());
}

/**
* 添加实体,返回主键
* @param objForSave
* @param tableName
* @param columnAndValue
* @param keyColumns
* @return
*/
public Number saveAndReturnKey(Object objForSave,String tableName,String...keyColumns){
SimpleJdbcInsert insertActor =   getSimpleJdbcInsert();
insertActor.setTableName(tableName);
insertActor.usingGeneratedKeyColumns(keyColumns);
Number newId = insertActor.executeAndReturnKey(new BeanPropertySqlParameterSource(objForSave)) ;
traceSql(insertActor.getInsertString());
return newId;
}
   * 更新数据的方法
   * @param sql
   * @param T entity
*/ 
public void update(String sql,T entity){ 
    getJdbcTemplate().update(sql,entity);



}



@Repository("userMgrDao")
@SuppressWarnings("unchecked")
public class UserMgrDao extends BaseDao{

//添加一个用户
public Users addUser(final Users users){
  users.setId(saveAndReturnKey(users).intValue());
  return users;
}
/**
   * 删除数据的方法
   * @param id
   */ 
  public void delete(String id){ 
    String sql = "delete from users where id=?"; 
    update(sql, id); 
  } 

}


@Service("userMgrService")
@Transactional
public class UserMgrService extends BaseService implements IUserMgrService{
public UserMgrService(){

}
private static Logger logger = Logger.getLogger(UserMgrService.class);

@Autowired
private UserMgrDao userMgrDao;
  @Transactional(rollbackFor=Throwable.class)
public void save(Users user) throws ServiceException {
    try {
user.setImportdate(new Date());
user.setFast(1L);
user.setUpdatedate(new Date());
user.setImportuserid(1L);
user.setUpdateuserid(1L);
userMgrDao.addUser(user);
}catch (Exception e) {
throw new ServiceException("获取失败", e);
}

}

@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.READ_COMMITTED)
public  void delete(String id){
try {
    userMgrDao.delete(id);
} catch (Exception e) {
logger.error(e);
}
}

}

applicationContext.xml 
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans  
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
           http://www.springframework.org/schema/context  
           http://www.springframework.org/schema/context/spring-context-3.0.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
default-autowire="byName">
<!-- 如果有多个 DispatcherServlet 请把关于数据库和server部分的bean在web.xml中使用spring 的 listener加载-->
<!-- 自动扫描controller bean,把作了注解的类转换为bean -->
<!-- 自动扫描组件,这里要把web下面的 controller去除,他们是在spring3-servlet.xml中配置的,如果不去除会影响事务管理的。-->
<context:component-scan base-package="com.dahua" >
<context:exclude-filter type="regex" expression="com.dahua.module.usermgr.controller.*"/>
</context:component-scan>

<!-- 事务  -->
<bean id="transactionManager"
ref="dataSource" />
</bean>

<!-- 加载jdbc.properties文件   -->
     <bean id="propertyConfigurer" 
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="maxActive" value="20" /> 
        <property name="initialSize" value="1" /> 
        <property name="maxWait" value="60000" /> 
        <property name="maxIdle" value="15" /> 
        <property name="minIdle" value="5" /> 
        <property name="removeAbandoned" value="true" /> 
        <property name="removeAbandonedTimeout" value="180" /> 
        <property name="defaultAutoCommit" value="false" /> 
</bean>
<!-- 声明使用注解式事务 --> 
    <tx:annotation-driven transaction-manager="transactionManager" /> 

</beans> 

测试方法:
@Test
public void testList() {

try {
//全部用户
List<Users> list=iuserMgrService.getUsers();
//按某个字段查找
for(Users u:list){
//System.out.println(u.getLoginname()+"--------"+u.getCoding());
}

Users user1 = new Users();
user1.setLoginname("111");
user1.setUsername("111");
user1.setCoding("11");
iuserMgrService.save(user1);
Users user2 = new Users();
//user2.setLoginname("111");
//user2.setUsername("111");
//user2.setCoding("11");
                           iuserMgrService.delete("3487");
                 iuserMgrService.delete("3487");

iuserMgrService.save(user2);
/*System.out.println("用户数量:"+list.size());
Users users=userMgrService.getUserByUserName("沈为人");
System.out.println(users.getLoginname()+"--------"+users.getCoding());
Users users1=userMgrService.getUserById(1);
System.out.println(users1.getLoginname()+"--------"+users1.getCoding());*/




} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

loginname  不可为空   添加第二个报错 但是添加和删除操作没有回滚

数据库是mysql 表示:InnoDB
 

热点排行