Mybatis insert方法主键回填和自定义操作

 更新时间:2021年07月12日 09:53:14   作者:wanson2015  
这篇文章主要介绍了Mybatis insert方法主键回填和自定义操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

在数据库插入的时候,有很多属性需要我们自己处理,如主键自增字段。

MYSQL中主键根据一定规则生成后,需要我们在插入后去主动获取,以便后面的操作,Mybatis为我们提供了处理的方法。

主键回填

  • keyProperty:指定哪个字段是主键
  • useGeneratedKeys:这个主键是否使用数据库内置生成策略

我们可以在XML文件中进行如下配置:

<insert id="insertUser" parameterType="user" useGeneratedKeys="true" keProperty="id">
 insert into t_user(user_name,age) values (#${userName},#{age})
</insert>

这样我们传入的user对象无需设置id字段,Mybatis会自动进行设置处理,插入成功后id字段会回填到user对象中。

使用自定义规则生成主键

实际工作上有时候主键的生成规则并不是这么简单,比如我们取消t_user的主键自增规则。我们的要求是:

如果t_user表没有数据,我们也要设置主键为1,否则就取主键最大值加2,来设置新的主键。

对此,Mybatis也提供了处理方法,使用SelectKey元素进行处理

<insert id="insertUser" parameterType="user" useGeneratedKeys="true" keProperty="id">
 <SelectKey keProperty="id" resultType="int" order="BEFORE>
  select if(max(id) is null, 1, max(id) + 2) as newId from t_user
 </SelectKey>
 insert into t_user(user_name,age) values (#${userName},#{age})
</insert>

这样我们就可以根据自定义的规则来处理生成主键了。

MyBatis中配置主键回填

主键回填是一个很常见的需求,我们经常需要添加完数据之后,需要获取刚刚添加的数据 id,数据库主键回填在 MyBatis 中的简单实现如下:

useGeneratedKeys设置为true,keyProperty为要回填的属性名。

当插入完成后,这个对象的 id 就会被自动赋值,值就是刚刚插入成功的id。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java 重写与重载方法与区别详解

    Java 重写与重载方法与区别详解

    本篇文章通过实例详细介绍了重写与重载,以及他们的区别,需要的朋友可以参考下
    2017-04-04
  • Java设计模式中的策略(Strategy)模式解读

    Java设计模式中的策略(Strategy)模式解读

    这篇文章主要介绍了Java设计模式中的策略(Strategy)模式解读,对象的某个行为,在不同场景有不同实现方式,可以将这些行为的具体实现定义为一组策略,每个实现类实现一种策略,在不同场景使用不同的实现,并且可以自由切换策略,需要的朋友可以参考下
    2023-10-10
  • Java多条件判断场景中规则执行器的设计

    Java多条件判断场景中规则执行器的设计

    近日在公司领到一个小需求,需要对之前已有的试用用户申请规则进行拓展。本文去掉if 判断,试试用一个规则执行器来替代它,感兴趣的可以了解一下
    2021-06-06
  • 图解Java ReentrantLock的条件变量Condition机制

    图解Java ReentrantLock的条件变量Condition机制

    想必大家都使用过wait()和notify()这两个方法把,他们主要用于多线程间的协同处理。而RenentrantLock也支持这样条件变量的能力,而且相对于synchronized 更加强大,能够支持多个条件变量,本文就来详细说说
    2022-10-10
  • Java使用BigDecimal进行运算封装的实际案例

    Java使用BigDecimal进行运算封装的实际案例

    今天小编就为大家分享一篇关于Java使用BigDecimal进行运算封装的实际案例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Log4j2 重大漏洞编译好的log4j-2.15.0.jar包下载(替换过程)

    Log4j2 重大漏洞编译好的log4j-2.15.0.jar包下载(替换过程)

    Apache 开源项目 Log4j 的远程代码执行漏洞细节被公开,由于 Log4j 的广泛使用,该漏洞一旦被攻击者利用会造成严重危害,下面小编给大家带来了Log4j2 重大漏洞编译好的log4j-2.15.0.jar包下载,感兴趣的朋友一起看看吧
    2021-12-12
  • SpringBoot超详细讲解@Enable*注解和@Import

    SpringBoot超详细讲解@Enable*注解和@Import

    这篇文章主要介绍了SpringBoot @Enable*注解和@Import,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • MyBatis-Plus的yml配置方式小结

    MyBatis-Plus的yml配置方式小结

    本文主要介绍了MyBatis-Plus的yml配置方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • spring boot 集成shiro的配置方法

    spring boot 集成shiro的配置方法

    要在spring boot上集成其他框架,首先要会spring javaconfig方法,利用此方法同样可以配置其他模块。这篇文章主要介绍了spring boot 集成shiro的配置方法,需要的朋友可以参考下
    2018-01-01
  • 分布式锁redisson实现原理源码详解

    分布式锁redisson实现原理源码详解

    这篇文章主要介绍了源码详解分布式锁redisson实现原理,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05

最新评论