sqlmapconfig配置如下<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
  <transactionManager type="JDBC" commitRequired="true">
    <dataSource type="SIMPLE">
      <property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>
      <property name="JDBC.ConnectionURL" value="jdbc:mysql://127.0.0.1:3306/zhiku"/>
      <property name="JDBC.Username" value="root"/>
      <property name="JDBC.Password" value=""/>
    </dataSource>
  </transactionManager>
<sqlMap resource="dao/gadgetCategory.xml" />
</sqlMapConfig>java代码 Reader reader = Resources.getResourceAsReader("sql-map-config.xml");
SqlMapClient sqlMapper;
sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
GadgetCategoryDao dao = new GadgetCategoryDao();
dao.setSqlMapClient(sqlMapper);
dao.insert();dao的insert方法 public void insert() throws SQLException {
try {
sqlMapClient.startTransaction();
GadgetCategory gc = new GadgetCategory();
gc.setName("test0630");
gc.setPid(100000);
gc.setComment("asfafdaf");
sqlMapClient.insert("insertGadgetCategory", gc);
gc.setEnabled(111111111111L);
sqlMapClient.insert("insertGadgetCategory", gc);
sqlMapClient.commitTransaction();
} finally{
sqlMapClient.endTransaction();
}
}gc.setEnabled(111111111111L);这个字段数据库是11位的,我设为12位,故意让他抛异常,结果第一条还是被插进去了,为什么不回滚啊?看了半天ibatis源码,没看出个所以然来,特此请教大家!

解决方案 »

  1.   

    但是确实抛出异常了啊?
    sqlMapClient.startTransaction();
     sqlMapClient.endTransaction();
    好像不起作用啊
      

  2.   

    你会这个吗?http://topic.csdn.net/u/20110630/15/f46fc7b1-30ec-452e-9eaf-e8d33ac0d6cf.html?seed=154935100&r=74137322#r_74137322
      

  3.   

    你可以用spring配置事务 或者用版本3的 版本2会自动截取
      

  4.   

    这个一般都是用spring事务来处理的
      

  5.   

    我会用spring控制,现在是在纯学习ibatis
      

  6.   

    同样的写法,在Oracle内就可以实现回滚,mysql为什么不行。求答案!
      

  7.   

    这个应该和数据库的设置有关系.mysql可以自动截断,具体你可以看一下,你插入到mysql数据库中的数据,应该是被截断的.而oracel没有截断,所以会出异常的.