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

Mybatis使用useGeneratedKeys獲取自增主鍵

 更新時間:2023年01月12日 10:22:57   作者:Applehope  
這篇文章主要為大家介紹了Mybatis使用useGeneratedKeys獲取自增主鍵示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

一、useGeneratedKeys 是什么 ?

關于useGeneratedKeys,官方的說法是,這個參數(shù)的作用是:"允許 JDBC 支持自動生成主鍵,需要驅動兼容",如何理解這句話的含義?

其原意是。對于支持自動生成記錄主鍵的數(shù)據(jù)庫,如 MySQL 和 SQL Server,此時將 useGeneratedKeys 參數(shù)的值設置為 true,則進行 INSERT 操作后,數(shù)據(jù)庫自動生成的主鍵會填充到 Java 實體屬性中,我們可以從 Java 實體屬性中獲得數(shù)據(jù)庫自動生成的主鍵 ID。

二、如何使用?

配置useGeneratedKeys,可以通過以下方式實現(xiàn):

  • 配置全局配置文件
  • 在 xml 映射器中配置 useGeneratedKeys 參數(shù)
  • 在接口映射器中設置 useGeneratedKeys 參數(shù)

2.1 在 mybatis 的全局配置文件中配置

application.yml 配置文件

通過 configLocation 指定 mybatis 的配置文件 mybatis-config.xml

# MyBatis configuration
mybatis:
    # Search for the specified package alias
    typeAliasesPackage: com.ruoyi.**.domain
    # Configure mapper scan to find all mapper.xml mapping files
    mapperLocations: classpath*:mapper/**/*Mapper.xml
    # Load the global configuration file
    configLocation: classpath:mybatis/mybatis-config.xml

mybatis-config.xml

通過<setting name="useGeneratedKeys" value="true" />激活useGeneratedKeys.

<?xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
        <settings>
                <setting name="cacheEnabled" value="true" /> <!-- global mapper enables caching -->
                <setting name="useGeneratedKeys" value="true" /> <!-- Allow JDBC to support automatic generation of primary keys -->
                <setting name="defaultExecutorType" value="REUSE" /> <!-- configure the default executor -->
                <setting name="logImpl" value="SLF4J" /> <!-- Specify the specific implementation of the log used by MyBatis -->
<!-- <setting name="mapUnderscoreToCamelCase" value="true"/> <!– CamelCase naming–>-->
        </settings>
</configuration>

注意:在settings元素中設置的全局 useGeneratedKeys 參數(shù)對 xml 后綴的 mapper 無效。如果你想在 xml 后綴的 mapper 中添加記錄后返回主鍵 ID,你必須在 xml 后綴的 mapper 中明確設置useGeneratedKeys參數(shù)的值為 true。

2.2 在 xml mapper 中配置 useGeneratedKeys 參數(shù)。

Mapper.xml

<insert id="addBigdataGroup" parameterType="BigdataGroup" useGeneratedKeys="true" keyProperty="groupId" keyColumn="group_id">
        insert into bigdata_group (
        group_id, group_name, comment, business_line, create_by, remark, create_time)
        values(#{groupId}, #{groupName}, #{comment}, #{businessLine}, #{createBy}, #{remark}, sysdate() );
</insert>

parameterType  傳入?yún)?shù)類型

keyProperty JAVA 對象中的屬性名稱

keyColumn  數(shù)據(jù)庫字段名稱

keyProperty與keyColumn的關系圖示(來自網(wǎng)絡).png

再次說明:在 xml mapper 中配置的 useGeneratedKeys 參數(shù)只影響 xml mapper,設置元素中設置的全局 useGeneratedKeys 參數(shù)值對 xml mapper 沒有影響。

2.3 在 interface mapper 中設置 useGeneratedKeys 參數(shù)

設置 useGeneratedKeys 為 true,返回由數(shù)據(jù)庫自動生成的記錄主鍵 id。

@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
@Insert("insert into test(name,descr,url,create_time,update_time) values(#{name},#{descr},#{url},now(),now())")
Integer insertOneTest(Test test);

注意:在 interface mapper 中設置的 useGeneratedKeys參數(shù)將覆蓋 mybatis 配置文件中 setting 元素內所配置的useGeneratedKeys的值。

另外筆者的實踐中,keyProperty = "id"并未生效,需要設置為keyProperty = "test.id";即參數(shù)的名稱 + . + 主鍵屬性名。 讀者老師需結合自己的環(huán)境試一試。

三、遇到的問題

在配置了獲得主鍵 ID 后,但返回的結果并沒有像預期的那樣返回新插入數(shù)據(jù)庫行的主鍵的真實數(shù)據(jù)。但返回的居然1。

代碼示例如下:

  • Mybatis 側
import java.util.List;
public interface BigdataMapper {
    List&lt;BigdataGroup&gt; getBigdataGroup();
    int addBigdataGroup(BigdataGroup bigdataGroup);
}
  • service 側
public int addBigdataGroup(BigdataGroup bigdataGroup) {
    bigdataGroup.setCreateBy(SecurityUtils.getUsername());
    int update = bigdataMapper. addBigdataGroup(bigdataGroup);
    log.info("update: {}", update);
    return update;
}
  • xml file側
<insert id="addBigdataGroup" parameterType="BigdataGroup" useGeneratedKeys="true" keyProperty="groupId" keyColumn="group_id">
    insert into bigdata_group (
    group_id, group_name, comment, business_line, create_by, remark, create_time)
    values(#{groupId}, #{groupName}, #{comment}, #{businessLine}, #{createBy}, #{remark}, sysdate() );
</insert>
  • 打印結果

按理說,返回的結果應該是插入后主鍵中的真實數(shù)據(jù),但返回結果是1。

注意:真實的 id 已經被注入到參數(shù)傳遞對象的主鍵的相應屬性中,方法的返回值實際表示的是插入的行數(shù),因為插入了 1 條記錄,所以返回值是 1;如果要獲得新添加數(shù)據(jù)的自增ID,那么只需要讀取對象中對應的自增ID屬性的值。

修改獲取主鍵值的方式:

public int addBigdataGroup(BigdataGroup bigdataGroup) {
    bigdataGroup.setCreateBy(SecurityUtils.getUsername());
    int update = bigdataMapper. addBigdataGroup(bigdataGroup);
    log.info("update: {}", update);
    // Add the following code
    int group_id = bigdataGroup. getGroupId();
    log.info("group_id: {}", group_id);
    // stop here
    return update;
}

結語

英文原文:zditect.com/code/mybati…

以上就是Mybatis使用useGeneratedKeys獲取自增主鍵的詳細內容,更多關于Mybatis useGeneratedKeys自增主鍵的資料請關注腳本之家其它相關文章!

相關文章

  • Spring Boot搭配MinIO和KKFileView實現(xiàn)文件存儲和在線預覽

    Spring Boot搭配MinIO和KKFileView實現(xiàn)文件存儲和在線預覽

    在現(xiàn)代的Web應用中,文件上傳和預覽是常見的需求場景,尤其是在內容管理系統(tǒng)(CMS)或企業(yè)內部應用,本文介紹了如何使用SpringBoot、MinIO和KKFileView實現(xiàn)文件上傳和在線預覽功能,包括項目背景、技術選型、環(huán)境準備、項目代碼實現(xiàn)和運行測試等步驟
    2024-12-12
  • springboot security快速使用示例詳解

    springboot security快速使用示例詳解

    這篇文章主要介紹了springboot security快速使用示例,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Java 字符串拼接竟然有這么多姿勢(收藏版)

    Java 字符串拼接竟然有這么多姿勢(收藏版)

    這篇文章主要介紹了Java 字符串拼接竟然有這么多姿勢,很值得大家收藏,需要的朋友可以參考下
    2019-11-11
  • Java自動釋放鎖的三種實現(xiàn)方案

    Java自動釋放鎖的三種實現(xiàn)方案

    在筆者面試過程時,經常會被問到各種各樣的鎖,如樂觀鎖、讀寫鎖等等,非常繁多,下面這篇文章主要給大家介紹了關于Java自動釋放鎖的三種實現(xiàn)方案,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • Maven多模塊之父子關系的創(chuàng)建

    Maven多模塊之父子關系的創(chuàng)建

    這篇文章主要介紹了Maven多模塊之父子關系的創(chuàng)建,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • springboot框架各個層次基礎詳解

    springboot框架各個層次基礎詳解

    這篇文章主要介紹了springboot框架各個層次基礎,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • IDEA如何加載resources文件夾下文件相對路徑

    IDEA如何加載resources文件夾下文件相對路徑

    這篇文章主要介紹了IDEA如何加載resources文件夾下文件相對路徑問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 解析Java多線程之常見鎖策略與CAS中的ABA問題

    解析Java多線程之常見鎖策略與CAS中的ABA問題

    本篇文章介紹了常見的鎖策略,并說明了synchronized關鍵字加的鎖類型不是單一一種鎖類型的,根據(jù)可重入鎖與非可重入鎖引出了死鎖的概念與死鎖條件,最后介紹了CAS指令以及CAS鎖產生的ABA問題及其解決方案,需要的朋友可以參考下
    2022-06-06
  • Java中equals()方法實例詳解

    Java中equals()方法實例詳解

    equals方法是java.lang.Object類的方法,下面這篇文章主要給大家介紹了關于Java中equals()方法的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-12-12
  • Java超詳細分析@Autowired原理

    Java超詳細分析@Autowired原理

    @Autowired注解可以用在類屬性,構造函數(shù),setter方法和函數(shù)參數(shù)上,該注解可以準確地控制bean在何處如何自動裝配的過程。在默認情況下,該注解是類型驅動的注入
    2022-06-06

最新評論

武穴市| 承德市| 连云港市| 怀集县| 若尔盖县| 苏尼特右旗| 嵩明县| 米脂县| 庆安县| 台安县| 灵石县| 长寿区| 杭锦后旗| 伽师县| 靖西县| 九龙城区| 万宁市| 甘谷县| 邢台县| 杭州市| 徐州市| 田东县| 商丘市| 扎赉特旗| 磐石市| 东源县| 宜良县| 万山特区| 壤塘县| 申扎县| 麦盖提县| 武安市| 新和县| 安化县| 阳信县| 六枝特区| 贵德县| 民权县| 札达县| 麻城市| 贵港市|