mybatis主键回填mysql_MyBatis 示例-主键回填

news/2024/7/16 10:14:25 标签: mybatis主键回填mysql

测试类:com.yjw.demo.PrimaryKeyTest

自增长列

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

StudentMapper.xml

useGeneratedKeys="true">insert into t_student (name, sex, selfcard_no, note)

values (

#{name,jdbcType=VARCHAR},

#{sex,jdbcType=TINYINT},

#{selfcardNo,jdbcType=BIGINT},

#{note,jdbcType=VARCHAR}

)

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

keyProperty:表示以哪个列作为属性的主键,不能和 keyColumn 同时使用,如果你是联合主键可以用逗号将其隔开;

useGeneratedKeys:这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键,例如,MySQL 和 SQL Server 自动递增字段,Oracle 的序列等,但是使用它就必须要给 keyProperty 或者 keyColumn 赋值。useGeneratedKeys 的取值为布尔值,true/false,默认值为 false;

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

useGeneratedKeys="true">insert into t_student (name, sex, selfcard_no, note)

values

(

#{item.name,jdbcType=VARCHAR},

#{item.sex,jdbcType=TINYINT},

#{item.selfcardNo,jdbcType=BIGINT},

#{item.note,jdbcType=VARCHAR}

)

非自增长列

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

select if(max(id) is null, 1, max(id) + 2) as newId from t_student

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}

)

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

select if(max(id) is null, 1, max(id) + 2) as newId from t_student

insert into t_student (name, sex, selfcard_no, note)

values

(

#{item.name,jdbcType=VARCHAR},

#{item.sex,jdbcType=TINYINT},

#{item.selfcardNo,jdbcType=BIGINT},

#{item.note,jdbcType=VARCHAR}

)

MyBatis 实用篇


http://www.niftyadmin.cn/n/1450252.html

相关文章

python编程求1+2+3+....+100的和_python实现1+2+3+...求和的办法

今天下午上python课的时候,老师留了一个小编程题,求1234...100,然后的就大展身手,写了下面的代码:defsum():print("如果中途想终止,请输入no")for i in range(1000): nstr(input("请输入累加到的数字&a…

C# 客户端服务端的编写

客户端的代码 class client{public void mehod(){TcpClient tcp new TcpClient();tcp.Connect(IPAddress.Parse("192.168.0.168"), 23850);NetworkStream stream tcp.GetStream();string cmd "demo TESTING";byte[] outbytes System.Text.Encoding.ASC…

一个检测一个字符串在另一个字符串当中出现几次的函数(转)

U2 Forum rautinee原创$ $http://u2bbs.126.com$ 一个网友问就写了一个,:) Function CheckTheChar(TheChar,TheString) TheChar"要检测的字符串" TheString"待检测的字符串" if inStr(TheString,TheChar) then for n 1 to Len(TheString) if Mid(TheString…

JAVA2的三个版本

企业版(Java EE) Java EE是一种利用Java2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE技术的基础就是核心Java平台或Java2平台的标准版,Java EE不仅巩固了标准版中的许多优点,例如“编写一次、随处运行”的特性、方便存取数…

python文件流_Python文件和流(实例讲解)

1.文件写入 #打开文件,路径不对会报错 f open(r"C:\Users\jm\Desktop\pyfile.txt","w") f.write("Hello,world!\n") f.close() 2.文件读取 #读取 f open(r"C:\Users\jm\Desktop\pyfile.txt","r") print(f.read…

SEO报价表-2007seo参考价格表(转)

500) { this.width500; }" border"0" />搜索引擎优化(seo)报价表:说明:不接受 -六合彩,彩票,作弊,造假-等危害他人利益的优化服务,彩信彩铃等关键字也不受理.另:以下报价为暂定,所有服务预付40%,达到合同效果付…

JavaScript即将推出新的两个原始数据类型

大家好,我是零一,JavaScript即将推出两个新的数据类型:Record 和 Tuple ,这俩是啥呢?其实就是一个只读的 Object 和 Array,其实在其它语言中已经有类似的数据类型了,例如 Python 中也有 Tuple&a…

mysql日志安全_MySQL 日志文件的使用及其安全加固

1、禁止使用 mysql 命令行历史记录一般情况下,mysql 的历史记录文件存在于用户的家目录下,即 $HOME/.mysql_historyrootRicenOS:~# rm -rf $HOME/.mysql_history设置环境变量:MYSQL_HISTFILE/dev/null,创建 mysql 的历史记录文件到…