Mybatis執(zhí)行插入語句后并返回主鍵ID問題
我們知道JDBC可以實現(xiàn)插入語句后返回主鍵Id,那mybatis可以實現(xiàn)嗎?
答案是肯定的。
1、MySQL數(shù)據(jù)庫設(shè)置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)這里設(shè)置的MySQL的主鍵是自增的,SELECT LAST_INSERT_ID()返回的是最后一個ID值的意思。
(2)傳入的參數(shù)必須為對象,不能為string,int之類的單個參數(shù)
(3)order屬性,取值范圍BEFORE/ AFTER,指定是在insert語句前還是后執(zhí)行selectKey操作。AFTER一般用于MySQL自增的情況下,BEFORE一般用于自定義的ID的獲取。
(4)keyProperty屬性,默認(rèn)值unset,用于設(shè)置getGeneratedKeys方法或 selectKey子元素返回值將賦值到領(lǐng)域模型的哪個屬性中,也就是實體類中,對應(yīng)數(shù)據(jù)庫的主鍵id。
(5)最后在實體類中,要有主鍵的get與set方法,滿足后,在impl層controller層,直接實體類.getId()即可獲取本次插入后的主鍵ID,返回前端即可。
示例:
@Override
public 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在執(zhí)行插入語句后返回自定義ID
可以直接使用mybatis-plus的save方法,或者mapper層的insert方法
它都會將返回的結(jié)果自動填充進(jìn)你映射的實體類,從而可以直接獲取到你的數(shù)據(jù)
@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("執(zhí)行完插入后的User:"+user);
return user.getId();
}
執(zhí)行完插入后的
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);
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java郵件發(fā)送程序(可以同時發(fā)給多個地址、可以帶附件)
不錯的功能比較齊全的郵件發(fā)送程序源碼2008-07-07
java面向?qū)ο笤O(shè)計原則之開閉原則示例解析
這篇文章主要介紹了java面向?qū)ο笤O(shè)計原則之開閉原則的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-10-10
SpringBoot+Swagger-ui自動生成API文檔
今天小編就為大家分享一篇關(guān)于SpringBoot+Swagger-ui自動生成API文檔,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
java如何將map數(shù)據(jù)存入到實體類對象中
在Java編程中,經(jīng)常需要將Map集合中的數(shù)據(jù)轉(zhuǎn)換為實體類對象,這可以通過反射機制實現(xiàn),即通過遍歷Map對象,使用反射根據(jù)鍵名對應(yīng)實體類的屬性名,動態(tài)調(diào)用setter方法將值設(shè)置到實體對象中,這樣的操作使得數(shù)據(jù)從Map結(jié)構(gòu)轉(zhuǎn)移到了具體的JavaBean中,便于后續(xù)的操作和管理2024-09-09

