前言
今天在学习MyBatis的时候,使用select查询语句可以查出结果并准确无误,但是使用insert语句的时候无法插入,因为我使用的是mysql数据库,并且给主键ID设置了自动递增,在每次插入之后自动递增值都会+1,不过数据库就是没有记录,我想应该是数据库事务没有提交的原因导致的。
解决办法
在进行了一些测试之后,果不其然是事务没有自动提交的原因导致回滚而造成的没有插入成功,现提供如下两种解决方案。
方案一
在进行了insert、update、delete等操作之后,在其后进行手动提交事务,例如:
public void addUser(User user) {
SqlSession sqlSession = dbAccess.getSqlSession();
sqlSession.insert("User.addUser",user);
sqlSession.commit();
sqlSession.close();
}
方案二
在MyBatis的SqlSessionFactory中打开一个新的会话时,是可以进行设定是否自动提交事务。
public SqlSession getSqlSession() {
//拿到MyBatis配置文件,获取数据库连接信息
Reader reader = null;
try {
reader = Resources.getResourceAsReader("mybatis-config.xml");
} catch (IOException e) {
e.printStackTrace();
}
//获取到数据库会话工厂SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//打开一个数据库会话
return sqlSessionFactory.openSession(true);
}
后记
经过如上的操作之后,这时使用MyBatis进行增删改操作时候就不会出现之前的事务自动回滚问题了。