為什么我的mybatis是默認 自動提交的呢
當我直接 commit的時候(沒寫sqlSession.close()),控制臺出日志了, 但是數據庫沒有更改。
去掉commit也一樣。
而當我 在commit后面加上?sqlSession.close()后, 數據庫更改了。
去掉commit,數據庫也會更改。
public?static?void?main(String[]?args)?{ delete(5); List<Student>?list?=?queryStudentByID(new?Student(5,?12,?"li")); System.out.println(list); } public?static?void?delete(int?id)?{ DBAccess?dbAccess?=?new?DBAccess(); SqlSession?sqlSession?=?null; try?{ sqlSession?=?dbAccess.getSqlSession(); sqlSession.selectList("Student.delete",?id); sqlSession.commit(); //sqlSession.close();
控制臺
DEBUG [main] - ==> ?Preparing: DELETE FROM student WHERE id =??
DEBUG [main] - ==> Parameters: 5(Integer)
DEBUG [main] - ==> ?Preparing: SELECT * FROM student WHERE id = ??
DEBUG [main] - ==> Parameters: 5(Integer)
DEBUG [main] - <== ? ? ?Total: 1
[Student [id=5, age=14, name=li]]
2016-02-02
你這個方法是根據id來刪除數據庫表的數據.但是你在方法里面卻用了selectList()方法,這個方法是用來查詢返回多條數據時用的.如果你要刪除,你就用delete()這個方法.還有一點是Mybatis對數據庫的增刪改操作才需要提交事務.對查詢操作不需要提交事務.SqlSession關不關閉與對數據庫操作返回的結果集沒有任何影響.
把圖片代碼中的第11行
:sqlSession.selectList("Student.delete",?id);
改為:sqlSession.delete("Student.delete",?id);