最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis如何獲取剛剛新插入數(shù)據(jù)的主鍵值id

 更新時間:2023年08月31日 17:17:00   作者:洛陽紙貴  
這篇文章主要介紹了mybatis如何獲取剛剛新插入數(shù)據(jù)的主鍵值id問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

mybatis獲取剛剛新插入數(shù)據(jù)的主鍵值id

插入操作后,立馬返回主鍵Id。查閱了很多資料,用keyProperty和useGeneratedKeys屬性。

useGeneratedKeys 參數(shù)只針對 insert 語句生效,默認(rèn)為 false。

當(dāng)設(shè)置為 true 時,表示如果插入的表以自增列為主鍵,則允許 JDBC 支持自動生成主鍵,并可將自動生成的主鍵返回。

主要是以這樣的方式:

<insert id="insertFileRecord" useGeneratedKeys="true" keyProperty="id">
      insert xxx
    </insert>

但是沒有生效,于是我找用了useGeneratedKeys="true"的寫法,發(fā)現(xiàn)我少寫了

<insert id="insertFileRecord" parameterType="FileRecord" useGeneratedKeys="true" keyProperty="id">
      insert xxx
    </insert>

parameterType只能告訴它,在哪個實(shí)體類中,在Mybatis Mapper文件中添加屬性 “useGeneratedKeys”和“keyProperty”,其中 keyProperty 是 Java 對象的屬性名,而不是表的字段名。

但是還是沒生效,我開始懷疑是我自增id是long類型,但實(shí)際上,并不是的,是我在mapper接口類中,加了這樣一個注釋

int insertFileRecord(@Param("fileRecord") FileRecord fileRecord);

并且在insert語句中fileRecord.fileName,去掉@Param,終于看到id了,

最后附上完整的寫法:

mapper接口:

    /**
     * @Description: 新增數(shù)據(jù)
     * @Author: wj
     * @param: cc.jz.work.entity.FileRecord
     * @Return: 影響行數(shù)
     * @Date: 2022-03-31 10:37:18
     */
    int insertFileRecord(FileRecord fileRecord);

xml:

<insert id="insertFileRecord" parameterType="cc.jz.work.entity.FileRecord"  useGeneratedKeys="true" keyProperty="id">
        insert into
        file_record
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="fileAddress != null and fileAddress != ''">
                file_address,
            </if>
            <if test="fileName != null and fileName != ''">
                file_name,
            </if>
            <if test="uploadUserId != null">
                upload_user_id,
            </if>
            <if test="uploadTime != null">
                upload_time,
            </if>
            <if test="status != null and status != ''">
                status,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="fileAddress != null and fileAddress != ''">
                #{fileAddress,jdbcType=VARCHAR},
            </if>
            <if test="fileName != null and fileName != ''">
                #{fileName,jdbcType=VARCHAR},
            </if>
            <if test="uploadUserId != null">
                #{uploadUserId,jdbcType=INTEGER},
            </if>
            <if test="uploadTime != null">
                #{uploadTime,jdbcType=TIMESTAMP},
            </if>
            <if test="status != null and status != ''">
                #{status,jdbcType=VARCHAR},
            </if>
        </trim>
    </insert>

mybatis中插入記錄獲取主鍵值

在數(shù)據(jù)庫中主鍵的值是通過自動遞增的方式創(chuàng)建的,然而在通過mybatis插入數(shù)據(jù)之后想獲取插入數(shù)據(jù)的主鍵值可以通過下面兩種方法:

方法一

在xml的配置文件中的insert標(biāo)簽中加入 <selectKey> 標(biāo)簽

<insert id="insert">
		<selectKey keyProperty="id" resultType="int" order="AFTER">
			select LAST_INSERT_ID()
		</selectKey>
		insert into t_student(uname,pass,stu_name,gender,birthdate,score)
		values(#{uname},#{pass},#{stu_name},#{gender},#{birthdate},#{score})
	</insert>
public static void doInsert() {
		SqlSession sqlSession = MybatisUtil.getSqlSession();
		Student s = new Student();
		s.setBirthdate("2020-01-01");
		s.setGender('1');
		s.setPass("123");
		s.setScore(69.3);
		s.setStu_name("張四");
		s.setUname("jack");
		int i = sqlSession.insert("student.insert",s);
		System.out.println("i="+i);
		System.out.println("新插入的學(xué)生的id為:"+s.getId());
		sqlSession.commit();
		sqlSession.close();
	}

注意:

  • selectKey標(biāo)簽中的 select LAST_INSERT_ID() 語句就能獲取生成的主鍵
  • selectKey標(biāo)簽中的keyProperty屬性就是主鍵名,MyBatis會自動將獲取的主鍵封裝給此屬性。

order的值有兩種:BEFORE、AFTER

  • BEFORE:先獲取主鍵,然后執(zhí)行insert; 比如 Oracle數(shù)據(jù)庫。
  • AFTER:先執(zhí)行insert,然后獲取主鍵; 比如 MySql數(shù)據(jù)庫。

方法二

在select標(biāo)簽中加入useGeneratedKeys=“true” keyProperty=“id”

<insert id="insert2" useGeneratedKeys="true" keyProperty="id">
		insert into t_student(uname,pass,stu_name,gender,birthdate,score)
		values(#{uname},#{pass},#{stu_name},#{gender},#{birthdate},#{score})
	</insert>

在這里插入圖片描述

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring遠(yuǎn)程加載配置的實(shí)現(xiàn)方法詳解

    Spring遠(yuǎn)程加載配置的實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了Spring遠(yuǎn)程加載配置的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-03-03
  • Java實(shí)現(xiàn)MD5加密的方法

    Java實(shí)現(xiàn)MD5加密的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)MD5加密的方法,實(shí)例分析了基于java實(shí)現(xiàn)md5加密的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • SpringBoot項(xiàng)目中使用Sharding-JDBC實(shí)現(xiàn)讀寫分離的詳細(xì)步驟

    SpringBoot項(xiàng)目中使用Sharding-JDBC實(shí)現(xiàn)讀寫分離的詳細(xì)步驟

    Sharding-JDBC是一個分布式數(shù)據(jù)庫中間件,它不僅支持?jǐn)?shù)據(jù)分片,還可以輕松實(shí)現(xiàn)數(shù)據(jù)庫的讀寫分離,本文介紹如何在Spring Boot項(xiàng)目中集成Sharding-JDBC并實(shí)現(xiàn)讀寫分離的詳細(xì)步驟,需要的朋友可以參考下
    2024-08-08
  • Java多線程開發(fā)之并發(fā)安全詳解

    Java多線程開發(fā)之并發(fā)安全詳解

    這篇文章主要介紹了Java多線程開發(fā)之并發(fā)安全,并發(fā)安全是指在多個線程同時訪問共享資源時,通過鎖、volatile、原子類或線程安全集合等機(jī)制,防止數(shù)據(jù)競爭和不一致,確保程序執(zhí)行的正確性和穩(wěn)定性,需要的朋友可以參考下
    2026-01-01
  • Spring?Boot集成Elasticsearch全過程

    Spring?Boot集成Elasticsearch全過程

    這篇文章主要介紹了Spring?Boot集成Elasticsearch全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-07-07
  • SpringMVC Mock測試實(shí)現(xiàn)原理及實(shí)現(xiàn)過程詳解

    SpringMVC Mock測試實(shí)現(xiàn)原理及實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了SpringMVC Mock測試實(shí)現(xiàn)原理及實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • java使用httpclient發(fā)送post請求示例

    java使用httpclient發(fā)送post請求示例

    這篇文章主要介紹了java使用httpclient發(fā)送post請求示例,依賴JSON、HTTPClient等jar包,需要的朋友可以參考下
    2014-02-02
  • Java用for循環(huán)Map詳細(xì)解析

    Java用for循環(huán)Map詳細(xì)解析

    本篇文章主要介紹了Java用for循環(huán)Map,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • java創(chuàng)建二維碼并賦予url鏈接的功能實(shí)現(xiàn)

    java創(chuàng)建二維碼并賦予url鏈接的功能實(shí)現(xiàn)

    這篇文章給大家分享java創(chuàng)建二維碼并賦予url鏈接的功能實(shí)現(xiàn),需要獲取要賦值給二維碼的鏈接后綴,通過設(shè)置二維碼的訪問路徑等一系列操作,具體實(shí)現(xiàn)代碼跟隨小編一起看看吧
    2021-06-06
  • 一文搞懂Java?JDBC中的SQL注入問題

    一文搞懂Java?JDBC中的SQL注入問題

    在用戶輸入的數(shù)據(jù)中有SQL關(guān)鍵字或語法,并且關(guān)鍵字或語法參與了SQL語句的編譯,導(dǎo)致SQL語句編譯后的條件為true,一直得到正確的結(jié)果,這種現(xiàn)象就是SQL注入,這篇文章主要介紹了一文搞懂Java?JDBC中的SQL注入問題,需要的朋友可以參考下
    2022-10-10

最新評論

丹阳市| 电白县| 东海县| 文水县| 安岳县| 沾化县| 葫芦岛市| 东城区| 全南县| 巢湖市| 揭东县| 襄城县| 新平| 周宁县| 保康县| 航空| 于都县| 桃园市| 平谷区| 太仆寺旗| 甘泉县| 射洪县| 临洮县| 大石桥市| 象山县| 开化县| 绥芬河市| 彭泽县| 漳浦县| 永济市| 和平区| 察雅县| 历史| 定州市| 泾川县| 水富县| 黔西县| 水城县| 和政县| 金川县| 长治市|