共计 1954 个字符,预计需要花费 5 分钟才能阅读完成。
1、MyBatis 事务提交
在 JDBC 中我们可以通过手动方式将事务的提交改为手动方式,通过 setAutoCommit() 方法就可以调整。
MyBatis 中事务的提交方式,本质上就是调用 JDBC 的 setAutoCommit() 来实现事务控制。
public void addUser(){User u=new User(); | |
u.setUsername("李四"); | |
u.setBirthday(new Date()); | |
u.setSex("男"); | |
u.setAddress("北京海淀"); | |
userDao.addUser(u); | |
} | |
public void findAll(){List<User> list=userDao.findAll(); | |
for(User u :list){System.out.println(u); | |
} | |
} |
public int addUser(User u) {SqlSession session=factory.openSession(); | |
int n=session.insert("com.tyschool.mb002.user.dao.IUserDao.addUser",u); | |
session.commit(); | |
session.close(); | |
return n; | |
} | |
public List<User> findAll() {SqlSession session=factory.openSession(); | |
List<User> list=session.selectList("com.tyschool.mb002.user.dao.IUserDao.findAll"); | |
session.close(); | |
return list; | |
} |
查询执行结果:
删除(CUD)执行结果:
这是我们的 Connection 的整个变化过程,通过分析我们能够发现之前的 CUD 操作过程中,我们都要手动进行事务的提交,原因是 setAutoCommit() 方法,在执行时它的值被设置为 false 了,所以我们在 CUD 操作中,必须通过 session.commit() 方法来执行提交操作。
注意:
如果想在控制台显示 MyBatis 的整个操作过程,我们需要在 SqlMapConfig.xml 中用到 settings 全局配置
<settings> | |
<setting name="logImpl" value="STDOUT_LOGGING" /> | |
</settings> |
2、MyBatis 事务自动提交
前面我们通过分析发现我们在 CUD 操作过程中,都要手动进行事务的提交,原因是 setAutoCommit() 方法,在执行时它的值被设置为 false 了,所以我们在 CUD 操作中,必须通过 session.commit() 方法来执行提交操作。
那么要想自动提交,我们则需要将 setAutoCommit(false) 改为 true, 设置如下
SqlSession session = factory.openSession(true);
public void testAddUser(){User_old user=new User_old(); | |
user.setUsername("王小红"); | |
user.setBirthday(new Date()); | |
user.setAddress("北京昌平"); | |
user.setSex("女"); | |
System.out.println("保存前:"+user); | |
int id=userDao.addUser(user); | |
System.out.println("保存后:"+user); | |
System.out.println(user.getId()); | |
} | |
// 在测试方法执行之前执行 | |
public void init()throws Exception {//1. 读取配置文件 | |
in = Resources.getResourceAsStream("SqlMapConfig.xml"); | |
//2. 创建构建者对象 | |
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); | |
//3. 创建 SqlSession 工厂对象 | |
factory = builder.build(in); | |
// 4. 创建 SqlSession 对象 | |
session = factory.openSession(true); | |
//5. 创建 Dao 的代理对象 | |
userDao = session.getMapper(IUserDao.class); | |
} | |
// 在测试方法执行完成之后执行 | |
public void destroy() throws Exception{//session.commit(); | |
//7. 释放资源 | |
session.close(); | |
in.close();} |
增加执行结果:
正文完
星哥玩云-微信公众号
