测试类:com.yjw.demo.PrimaryKeyTest

自增长列

数据库表的主键为自增长列,在写业务代码的时候,经常需要在表中新增一条数据后,能获得这条数据的主键 ID,MyBatis 提供了实现的方法。

StudentMapper.xml

<insert id="insertByAutoInc" parameterType="studentDO" keyProperty="id" useGeneratedKeys="true">insert into t_student (name, sex, selfcard_no, note)values (#{name,jdbcType=VARCHAR},#{sex,jdbcType=TINYINT},#{selfcardNo,jdbcType=BIGINT},#{note,jdbcType=VARCHAR})
</insert>

通过配置两个属性(keyProperty、useGeneratedKeys)获取表中生成的自增长主键。

  • keyProperty:表示以哪个列作为属性的主键,不能和 keyColumn 同时使用,如果你是联合主键可以用逗号将其隔开;
  • useGeneratedKeys:这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键,例如,MySQL 和 SQL Server 自动递增字段,Oracle 的序列等,但是使用它就必须要给 keyProperty 或者 keyColumn 赋值。useGeneratedKeys 的取值为布尔值,true/false,默认值为 false;

批量新增数据,也可以采用和上面一样的方式。

<insert id="batchInsertByAutoInc" parameterType="list" keyProperty="id" useGeneratedKeys="true">insert into t_student (name, sex, selfcard_no, note)values <foreach collection="list" item="item" index="index" separator=",">(#{item.name,jdbcType=VARCHAR},#{item.sex,jdbcType=TINYINT},#{item.selfcardNo,jdbcType=BIGINT},#{item.note,jdbcType=VARCHAR})</foreach>
</insert>

非自增长列

假设我们取消表 t_student 的 id 自增的规则,我们的要求是:如果表 t_student 没有记录,则我们需要设置 id=1,否则我们就取最大 id 加2,来设置新的主键。对于一些特殊的要求,MyBatis 也提供了对应方法。

<insert id="insertByNoAutoInc" parameterType="studentDO"><selectKey keyProperty="id" resultType="long" order="BEFORE">select if(max(id) is null, 1, max(id) + 2) as newId from t_student</selectKey>insert into t_student (id, name, sex, selfcard_no, note)values (#{id,jdbcType=BIGINT},#{name,jdbcType=VARCHAR},#{sex,jdbcType=TINYINT},#{selfcardNo,jdbcType=BIGINT},#{note,jdbcType=VARCHAR})
</insert>

批量新增数据,也可以采用和上面一样的方式。

<insert id="batchInsertByNoAutoInc" parameterType="list"><selectKey keyProperty="id" resultType="long" order="BEFORE">select if(max(id) is null, 1, max(id) + 2) as newId from t_student</selectKey>insert into t_student (name, sex, selfcard_no, note)values<foreach collection="list" item="item" index="index" separator=",">(#{item.name,jdbcType=VARCHAR},#{item.sex,jdbcType=TINYINT},#{item.selfcardNo,jdbcType=BIGINT},#{item.note,jdbcType=VARCHAR})</foreach>
</insert>

架构笔记 · 语雀​www.yuque.com

新增一个主键自增长_MyBatis 示例-主键回填相关推荐

  1. mysql主键自增长空缺_Mysql 主键自增长auto_increment问题分析

    本节内容: Mysql 主键自增长 在mysql数据库中,主键由auto_increment实现自增长,若自定义函数来表示auto_increment的话可以如下: 复制代码 代码示例: create ...

  2. oracle中主键自增长,oracle 数据库主键自动增长方法

    oracle 数据库没有像 MYSQL一样有 自动ID增值 的功能,如要实现可以用触发器. 首先就是建立一个序列,序列有有自动增值的功能,再建立一个触发器. 如: 建立一个序列 CREATE SEQU ...

  3. 新增一个主键自增长_第17期:索引设计(主键设计)

    表的主键指的针对一张表中的一列或者多列,其结果必须能标识表中每行记录的唯一性.InnoDB 表是索引组织表,主键既是数据也是索引.主键的设计原则1. 对空间占用要小上一篇我们介绍过 InnoDB 主键 ...

  4. 新增一个主键自增长_为什么InnoDB宜用自增主键

    前言 领导:既然自增数字主键会导致主备同步时主键冲突,自增主键能不能砍掉? 答:自增主键主要是技术上提升效率,键冲突可以考虑备库插入时不指定主键值,或者binlog改成row模式,而且, 公司规范:如 ...

  5. 新增一个复合主键的步骤

    新增一个复合主键的步骤 复合主键:一个表中有多个主键 此时需要再添加一个新的主键,复合主键只能同时添加,同时创建,直接添加是会报错的 #删除所有主键 ALTER TABLE 表名 DROP PRIMA ...

  6. mysql主键自增长_全面的MySQL优化面试解析

    本文概要 文章内图片有损,需要高清可以在公众号内回复"大图" 概述 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理 ...

  7. 3、 AUTO_INCREMENT:主键自增长

    在 MySQL 中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值.每增加一条记录,主键会自动以相同的步长进行增长. 通过给字段添加 AUTO_INCREM ...

  8. mysql主键约束自动增长_MySQL教程45-MySQL主键自增长

    在 MySQL 中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值.每增加一条记录,主键会自动以相同的步长进行增长. 通过给字段添加 AUTO_INCREM ...

  9. Mysql,SqlServer,Oracle主键自动增长的设置

    Mysql,SqlServer,Oracle主键自动增长的设置 参考文献 http://blog.csdn.net/andyelvis/article/details/2446865 1.把主键定义为 ...

最新文章

  1. Response_案例1_路径_绝对路径
  2. 789. 逃脱阻碍者
  3. Android 11 正式版发布!
  4. 如何调整金格电子章服务器印章_电子签章赋能勘察设计新动力
  5. [转]WebGL中文教程
  6. java webservice 开发总结
  7. PCB板自动识别检测
  8. 单层感知器与线性神经网络
  9. 中小尺寸OLED面板面临价格战,中国手机可捡便宜
  10. 渡课学习第17天:JavaScript一脸懵逼
  11. 深度揭秘:消费者应如何激活iPhone
  12. android 调用微信语音识别,Android 仿微信语音识别
  13. 小程序源码:游戏助手王者战力查询扫码登录多功能微信小程序
  14. 项目案例之GitLab的数据迁移
  15. PHP对接美团API接口 实现卡卷核销功能
  16. 悟空CRM 12 java安装搭建 72crm-uniapp移动端
  17. mysql.h函数解释_mysql时间格式化函数日期格式h和H区别
  18. 对技术要始终保持敬畏之心!!
  19. 数值分析复化梯形公式matlab,数值分析复化梯形公式,复化Simpson公式MATLAB程序
  20. C语言16x16点阵显示汉字程序,单片机+16x16点阵,汉字滚动显示程序(带仿真)

热门文章

  1. Actor-ES框架:Ray
  2. DotNetCore跨平台~配置文件与配置代码如何共存
  3. DDD理论学习系列(4)-- 领域模型
  4. visual studio 2017发布dotnet core到docker
  5. .NET Core 1.0.1 发布了
  6. ASP.NET Core 缓存技术 及 Nginx 缓存配置
  7. HoloLens开发手记-全息Hologram
  8. PS2019摄影后期处理(二)
  9. 第三方app_为什么第三方APP不能下载呢?
  10. C语言试题四十三之求出ss所指字符串中指定字符的个数,并返回此值。