200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Mybatis执行插入语句后并返回主键ID

Mybatis执行插入语句后并返回主键ID

时间:2021-01-18 14:55:18

相关推荐

Mybatis执行插入语句后并返回主键ID

我们知道JDBC可以实现插入语句后返回主键Id,那mybatis可以实现吗?答案是肯定的。

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方法,满足后,在impl层controller层,直接实体类.getId()即可获取本次插入后的主键ID,返回前端即可。

示例:

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

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>

3、mybatis-plus在执行插入语句后返回自定义ID

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

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

还可以直接将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=-09-24T10:35:36.873908700, updateTime=-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);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。