MyBatis获取插入记录的自增长字段值(ID)

 更新时间:2017年11月22日 11:13:32   作者:robot_man  
本文分步骤给大家介绍了MyBatis获取插入记录的自增长字段值的方法,在文中给大家提到了mybatis返回插入数据的自增长id,需要的朋友可以参考下

第一步:

    在Mybatis Mapper文件中添加属性“useGeneratedKeys”和“keyProperty”,其中keyProperty是Java对象的属性名!

<insert id="insert" parameterType="Spares" 
 useGeneratedKeys="true" keyProperty="id">
 insert into spares(spares_id,spares_name,
  spares_type_id,spares_spec)
 values(#{id},#{name},#{typeId},#{spec})
 </insert>

第二步:

    Mybatis执行完插入语句后,自动将自增长值赋值给对象Spares的属性id。因此,可通过Spares对应的getter方法获取!

 /**
 * 新增备件
 * @author hellostory
 * @param spares
 * @return
 */
 @RequestMapping(value = "/insert")
 @ResponseBody
 public JsonResponse insert(Spares spares) {
 int count = sparesService.insert(spares);
 System.out.println("共插入" + count + "条记录!"
  + "\n刚刚插入记录的主键自增长值为:" + spares.getId());

ps:mybatis返回插入数据的自增长id

今天测试反馈一个bug,现象是新注册的用户可以看到所有人的报告,老用户没问题,查看日志发现原来查询的时候是新注册的用户的id为null,所以进行了全表有效数据查询。 但是表的主键不允许为空,怎么会出现新的注册用户id为null呢?原因是在service层代码直接将参数对象返回了,而xml没有做任何配置。

具体的解决方案是在xml中的insert方法配置

useGeneratedKeys=”true” keyProperty=”registerId”

keyProperty值对应实体VO对象中的主键属性

具体如下:

<code class="hljs java">@Override
  public Registers create(Registers r) {
    registersMapper.insert(r);
    return r;
  }</code>

registermapper.xml的insert方法如下:

<code class="hljs xml"><insert id="insert" keyproperty="registerId" parametertype="com.ciji.zzaservice.pojo.base.Registers" usegeneratedkeys="true">

执行正常的insert语句

</insert></code>

这样在controller层就可以得到新插入数据的自增长主键了。

关于在xml中添加两个属性的意思,网上解释如下:

useGeneratedKeys

(仅对insert有用)这会告诉MyBatis使用JDBC的getGeneratedKeys方法来取出由数据(比如:像MySQL和SQL Server这样的数据库管理系统的自动递增字段)内部生成的主键。默认值:false。

keyProperty

(仅对insert有用)标记一个属性,MyBatis会通过getGeneratedKeys或者通过insert语句的selectKey子元素设置它的值。默认:不设置。

总结

以上所述是小编给大家介绍的MyBatis获取插入记录的自增长字段值(ID),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 一文详解如何使用线程池来优化我们的应用程序

    一文详解如何使用线程池来优化我们的应用程序

    线程池是一种工具,但并不是适用于所有场景。在使用线程池时,我们需要根据应用程序的性质、计算资源的可用性和应用程序的需求进行适当的配置。本文主要介绍了如何使用线程池来优化我们的应用程序,需要的可以参考一下
    2023-04-04
  • maven下载依赖失败问题及解决

    maven下载依赖失败问题及解决

    这篇文章主要介绍了maven下载依赖失败问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • java实现大文件导出的实现与优化

    java实现大文件导出的实现与优化

    这篇文章主要为大家详细介绍了java实现大文件导出的实现与优化的相关资料,文中的示例代码讲解详细,对我们深入了解java有一定的帮助,感兴趣的小伙伴可以了解下
    2023-11-11
  • Java Spring框架创建项目与Bean的存储与读取详解

    Java Spring框架创建项目与Bean的存储与读取详解

    本篇文章将介绍Spring项目的创建,IDEA国内源的配置以及Bean的存储与读取,所谓的Bean其实就是对象的意思,更详细地说Spring Bean是被实例的,组装的及被Spring 容器管理的Java对象
    2022-07-07
  • Java设计模式之享元模式

    Java设计模式之享元模式

    这篇文章主要为大家详细介绍了Java设计模式之享元模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Java中String的JdbcTemplate连接SQLServer数据库的方法

    Java中String的JdbcTemplate连接SQLServer数据库的方法

    这篇文章主要介绍了Java中String的JdbcTemplate连接SQLServer数据库的方法,在研发过程中我们需要与其他系统对接的场景,连接SQLServer拉取数据,所以就用jdbc连接数据库的方式连接外部数据源,需要的朋友可以参考下
    2021-10-10
  • myeclipse无法部署项目问题及解决方法

    myeclipse无法部署项目问题及解决方法

    最近小编遇到到棘手的问题,myeclipse无法部署项目,点击这个部署按钮没有反应。怎么解决呢,下面小编给大家代理的myeclipse无法部署项目问题及解决方法 ,感兴趣的朋友一起看看吧
    2018-10-10
  • maven搭建spring项目(图文教程)

    maven搭建spring项目(图文教程)

    下面小编就为大家带来一篇maven搭建spring项目(图文教程)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 一招教你优化Java代码中大量的if/else

    一招教你优化Java代码中大量的if/else

    当代码已经复杂到难以维护的程度之后,只能狠下心重构优化。那,有什么方案可以优雅的优化掉这些多余的if/else?本文就来和大家详细聊聊
    2023-03-03
  • Java中seata框架的XA模式详解

    Java中seata框架的XA模式详解

    这篇文章主要介绍了Java中seata框架的XA模式详解,Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务,Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案,需要的朋友可以参考下
    2023-08-08

最新评论