新增一个主键自增长_MyBatis 示例-主键回填
测试类: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 示例-主键回填相关推荐
- mysql主键自增长空缺_Mysql 主键自增长auto_increment问题分析
本节内容: Mysql 主键自增长 在mysql数据库中,主键由auto_increment实现自增长,若自定义函数来表示auto_increment的话可以如下: 复制代码 代码示例: create ...
- oracle中主键自增长,oracle 数据库主键自动增长方法
oracle 数据库没有像 MYSQL一样有 自动ID增值 的功能,如要实现可以用触发器. 首先就是建立一个序列,序列有有自动增值的功能,再建立一个触发器. 如: 建立一个序列 CREATE SEQU ...
- 新增一个主键自增长_第17期:索引设计(主键设计)
表的主键指的针对一张表中的一列或者多列,其结果必须能标识表中每行记录的唯一性.InnoDB 表是索引组织表,主键既是数据也是索引.主键的设计原则1. 对空间占用要小上一篇我们介绍过 InnoDB 主键 ...
- 新增一个主键自增长_为什么InnoDB宜用自增主键
前言 领导:既然自增数字主键会导致主备同步时主键冲突,自增主键能不能砍掉? 答:自增主键主要是技术上提升效率,键冲突可以考虑备库插入时不指定主键值,或者binlog改成row模式,而且, 公司规范:如 ...
- 新增一个复合主键的步骤
新增一个复合主键的步骤 复合主键:一个表中有多个主键 此时需要再添加一个新的主键,复合主键只能同时添加,同时创建,直接添加是会报错的 #删除所有主键 ALTER TABLE 表名 DROP PRIMA ...
- mysql主键自增长_全面的MySQL优化面试解析
本文概要 文章内图片有损,需要高清可以在公众号内回复"大图" 概述 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理 ...
- 3、 AUTO_INCREMENT:主键自增长
在 MySQL 中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值.每增加一条记录,主键会自动以相同的步长进行增长. 通过给字段添加 AUTO_INCREM ...
- mysql主键约束自动增长_MySQL教程45-MySQL主键自增长
在 MySQL 中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值.每增加一条记录,主键会自动以相同的步长进行增长. 通过给字段添加 AUTO_INCREM ...
- Mysql,SqlServer,Oracle主键自动增长的设置
Mysql,SqlServer,Oracle主键自动增长的设置 参考文献 http://blog.csdn.net/andyelvis/article/details/2446865 1.把主键定义为 ...
最新文章
- Response_案例1_路径_绝对路径
- 789. 逃脱阻碍者
- Android 11 正式版发布!
- 如何调整金格电子章服务器印章_电子签章赋能勘察设计新动力
- [转]WebGL中文教程
- java webservice 开发总结
- PCB板自动识别检测
- 单层感知器与线性神经网络
- 中小尺寸OLED面板面临价格战,中国手机可捡便宜
- 渡课学习第17天:JavaScript一脸懵逼
- 深度揭秘:消费者应如何激活iPhone
- android 调用微信语音识别,Android 仿微信语音识别
- 小程序源码:游戏助手王者战力查询扫码登录多功能微信小程序
- 项目案例之GitLab的数据迁移
- PHP对接美团API接口 实现卡卷核销功能
- 悟空CRM 12 java安装搭建 72crm-uniapp移动端
- mysql.h函数解释_mysql时间格式化函数日期格式h和H区别
- 对技术要始终保持敬畏之心!!
- 数值分析复化梯形公式matlab,数值分析复化梯形公式,复化Simpson公式MATLAB程序
- C语言16x16点阵显示汉字程序,单片机+16x16点阵,汉字滚动显示程序(带仿真)