阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MyBatis事务

228次阅读
没有评论

共计 1954 个字符,预计需要花费 5 分钟才能阅读完成。

1、MyBatis 事务提交

在 JDBC 中我们可以通过手动方式将事务的提交改为手动方式,通过 setAutoCommit() 方法就可以调整。

MyBatis 中事务的提交方式,本质上就是调用 JDBC 的 setAutoCommit() 来实现事务控制。

@Test
public void addUser(){User u=new User();
u.setUsername("李四");
u.setBirthday(new Date());
u.setSex("男");
u.setAddress("北京海淀");
userDao.addUser(u);
}
@Test
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;
}

查询执行结果:

MyBatis 事务
删除(CUD)执行结果:

MyBatis 事务

这是我们的 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);

@Test
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());
}
@Before
// 在测试方法执行之前执行
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);
}
@After// 在测试方法执行完成之后执行
public void destroy() throws Exception{//session.commit();
//7. 释放资源
session.close();
in.close();}

增加执行结果:

MyBatis 事务

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-06-06发表,共计1954字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中