日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

‍面试官问:Mybatis和Mybatis-Plus执行插入语句后可以返回主键ID吗? ‍我:看我回答...

發(fā)布時(shí)間:2025/3/19 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ‍面试官问:Mybatis和Mybatis-Plus执行插入语句后可以返回主键ID吗? ‍我:看我回答... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、Mybatis執(zhí)行插入語句后可以返回主鍵ID嗎?

在想寫什么內(nèi)容的時(shí)候,正好看到一個(gè)基礎(chǔ)面試題上有這個(gè)問題,就把它記錄下來了。

👨?💻面試官:你說Mybatis執(zhí)行插入語句后可以返回主鍵ID嗎??如果能的話,能否實(shí)現(xiàn)一下。

🙋?我:當(dāng)然是可以的,連JDBC都能做到的事情,Mybatis也能做到的。

開始敲代碼…

1.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>

解釋:

  • 這里設(shè)置的Mysql的主鍵是自增的,SELECT LAST_INSERT_ID()返回的是最后一個(gè)ID值意思。
  • 傳入的參數(shù)必須為對象,不能為String int 之類的單個(gè)參數(shù)
  • order屬性,取值范圍BEFORE|AFTER,指定是在insert語句前還是后執(zhí)行selectKey操作。AFTER一般用于Mysql自增的情況下,BEFORE一般用于自定義的ID的獲取。
  • keyProperty屬性,默認(rèn)值unset,用于設(shè)置getGeneratedKeys方法或selectKey子元素返回值將賦值到領(lǐng)域模型的哪個(gè)屬性中,也就是你實(shí)體類中,對應(yīng)數(shù)據(jù)庫的主鍵id。
  • 最后在實(shí)體類中,要有主鍵的get與set方法,滿足后,在impl層controller層,直接實(shí)體類.getId() 即可獲取本次插入后的主鍵ID,返回前端即可。
  • 如:

    @Overridepublic 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>

    結(jié)果和上文是一樣的。

    二、Mybatis-Plus在執(zhí)行插入語句后返回自定義ID

    👨?💻面試官:那你會用Mybatis-Plus嗎?Mybatis-Plus如何做這件事情啊,有簡單的方式嗎?

    🙋?我:還好學(xué)過,正好能回答這個(gè)問題。

    一步一步道來:

    可以直接使用Mybatis-Plus的sava方法,或者mapper層的insert方法,它都會將返回的結(jié)果自動填充進(jìn)你映射的的實(shí)體類。從而可以直接獲取到你的數(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);

    三、自言自語

    本文就是簡單介紹了,具體使用具體情況具體分析啦。

    你好,我是博主寧在春:主頁

    希望本篇文章能讓你感到有所收獲!!!

    祝 我們:待別日相見時(shí),都已有所成。

    總結(jié)

    以上是生活随笔為你收集整理的‍面试官问:Mybatis和Mybatis-Plus执行插入语句后可以返回主键ID吗? ‍我:看我回答...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。