【MyBatis框架点滴】——mybatis插入不显示,但是主键自增了?
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/51423830
【本文的讨论是基于上篇文章中的例子和环境:MyBatis3.3+MySql5.6】
mybatis插入了一条数据,查看数据库时并没有显示刚刚插入的数据,但是调试时发现已经成功插入了一条记录(insert返回值为1),而且主键也自增了(前提是表已经设置了主键自增)。
这是为什么呢?
如图,这是原来表中的数据,主键id是自增的,现在表中id最大值为14:
执行插入操作前,user的id为0:
执行插入操作后,user的id由数据库中的id自增为15:
执行结束后查看数据库中的数据,id为15的这条数据并没有插入。
郁闷了10秒钟后,猜想应该是事务的问题(更新数据库不报错但更新不成功往往是事务没执行完毕)。于是就查资料~结果不出我所料,果然是事务没提交。
在上篇文章中,我们在SqlMapConfig.xml中设置<transactionManager type="JDBC" />
,使用JDBC事务,并由mybatis管理。
JDBC事务提供了两种事务模式:自动提交和手动提交,默认是自动提交(我们在只用jdbc操作数据库时,执行单条sql并不需要手动提交事务)。
但是jdbc事务由mybatis管理时,事务需要显示提交。
所以需要在执行插入后,手动提交事务。
/**
* 添加用户信息
* @param user
* @throws Exception
*/
@Override
public int insertUser(User user) throws Exception {
SqlSession session=sqlSessionFactory.openSession();
int i=session.insert("com.danny.mybatis.insertUser", user);
session.commit();//提交事务
return i;
}
这时,就可以成功插入到数据库中了。~
拓展:
解决这个问题还有一个方法,就是修改mysql表的存储引擎,出现上面的问题,说明表的存储引擎一定是支持事务的如InnoDB,因此可以把存储引擎设置为事务不安全的类型如MyIASM。
【 转载请注明出处——胡玉洋《【MyBatis框架点滴】——mybatis插入不显示,但是主键自增了?》】
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释