前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【MyBatis框架点滴】——mybatis插入不显示,但是主键自增了?

【MyBatis框架点滴】——mybatis插入不显示,但是主键自增了?

作者头像
DannyHoo
发布2018-09-13 12:31:45
1.7K0
发布2018-09-13 12:31:45
举报
文章被收录于专栏:Danny的专栏Danny的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1337136

  【本文的讨论是基于上篇文章中的例子和环境: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管理时,事务需要显示提交。

  所以需要在执行插入后,手动提交事务。

代码语言:javascript
复制
/**
     * 添加用户信息
     * @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插入不显示,但是主键自增了?》】

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年05月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档