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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MyBatis框架——mybatis插入数据返回主键(mysql、oracle)

發布時間:2024/9/20 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatis框架——mybatis插入数据返回主键(mysql、oracle) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

向數據庫中插入數據時,大多數情況都會使用自增列或者UUID做為主鍵。主鍵的值都是插入之前無法知道的,但很多情況下我們在插入數據后需要使用剛剛插入數據的主鍵,比如向兩張關聯表A、B中插入數據(A的主鍵是B的外鍵),向A表中插入數據之后,向B表中插入數據時需要用到A的主鍵。

  比如添加一個用戶,同時返回插入用戶后得到的用戶id:

  • /** * 添加用戶信息 *?@param user *?@throws Exception */?public?int?insertUser(User user)?throws Exception { SqlSession session=sqlSessionFactory.openSession(); session.insert("com.danny.mybatis.insertUser", user); session.commit();?return user.getUserId();//返回插入數據庫后得到的用戶id }
  •   這里總結一下mybatis插入數據時返回主鍵的4種情況:MySQL環境下主鍵自增、mysql環境下主鍵為uuid、mysql環境下主鍵自增、mysql環境下主鍵為uuid。

      以下全文均以User實體來舉例說明,字段有userId、userName、sex、birthday、address 五個屬性,其中userId有可能是int類型,也有可能是String類型。


    數據庫為mysql


    主鍵為自增時(主鍵為數值類型且自增)

      利用mysql的LAST_INSERT_ID()方法獲取插入記錄的主鍵,select LAST_INSERT_ID()可以在插入數據后,查詢并返回剛插入數據的主鍵(但是單獨執行這條語句只會返回0)。

    <insert id="insertUser" parameterType="com.danny.mybatis.po.User"> <selectKey keyProperty="userId" order="AFTER" resultType="java.lang.Integer"> select LAST_INSERT_ID() </selectKey> insert into T_USER(userName,birthday,sex,address) values (#{userName},#{birthday},#{sex},#{address}) </insert>

      parameterType:指定insert執行語句接收的參數類型為pojo(這里的user)。

      keyProperty:將查詢到的主鍵值設置到parameterType指定對象的哪個屬性。

      order:<selectKey>?標簽內的sql語句相對于insert語句的執行順序,AFTER表示select LAST_INSERT_ID()?這個語句將在insert語句之后執行。


    主鍵為UUID時(主鍵必須為字符類型)

      使用mysql的方法UUID()方法獲取隨機的UUID作為主鍵,select UUID()可以在插入數據前,生成隨機的UUID并通過keyProperty賦值給將要插入記錄的主鍵。

    <insert id="insertPerson" parameterType="com.danny.mybatis.po.User"><selectKey keyProperty="userId" order="BEFORE" resultType="java.lang.String">select UUID()</selectKey>insert into user(userId,userName,birthday,sex,address) values (#{id},#{userName},#{birthday},#{sex},#{address}) </insert>

      在上述代碼中可以看到order?的屬性值為BEFORE?,說明在插入之前就已經生成了UUID,并且已經把UUID賦值給user的id。


    背 景數據庫為oracle:

    主鍵為自增時(主鍵為數值類型):

      在oracle中實現主鍵自增,需要先創建序列,相當于創建一個全局變量,用來存儲對應表的主鍵的當前最大值(主鍵為數值類型時)。

      先為user表創建一個序列:

    CREATE SEQUENCE USER_ID_SEQ

    INCREMENT?BY?1 -- 每次遞增1

    START?WITH?1 -- 從1開始

    MINVALUE?1 -- 最小值=1

    NOCYCLE;?-- 不循環

      利用USER_ID_SEQ.NEXTVAL?獲得要插入數據的主鍵:

    <insert id="insertUser" parameterType="com.danny.mybatis.po.User"><selectKey keyProperty="userId" order="BEFORE" resultType="java.lang.Integer"> select USER_ID_SEQ.NEXTVAL as userId from DUAL </selectKey> insert into T_USER(userId,userName,birthday,sex,address) values (#{userId},#{userName},#{birthday},#{sex},#{address}) </insert>


    主鍵為UUID時

      用oracle自帶的SYS_GUID()方法獲得隨機的GUID作為主鍵:

    <insert id="insertUser" parameterType="com.danny.mybatis.po.User"><selectKey keyProperty="userId" order="BEFORE" resultType="java.lang.Integer"> select SYS_GUID() as userId from DUAL </selectKey> insert into T_USER(userId,userName,birthday,sex,address) values (#{userId},#{userName},#{birthday},#{sex},#{address}) </insert>

    總結

    以上是生活随笔為你收集整理的MyBatis框架——mybatis插入数据返回主键(mysql、oracle)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。