MyBatis主键回填和自定义主键

1. 主键回填

JDBC中的Statement对象在执行插入的SQL后,可以通过getGeneratedKeys方法获得数据库生成的主键,这样便能达到获取主键的功能。在insert语句中,有一个开关属性:useGeneratedKeys,用来控制是否打开这个功能,它的默认值是false。当打开了这个开关,还需要配置其属性:keyProperty或keyColumn,告诉系统把生成的主键放到POJO的哪个属性中。如果存在多个主键,就使用逗号隔开。

代码清单:让程序返回主键,并将主键封装到POJO的id属性中。

    <insert id="insertUser" parameterType="user" useGeneratedKeys="true" keyProperty="id">INSERT INTO user(id,username,birthday,sex,address)VALUES(#{id},#{username},#{birthday},#{sex},#{address})</insert>

即:打开了useGeneratedKeys属性,并配置了keyProperty=“id”,意思是将返回的id封装到user对象的id属性中。

这样,拿到了这个id主键值,就可以在业务代码中执行下一步的关联和操作了。

2. 自定义主键

在执行插入语句时,可以自定义主键生成规则。

实验要求:

  1. 当角色表记录为空时,id设置为1.

    1. 当角色表记录不为空时,id设置为当前id加2.

Mybatis对这样的场景提供了支持,它主要依赖于selectKey元素进行支持,它允许自定义键值的生成规则。下面使用代码完成自定义主键的规则要求。

    <insert id="insertBySelf" parameterType="user" useGeneratedKeys="true"><selectKey keyProperty="id" resultType="Integer" order="BEFORE">SELECT if(MAX(id) = NULL ,1,MAX(id)+2) FROM user</selectKey>INSERT INTO user(id,username,birthday,sex,address)VALUES(#{id},#{username},#{birthday},#{sex},#{address})</insert>

代码解析:

  • selectKey元素的keyProperty属性指定了采用哪个属性作为POJO的主键。
  • resultType告诉MyBatis将返回一个Integer型的结果集。
  • order属性设置为BEFORE说明将于当前定义的SQL前执行。说明它会在插入之前先执行生成主键的SQL,然后插入数据。如果有一些特殊需要,可以把它设置为AFTER,比如一些插入语句的内部可能有嵌入索引调用,这样它就会在插入语句之后执行了。

测试:

– 第一次插入

 @Testpublic void testInsertBySelf(){User user = new User();user.setUsername("披甲龙龟");user.setSex("男");user.setAddress("恕瑞玛");user.setBirthday(new Date());dao.insertBySelf(user);System.out.println(user.getId());//此时返回id为71}

– 第二次插入

    @Testpublic void testInsertBySelf(){User user = new User();user.setUsername("疾风亚索");user.setSex("男");user.setAddress("恕瑞玛");user.setBirthday(new Date());dao.insertBySelf(user);System.out.println(user.getId());//此时返回id为73}

即:通过自定义主键生成策略完成了id的生成。

MyBatis主键回填和自定义主键相关推荐

  1. java生成主键id,java自定义主键生成器

    1. 实体类代码 @Entity @Data @Table(name = "user") public class User implements Serializable { @ ...

  2. MyBatis主键回填

    方式一 <insert id="insertBook" useGeneratedKeys="true" keyProperty="id" ...

  3. Mybatis使用SelectKey自定义主键

    SelectKey在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题,他可以很随意的设置生成主键的方式. ① 属性 ① keyProperty : selectKey 语句结果应该 ...

  4. MybatisPlus:SQL语句打印、SQL分析、自定义主键值策略填充(IdType.INPUT)、动态表名、多租户、枚举、类型处理器、连表自定义SQL(使用wrapper)

    文章目录 1. 简单使用以及配置 - 带分页配置 2. 用法 2.0 Wrapper属性 2.1 @TableId - 自定义主键生成策略 2.2 @TableField - 自定义字段值填充 2.3 ...

  5. 最新Mybatis插入数据返回自增主键详细配置

    Mybatis插入数据返回自增主键 Mybatis插入数据以后只会返回影响的数据库行数,如果是插入一条数据成功则返回1,失败返回零,插入多条返回插入成功的数量. 通过注解或者xml配置无法直接返回自增 ...

  6. MyCat分片规则(全局表,ER分片表,多对多关联,主键分片VS非主键分片),MyCat常用的分片规则(15中分片规则),自定义MyCat分片规则,其它术语

    1 MyCat分片规则 数据切分中重要的几条原则,其中有几条数据冗余,表分组(Table Group). 1.1全局表 如果你的业务中有些数据类似于数据字典,比如配置文件的配置,常用业务的配置或数据量 ...

  7. mongod自定义主键

    关于mongodb中设置主键问题 默认主键 ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是: 前 4 个字节表示创建 unix 时间戳,格林尼治时间 UTC 时 ...

  8. rails 自定义主键_带有Rails 6 Webpacker和turbolink的自定义和第三方javascript指南

    rails 自定义主键 Ihave recently had the pleasure of updating our app from Rails 4 to Rails 6. Though it i ...

  9. 19_clickhouse,数据查询与写入优化,分布式子查询优化,外部聚合/排序优化,基于JOIN引擎的优化,SQL优化案例,物化视图提速,查询优化常用经验法则,选择和主键不一样的排序键,数据入库优化

    25.数据查询与写入优化 25.1.分布式子查询优化 25.1.1.分布式表的IN查询示例1(普通IN子查询.IN子查询为本地表) 25.1.2.分布式表的IN查询示例2(普通IN子查询.IN子查询为 ...

最新文章

  1. python 编程一日一练-Python一日一练02----诗词生成器
  2. ST17H26调试板操作注意事项
  3. 后端:Java中如何更优雅的处理空值,看完你就懂了!
  4. pjsip视频通信开发(上层应用)之EditText重写
  5. WindowManager.LayoutParams类
  6. svn 合并问题 MERGE of '/svn/web': 200 OK (http://xx.xx.xx.xx)
  7. 【C语言】qsort函数用法(转)
  8. fatfs 文件属性_FATFS文件系统剖析(全).
  9. 验证空间变形:电子在测地线的圆形轨道上辐射行为
  10. 液晶电视的驱动板与逻辑板维修
  11. 2021.04.07 126邮箱自动登陆
  12. 使用矩阵分解找到相似歌曲
  13. gamma软件linux安装图示,Ubuntu下安装GAMMA过程(转)
  14. vue项目的导出功能
  15. 【考研】汤家凤数学规划
  16. 调试页面或样式一定要关闭拦截广告的插件
  17. Word文件怎么打印
  18. Laravelblade模板语法初体验
  19. 每日新闻 | Google AI 负责人Jeff Dean:机器学习让计算机更智能
  20. 虚拟机VMware tools安装【转载】

热门文章

  1. Springboot+mysql学生就业信息管理系统-计算机毕业设计源码95340
  2. vscode标签插件bookmarks
  3. 任何类似问题 libstdc++.so.6: version `GLIBCXX_3.4.26’ not found 的一个通用解决方法
  4. php 让百度蜘蛛抓取403,百度蜘蛛不抓取页面的解决方法
  5. matlab——plot函数大探索!这里有几乎关于plot的所有知识点
  6. 揭秘连环销售的秘密,打造客户的重复购买次数
  7. php程序设计ppt,PHP程序设计基础知识.ppt
  8. J2EE程序设计复习
  9. 学计算机35岁真的会失业吗,程序员35岁会失业是真的吗
  10. 分布式架构下的负载均衡技术:分类、原理、算法、常见方案