博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBatis读书笔记----使用JDBC方式返回主键自增的值的两种方式
阅读量:7110 次
发布时间:2019-06-28

本文共 1585 字,大约阅读时间需要 5 分钟。

hot3.png

在使用主键自增时,插入数据库后可能需要得到自增的主键值,然后使用这个值进行一些其他的操作。以下建立一个insert方法和mapper.xml
/**   *新增用户--使用useGeneratedKeys方式   */   int insert2(System sysUser);
insert into sys_user(user_name,user_password,user_email,user_info,head_img,create_time) values( #{userName},#{userPassword},#{userEamil}, #(userInfo),#{headImg,jdbcType= BLOB}, #(createTime,jdbcType= TIMESTAMP))
useGeneratedKeys 设置为true后,MyBatis会使用JDBC的getGeneratedKeys方法来取出由数据库内部生成的主键。获得主键值后将其赋值给keyProperty配置的id属性。当需要设置多个属性时,使用逗号隔开,这种情况下通常还需要设置keyColumn属性,按照顺序指定数据库的列,这里列的值会和keyProperty配置的属性一一对应。由于要使用数据库返回的主键值,所以SQL上下两部分的列中去掉了id列和对应的#{id}属性。

使用selectKey返回主键的值

以上回写主键的方法只是适用于支持主键自增的数据库。有些数据库(Oracle)不提供主键自增的功能,而是使用序列得到一个值,然后将这个值赋值给id,再将数据插入数据库。对于这种情况,可以采用另外一种方式:使用<select>标签来获取主键的值,这种方式不仅适用于不提供主键自增功能的数据库,也适用于提供主键自增功能和数据库。以下语句是用于MySql
insert into sys_user(user_name,user_password,user_email, user_info,head_img,create_time) values( #{userName},#{userPassword},#{userEmail}, #{userInfo},#{headImg,jdbcType=BLOB}, #{createTime,jdbcType= TIMESTAMP})
SELECT LAST_INSERT_ID()
selectKey标签的keyColumn,keyProperty和上面useGeneratedKeys的用法含义相同,这里的resultType用于设置返回值类型。order属性的设置和使用的数据库有关。
order属性,在MySQL数据库中,order属性设置的值是AFTER,因为当前记录的主键值在insert语句执行成功后才能获取到。而在Oracle数据中,order的值设置为BEFORE,这是因为Oracle中需要先从序列获取值,然后将值作为主键插入到数据库中。这个和不同数据库,自增id生成的方式不同有关系。MySQL数据库,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值。而在Oracle是为每张表的主键创建一个单独的序列,然后从这个序列中获取自动增加的 标识符,把它赋值给主键。
使用上述方法,select标签内的语句与不同的数据库有关,不同的数据库,支持的语句不一样。

转载于:https://my.oschina.net/u/2321816/blog/2251875

你可能感兴趣的文章
Case_Compressed Mode_Background
查看>>
python 利用pexpect进行多机远程命令执行
查看>>
Python学习系列 (第一章):Python 的简介
查看>>
【转载】addShutdownHook的用处
查看>>
CSS3学习3----举例
查看>>
一个可以检测网络内主机类型的脚本
查看>>
利用Zabbix监控Lync的实时在线人数
查看>>
使用strace+pstack利器分析程序性能
查看>>
类和对象、实例的关系理解
查看>>
Nginx 负载均衡
查看>>
学习日志---非递归二叉树游标遍历(前中后层序)
查看>>
数据库同步自动断开问题的处理
查看>>
错误页定义方法
查看>>
Guid.NewGuid() 和 new Guid()的区别
查看>>
我的友情链接
查看>>
vim技巧
查看>>
DotNetTextBox V3.0 所见即所得编辑器控件 For Asp.Net2.0(ver 3.1.2Beta)
查看>>
mysql-5.6.25-linux-glibc2.5-i686.tar.gz错误
查看>>
nginx 服务并发过10万的linux内核优化配置
查看>>
Oracle数据库体系架构概要
查看>>