专栏首页13blog.siteMyBatis + MySQL返回插入成功后的主键id

MyBatis + MySQL返回插入成功后的主键id

这是最近在实现perfect-ssm中的一个功能时碰到的一个小问题,觉得需要记录一下,向MySQL数据库中插入一条记录后,需要获取此条记录的id值,以生成对应的key值存入到redis中,id为自增int主键。

修改

原代码为:

 <insert id="insertArticle" parameterType="Article">
insert into ssm_article(article_title,article_create_date,article_content,add_name)
values(#{articleTitle},#{articleCreateDate},#{articleContent},#{addName})
</insert>

这种方式只是返回一个影响行数值,并不能满足此次需求,于是做了如下修改:

 <insert id="insertArticle" useGeneratedKeys="true" keyProperty="id" parameterType="Article">
insert into ssm_article(article_title,article_create_date,article_content,add_name)
values(#{articleTitle},#{articleCreateDate},#{articleContent},#{addName})
</insert>

在insert中将useGeneratedKeys属性设置为true,并制定keyProperty为Article对象的id,关于这两个参数,官方文档解释如下:

测试

测试用例如下:

    @Test
    public void insertArticleTest() throws Exception {
        Article article = new Article();
        article.setArticleContent("article");
        article.setAddName("13");
        article.setArticleClassID(1);
        article.setArticleTitle("title");
        article.setArticleCreateDate(DateUtil.getCurrentDateStr());
        Assert.assertTrue(article.getId()==null);
        System.out.println("insert前article的id:"+article.getId());
        //执行insert操作
        articleDao.insertArticle(article);
        Assert.assertTrue(article.getId()!=null);
        System.out.println("insert后article的id:"+article.getId());
    }

结果如下:

mysql中表的记录如下:

结语

首发于我的个人博客,新的项目演示地址:perfect-ssm,登录账号:admin,密码:123456

如果有问题或者有一些好的创意,欢迎给我留言,也感谢向我指出项目中存在问题的朋友。

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 《Spring Boot 入门及前后端分离项目实践》系列介绍

    本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 个部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot...

    我是十三
  • 短信发送接口被恶意访问的网络攻击事件(三)定位恶意IP的日志分析脚本

    作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载。 前言 承接前文《短...

    我是十三
  • thymeleaf模板引擎调用java类中的方法(附源码)

    前言 由于开源了项目的缘故,很多使用了My Blog项目的朋友遇到问题也都会联系我去解决,有的是把问题留在项目的issue里提出,有的是在我的私人博客里留言,...

    我是十三
  • 使用rails实现最简单的CRUD

    这里定义了路由hello/index,并且使用root方法将首页修改为了hello控制器下的index方法,也就是两路由的控制器一致。

    用户1515472
  • 面向对象的设计原则

    单一职责原则定义:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。

    SmileNicky
  • 陈勋教授的脑电信号降噪视频与讲座总结

    中国科学技术⼤学的陈勋教授陈勋教授分享的脑电信号降噪讲座,可谓是干货满满。这里特别感谢陈勋教授,也感谢南方科技大学的神经计算与控制实验室(NCC lab)的生物...

    脑机接口社区
  • 写给小白的android基础面试笔试题(二)

    答:这道题呢不管是在笔试中也好面试中也好,会被经常拿来问,因为这里面涉及到的知识点甚多,这里你就要回答什么是Handler机制,有何作用,然后面试官肯定还会问,...

    用户2802329
  • 基于分形结构的极深神经网络,超越 ImageNet 2015 冠军 ResNet(附论文下载)

    【新智元导读】ResNet 是 ImageNet 2015 冠军,通过让网络对残差进行学习,在深度和精度上做到了比 CNN 更加强大。于是有人认为残差结构对此很...

    新智元
  • Kotlin之提供委托

    通过定义 provideDelegate 操作符,可以扩展创建属性实现所委托对象的逻辑。 如果 by 右侧所使用的对象将 provideDelegate 定义为...

    xiangzhihong
  • java高并发系列 - 第6天:线程的基本操作

    新建线程很简单。只需要使用new关键字创建一个线程对象,然后调用它的start()启动线程即可。

    路人甲Java

扫码关注云+社区

领取腾讯云代金券