日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

一、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 的全局配置文件中配置

  1. Application.yml 配置文件
  2. 通過 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 復制代碼
  3. mybatis-config.xml
  4. 通過<setting name="useGeneratedKeys" value="true" />激活useGeneratedKeys.
  5. <?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ù)。

  1. Mapper.xml
  2. <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的關系圖示(來自網絡).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 insert.NETest(Test test);
復制代碼

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

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

三、遇到的問題

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

代碼示例如下:

  1. Mybatis 側
import java.util.List;

public interface BigdataMapper {

    List<BigdataGroup> getBigdataGroup();

    int addBigdataGroup(BigdataGroup bigdataGroup);
}
復制代碼
  1. service 側
public int addBigdataGroup(BigdataGroup bigdataGroup) {
    bigdataGroup.setCreateBy(SecurityUtils.getUsername());

    int update = bigdataMapper. addBigdataGroup(bigdataGroup);
    log.info("update: {}", update);
    return update;
}
復制代碼
  1. 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>
復制代碼
  1. 打印結果

按理說,返回的結果應該是插入后主鍵中的真實數(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;
}
復制代碼


原文鏈接:
https://juejin.cn/post/7187567574522167355

分享到:
標簽:Mybatis
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定