Mybatis和Mybatis-Plus执行插入语句后可以返回主键ID吗?

简介: Mybatis和Mybatis-Plus执行插入语句后可以返回主键ID吗?


一、Mybatis执行插入语句后可以返回主键ID吗?

在想写什么内容的时候,正好看到一个基础面试题上有这个问题,就把它记录下来了。

👨‍💻面试官:你说Mybatis执行插入语句后可以返回主键ID吗??如果能的话,能否实现一下。

🙋‍我:当然是可以的,连JDBC都能做到的事情,Mybatis也能做到的。

开始敲代码...

1.1、Mysql数据库设置ID自增情况

<insert id="insertUser" parameterType="com.crush.mybatisplus.entity.User">
     INSERT  INTO tb_user (username,password) VALUES(#{username},#{password});
     <selectKey resultType="java.lang.Long" order="AFTER" keyProperty="id">
         SELECT LAST_INSERT_ID()
     </selectKey>
 </insert>

解释:

  1. 这里设置的Mysql的主键是自增的,SELECT LAST_INSERT_ID()返回的是最后一个ID值意思。
  2. 传入的参数必须为对象,不能为String int 之类的单个参数
  3. order属性,取值范围BEFORE|AFTER,指定是在insert语句前还是后执行selectKey操作。AFTER一般用于Mysql自增的情况下,BEFORE一般用于自定义的ID的获取。
  4. keyProperty属性,默认值unset,用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到领域模型的哪个属性中,也就是你实体类中,对应数据库的主键id。
  5. 最后在实体类中,要有主键的get与set方法,满足后,在implcontroller层,直接实体类.getId() 即可获取本次插入后的主键ID,返回前端即可。

如:

@Override
 public Long insert(User user) {
     return  userMapper.insertUser(user)>0?user.getId():null;
 }

1.2、使用UUID自增主键

<insert id="insertUser2" parameterType="com.crush.mybatisplus.entity.User">
     <selectKey keyProperty="id" order="BEFORE" resultType="String">
         select uuid()
     </selectKey>
     INSERT INTO tb_user (id,username,password) VALUES(#{id},#{username},#{password});
 </insert>

结果和上文是一样的。

二、Mybatis-Plus在执行插入语句后返回自定义ID

👨‍💻面试官:那你会用Mybatis-Plus吗?Mybatis-Plus如何做这件事情啊,有简单的方式吗?

🙋‍我:还好学过,正好能回答这个问题。

一步一步道来:

可以直接使用Mybatis-Plussava方法,或者mapper层的insert方法,它都会将返回的结果自动填充进你映射的的实体类。从而可以直接获取到你的数据。

@PostMapping("/add3")
 public Object add3(@RequestBody User user){
     return tbUserService.save(user)==true?user.getId():"插入失败";
 }

1704460443300.jpg

我们还可以直接将User打印出来看一下:

@PostMapping("/add3")
 public Object add3(@RequestBody User user){
     tbUserService.save(user);
     System.out.println("执行完插入后的User:"+user);
     return user.getId();
 }
执行完插入后的User:User(id=890909294458048512, username=123456, password=123456, deleted=0, createTime=2021-09-24T10:35:36.873908700, updateTime=2021-09-24T10:35:36.873908700)

还可以使用注解方式,不过注解的那种就是将上文Mybatis中的第二种方法搬到注解上去了。

@Insert(value = "INSERT INTO t_XXXX" +
         "XXX,XXX,XXX " +
         "VALUES (XXX,XXX,XXX)")
 @SelectKey(statement="select LAST_INSERT_ID()",keyProperty = "id",before = false,resultType = Long.class)
 Integer testInsert1(MessageMould messageMould);

三、自言自语

本文就是简单介绍了,具体使用具体情况具体分析啦。


目录
相关文章
|
2月前
|
Java 数据库连接 mybatis
Mybatis Plus保存数据返回主键id
Mybatis Plus保存数据返回主键id
115 1
|
3天前
|
Java 数据库连接 Maven
文本,使用SpringBoot工程创建一个Mybatis-plus项目,Mybatis-plus在编写数据层接口,用extends BaseMapper<User>继承实体类
文本,使用SpringBoot工程创建一个Mybatis-plus项目,Mybatis-plus在编写数据层接口,用extends BaseMapper<User>继承实体类
MybatisPlus-标准CRUD制作,新增boolean save(T t),删除 ~ delete(int id),修改 ~ update(T t),根据id查询,T getById....
MybatisPlus-标准CRUD制作,新增boolean save(T t),删除 ~ delete(int id),修改 ~ update(T t),根据id查询,T getById....
|
13天前
|
SQL Java 数据库连接
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
24 2
|
17天前
|
Java 数据库连接 mybatis
在Spring Boot应用中集成MyBatis与MyBatis-Plus
在Spring Boot应用中集成MyBatis与MyBatis-Plus
50 5
MyBatisPlus如何根据id批量查询?Required request parameter ‘id‘ for method 解决方法是看青戈大佬MybatisPlus的教程
MyBatisPlus如何根据id批量查询?Required request parameter ‘id‘ for method 解决方法是看青戈大佬MybatisPlus的教程
MybatisPlus介绍新增用户,根据id查询,引入MybatisPlus的起步依赖,增删改查最简单的写法
MybatisPlus介绍新增用户,根据id查询,引入MybatisPlus的起步依赖,增删改查最简单的写法
|
12天前
|
Java 关系型数据库 MySQL
3.MyBatis和SpringBoot整合及MyBatis-plus与SpringBoot整合
3.MyBatis和SpringBoot整合及MyBatis-plus与SpringBoot整合
17 0
|
2月前
|
算法 BI 数据库
MyBatisPlus查询条件设置、映射匹配兼容性、id生成策略、多数据操作
MyBatisPlus查询条件设置、映射匹配兼容性、id生成策略、多数据操作
52 3
|
2月前
|
SQL 存储 算法
Mybatis-Plus- CRUD接口-主键策略-自动填充和乐观锁-分页-逻辑删除-条件构造器和常用接口
Mybatis-Plus- CRUD接口-主键策略-自动填充和乐观锁-分页-逻辑删除-条件构造器和常用接口