(一)第一种方式 当你把数据库表设置为自增Id时,这种新增不需要在输入id值。如何返回id值,就用到了useGeneratedKeys 和 keyProperty
@RequestMapping(value="/insertUser",method=RequestMethod.POST)
@ResponseBody
public int insertUser() {
User user1 = new User();
user1.setUsername("234");
user1.setUsersex(4);
user1.setDegree(100.08);
int count = userTestService.insertUser1(user1);
System.out.println("共插入1条数据"+"userid值为"+user1.getUserid());
return count;
}
注意上述代码@ResponseBody 一定的加,不然报:
java.lang.IllegalArgumentException: Unknown return value type: java.lang.Integer
keyProperty=“userid” 中userid为主键
<insert id="insertUser1" useGeneratedKeys="true" keyProperty="userid">
insert into richfit_myku(user_name,user_sex,degree)
values(
#{username}, #{usersex}, #{degree})
</insert>
@Data
@TableName(value = "richfit_myku")
public class User implements Serializable {
private int userid;
private String username;
private int usersex;
private Double degree;
}
(二)第二种方式 selectKey 返回主键的值
有些数据库(如 Oracle )不提供主键自增的功能,而是使用序列得到 个值,然后将这个值赋给 id ,再将数据插入数据库。对于这种情况,可以采用另外 种方式:使用<selectKek>标签来获取主键的值,这种方式不适用于不提供主键自增功能的数据库,也适用于提供主键自增功能的数据库。
selectKey 标签 ke yColumn keyProperty 和上面 useGeneratedKeys 的用法含义相同 ,这 resultType 用于设置返回值类型order属性的设置和使用的数据库有关MySQL 数据库中, order 属性设置的值是 AFTER,因为当前记录的主键值在 insert 语句执行成功后才能获取 而在 Oracle 数据库中, order 的值要设置为 BEFORE ,这是因为 Oracle中需要先从序列获取值,然后将值作为主键插入到数据库中。
<insert id="insertUser1">
insert into richfit_myku(user_name,user_sex,degree)
values(
#{username}, #{usersex}, #{degree})
<selectKey keyColumn="userid" keyProperty="userid" resultType="int" order="AFTER">
<!-- MySQL 中的 SQL 语句 SELECT LAST_ INSERT_ ID ()用于获
数据库中最后插入的数据的 ID-->
select LAST_INSERT_ID()
</selectKey>
</insert>