我们在insert一条数据之后,需要返回该实体对象的主键ID
1、xml文件里添加useGeneratedKeys=“true” keyProperty="id"
<!-- useGeneratedKeys="true" keyProperty="userId" -->
<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="userId">
く!-- 插入时的主键是从序列中拿到的 -->
insert into user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="userId != null">user_id,</if>
<if test="userName != null">user_name,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="userId != null">#{userId},</if>
<if test="userName != null">#{userName},</if>
</trim>
</insert>
注: keyProperty="userId"就是user表中的主键ID
2、xml文件里添加keyProperty="userId" resultType="long" order="BEFORE"
keyProperty :查出的主键值封装给javaBean的哪个属性
order="BEFORE":当前SQL在插入SQL之前运行
order="AFTER": 当前SQL在插入SQL之后运行
resultType:查出的数据的返回值类型
BEFORE运行顺序:
先运行selectKey查询userId的SQL;查出userId值封装给JavaBean的userId主键属性
再运行插入的SQL,就可以去除userId属性对应的值
AFTER运行顺序:
先运行插入的SQL(从序列中取出新值作为userId)
再运行selectKey查询userId的SQL
<!--
keyProperty :查出的主键值封装给javaBean的哪个属性
order="BEFORE":当前SQL在插入SQL之前运行
AFTER: 当前SQL在插入SQL之后运行
resultType:查出的数据的返回值类型
-->
<insert id="insertUser" parameterType="User">
<selectKey keyProperty="userId" resultType="long" order="BEFORE">
<!--编写查询主键的sq1语句-->
SELECT user.NEXTVAL as userId FROM DUAL
</selectKey>
く!-- 插入时的主键是从序列中拿到的 -->
insert into user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="userId != null">user_id,</if>
<if test="userName != null">user_name,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="userId != null">#{userId},</if>
<if test="userName != null">#{userName},</if>
</trim>
</insert>
注:order值必须为BEFORE AFTER中的一个,大小写敏感
最主要就是通过如下两段代码
<!-- userId:user表对应的User实体类主键 -->
<selectKey keyProperty="userId" resultType="long" order="BEFORE">
<!--编写查询主键的sq1语句-->
SELECT user.NEXTVAL as userId FROM DUAL
</selectKey>
或者
<insert id="xx" useGeneratedKeys="true" keyProperty="userId">
加入2个属性就可以省略上面那句<selectKey>XX</selectKey>
我们在Controller中,直接获取userId,如果想要返回User对象也可以,我们insert一条数据传过去的就是一个没带主键userId的User对象,setUserId之后就是完整User对象
/**
* 新增User
*/
@PreAuthorize("@ss.hasPermi('user:add')")
@Log(title = "新增User", businessType = BusinessType.INSERT)
@PostMapping("/addUser")
public long addUser(@RequestBody User user)
{
userService.insertUser(user);
//获取userId
long userId = user.getUserId();
return userId;
}
或者 返回User对象
/**
* 新增User
*/
@PreAuthorize("@ss.hasPermi('user:add')")
@Log(title = "新增User", businessType = BusinessType.INSERT)
@PostMapping("/addUser")
public User addUser(@RequestBody User user)
{
userService.insertUser(user);
//塞userId值,应该不用塞,在mapper里就赋值返回了1111111··
//user.setUserId(user.getUserId());
return user;
}
可参考文章: