【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插入不显示,但是主键自增了?》】

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我的博客

TP入门第八天

[小型留言板-增删查改] 1、先建立数据库lyb,然后建立表lyb_notes 建表代码如下: CREATE TABLE `lyb_notes` ( `id` ...

3528
来自专栏数据和云

深入原理:Consistent Reads 与 buffer cache

黄玮(Fuyuncat) 资深Oracle DBA,个人网www.HelloDBA.com,致力于数据库底层技术的研究,其作品获得广大同行的高度评价. 编辑手记...

3627
来自专栏乐沙弥的世界

基于用户管理的同机数据库克隆

      Oracle 同机数据库复制或克隆经常用于提供测试或开发环境。对于生成的克隆数据库有多种方式,如使用冷备方式进行数据库克隆(需要使用nid修改db_...

751
来自专栏互联网杂技

mysql命令之对用户,库,表操作--基础教程(三)

创建用户: 进入在root用户进行操作: CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456'; 授权...

34711
来自专栏Java成神之路

简单分析什么是SQL注入漏洞

现在很多人在入侵的过程中基本都是通过SQL注入来完成的,但是有多少人知道为什么会有这样的注入漏洞呢?有的会随口说着对于字符的过滤不严造成的。但是事实是这样吗?我...

6952
来自专栏云计算教程系列

在Ubuntu 16.04上安装和配置MySQL Workbench

MySQL Workbench是一个功能丰富的图形工具,用于建模数据,构建SQL查询,管理MySQL服务器等。本教程将向您展示如何使用Ubuntu软件包管理器安...

1334
来自专栏pangguoming

CentOS下的Mysql的安装和使用

1.使用安装命令 :yum -y install mysql mysql-server mysql-devel 安装完成却发现Myserver安装缺失,在网上找...

4556
来自专栏维C果糖

史上最简单的 MySQL 教程(二十二)「数据的高级操作 之 更新 & 删除」

此外,在删除记录的过程中,如果表中存在自增长的主键,那么删除之后,自增长不会还原。执行如下 SQL 语句,进行测试:

3508
来自专栏清风

MySQL数据库 原

其中“/yourpath/crontab_mysql.sql”为需要执行的sql语句。

933
来自专栏我的博客

PHP读取excel插入mysql数据库

php读取excel在网上找了n多办法,没有合适的。但是也有一定的收获,就是尽量实用类,不用odbc或者csv格式读取——因为它可以跨平台。各自的优缺点在这里都...

3234

扫码关注云+社区