如何获取主键返回值(MySQL、Oracle)
添加用户、返回主键
--场景:在执行新增用户sql后,service层返回新增用户的主键值(与mybatis一起使用)
insert into user(username, sex, birthday) values(#{username}, #{sex}, #{birthday})
1. 数据库MySQL 主键自增
执行insert提交之后自动生成一个自增主键。
通过mysql的函数获取到刚刚插入记录的自增主键。LAST_INSERT_ID();
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> 2 Select LAST_INSERT_ID(); 3 </selectKey> 4 insert into user(name, age, sex, birthday) 5 values(#{name}, #{age}, #{sex}, #{birthday})
2. 数据库MySQL 主键非自增
通过mysql的UUID()查询到主键,需要修改表中的id字段类型为String,长度设置为35位。
执行思路: 先通过uuid()查询到主键,将主键输入到sql语句中。
执行uuid()语句顺序,是相对于insert语句之前执行。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String"> 2 Select UUID(); 3 </selectKey> 4 insert into user(id, name, age, sex, birthday) 5 values(#{id}, #{name}, #{age}, #{sex}, #{birthday})
3. 数据库Oracle 主键序列
执行思路: 先通过 序列名.nextval 得到主键,将主键输入到sql语句中。
执行 序列名.nextval 语句顺序,是相对于insert语句之前执行。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String"> 2 Select 序列名.nextval; 3 </selectKey> 4 insert into user(id, name, age, sex, birthday) 5 values(#{id}, #{name}, #{age}, #{sex}, #{birthday})