欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis Mapper XML文件-插入,更新,刪除詳解(insert, update and delete)

 更新時(shí)間:2025年02月08日 09:36:43   作者:費(fèi)曼樂園  
這篇文章主要介紹了MyBatis的Mapper XML文件中用于插入、更新和刪除數(shù)據(jù)的語句,包括這些語句的屬性和子元素的使用方法

Mybatis Mapper XML文件-插入,更新,刪除(insert, update and delete)

數(shù)據(jù)修改語句(插入、更新和刪除)在實(shí)現(xiàn)上非常相似

<insert
  id="insertAuthor"
  parameterType="domain.blog.Author"
  flushCache="true"
  statementType="PREPARED"
  keyProperty=""
  keyColumn=""
  useGeneratedKeys=""
  timeout="20">

<update
  id="updateAuthor"
  parameterType="domain.blog.Author"
  flushCache="true"
  statementType="PREPARED"
  timeout="20">

<delete
  id="deleteAuthor"
  parameterType="domain.blog.Author"
  flushCache="true"
  statementType="PREPARED"
  timeout="20">

Insert, Update and Delete 屬性

Attribute(屬性)Description(描述)
id在該命名空間中的唯一標(biāo)識符,可用于引用該語句。
parameterType將傳遞到該語句的參數(shù)的完全限定類名或別名。此屬性是可選的,因?yàn)镸yBatis可以根據(jù)傳遞給該語句的實(shí)際參數(shù)計(jì)算要使用的TypeHandler。默認(rèn)值是未設(shè)置的。
parameterMap這是一種棄用的引用外部parameterMap的方法。請使用內(nèi)聯(lián)參數(shù)映射和parameterType屬性。
flushCache將此設(shè)置為true將在調(diào)用此語句時(shí)刷新第二級緩存和本地緩存。對于插入、更新和刪除語句,默認(rèn)值為true。
timeout這設(shè)置了驅(qū)動程序在發(fā)出請求后等待數(shù)據(jù)庫返回的最長時(shí)間(以秒為單位),超過該時(shí)間將拋出異常。默認(rèn)值是unset(依賴于驅(qū)動程序)。
statementType可以選擇其中的一個(gè):STATEMENT、PREPARED或CALLABLE。這會讓MyBatis分別使用Statement、PreparedStatement或CallableStatement。默認(rèn)值為PREPARED。
useGeneratedKeys(僅適用于插入和更新)這告訴MyBatis使用JDBC的getGeneratedKeys方法來檢索數(shù)據(jù)庫內(nèi)部生成的鍵(例如,在MySQL或SQL Server等關(guān)系數(shù)據(jù)庫管理系統(tǒng)中的自增字段)。默認(rèn)值為false。
keyProperty(僅適用于插入和更新)標(biāo)識一個(gè)屬性,MyBatis將設(shè)置由getGeneratedKeys方法返回的鍵值,或者由insert語句的selectKey子元素返回的鍵值。默認(rèn)值為unset。如果預(yù)期有多個(gè)生成的列,則可以使用逗號分隔的屬性名稱列表。
keyColumn(僅適用于插入和更新)設(shè)置表中具有生成鍵的列的名稱。這只在某些數(shù)據(jù)庫(如PostgreSQL)中需要,當(dāng)鍵列不是表中的第一列時(shí)。如果預(yù)期有多個(gè)生成的列,則可以使用逗號分隔的列名稱列表。
databaseId如果配置了databaseIdProvider,則MyBatis將加載所有沒有databaseId屬性或databaseId與當(dāng)前數(shù)據(jù)庫標(biāo)識匹配的語句。如果在具有和不具有databaseId的情況下找到了相同的語句,則后者將被丟棄。

插入、更新和刪除語句的示例

<insert id="insertAuthor">
  insert into Author (id,username,password,email,bio)
  values (#{id},#{username},#{password},#{email},#{bio})
</insert>

<update id="updateAuthor">
  update Author set
    username = #{username},
    password = #{password},
    email = #{email},
    bio = #{bio}
  where id = #{id}
</update>

<delete id="deleteAuthor">
  delete from Author where id = #{id}
</delete>

如前所述,插入語句相對更豐富一些,它具有一些額外的屬性和子元素,可以以多種方式處理鍵的生成。

如果你的數(shù)據(jù)庫支持自動生成鍵字段(例如MySQL和SQL Server),那么你可以簡單地設(shè)置useGeneratedKeys="true"并將keyProperty設(shè)置為目標(biāo)屬性,就完成了鍵的自動生成。

例如,如果上面的Author表使用了自動生成列類型作為id,則語句將修改如下:

<insert id="insertAuthor" useGeneratedKeys="true"
    keyProperty="id">
  insert into Author (username,password,email,bio)
  values (#{username},#{password},#{email},#{bio})
</insert>

如果你的數(shù)據(jù)庫也支持多行插入操作,你可以傳遞一個(gè)作者列表或作者數(shù)組,并獲取自動生成的鍵值。

<insert id="insertAuthor" useGeneratedKeys="true"
    keyProperty="id">
  insert into Author (username, password, email, bio) values
  <foreach item="item" collection="list" separator=",">
    (#{item.username}, #{item.password}, #{item.email}, #{item.bio})
  </foreach>
</insert>

對于那些不支持自動生成列類型或可能還不支持JDBC驅(qū)動程序中自動生成鍵的數(shù)據(jù)庫,MyBatis提供了另一種處理鍵生成的方式。

下面是一個(gè)簡單(有點(diǎn)傻)的示例,它將生成一個(gè)隨機(jī)的ID(實(shí)際中可能不太會這樣做,但這展示了MyBatis的靈活性和它對此并不介意):

<insert id="insertAuthor">
  <selectKey keyProperty="id" resultType="int" order="BEFORE">
    select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1
  </selectKey>
  insert into Author
    (id, username, password, email,bio, favourite_section)
  values
    (#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
</insert>

在上面的示例中,?selectKey?語句將首先執(zhí)行,Author對象的id屬性將被設(shè)置,然后再調(diào)用 ?insert?語句。這樣可以實(shí)現(xiàn)與數(shù)據(jù)庫自動生成鍵類似的行為,而不會增加Java代碼的復(fù)雜性。

`selectKey`元素的描述如下:

<selectKey
  keyProperty="id"
  resultType="int"
  order="BEFORE"
  statementType="PREPARED">

selectKey 屬性

Attribute(屬性)Description(描述)
keyProperty生成的鍵應(yīng)該設(shè)置在哪個(gè)目標(biāo)屬性上。如果期望有多個(gè)生成的列,則可以使用逗號分隔的屬性名稱列表。
keyColumn返回結(jié)果集中與屬性匹配的列名。如果期望有多個(gè)生成的列,則可以使用逗號分隔的列名列表。
resultType結(jié)果的類型。MyBatis通??梢宰詣幼R別,但為了確保準(zhǔn)確性,也可以顯式指定類型。MyBatis允許使用任何簡單類型作為鍵,包括字符串。如果預(yù)期生成多個(gè)列,則可以使用包含預(yù)期屬性的對象或映射。
order此屬性可以設(shè)置為 BEFORE 或 AFTER。如果設(shè)置為 BEFORE,則先執(zhí)行 selectKey 語句,將生成的鍵設(shè)置到 keyProperty 上,然后再執(zhí)行插入語句。如果設(shè)置為 AFTER,則先執(zhí)行插入語句,再執(zhí)行 selectKey 語句。這在某些數(shù)據(jù)庫(如 Oracle)中常見,因?yàn)樗鼈兛赡茉诓迦胝Z句中嵌入了序列調(diào)用。
statementType同上,MyBatis支持STATEMENT、PREPARED和CALLABLE語句類型,它們分別對應(yīng)于Statement、PreparedStatement和CallableStatement。

作為一種特殊情況,一些數(shù)據(jù)庫允許INSERT、UPDATE或DELETE語句返回結(jié)果集(例如PostgreSQL和MariaDB的RETURNING子句,或MS SQL Server的OUTPUT子句)。

這種類型的語句必須被寫成<select>來映射返回的數(shù)據(jù)。

<select id="insertAndGetAuthor" resultType="domain.blog.Author"
      affectData="true" flushCache="true">
  insert into Author (username, password, email, bio)
  values (#{username}, #{password}, #{email}, #{bio})
  returning id, username, password, email, bio
</select>

sql

該元素可用于定義可重復(fù)使用的 SQL 代碼片段,可以包含在其他語句中。它可以在靜態(tài)時(shí)(在加載階段)進(jìn)行參數(shù)化。不同屬性值可以在包含實(shí)例中變化。例如:

<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>

然后,這個(gè) SQL 片段可以被包含在另一個(gè)語句中,例如:

<select id="selectUsers" resultType="map">
  select
    <include refid="userColumns"><property name="alias" value="t1"/></include>,
    <include refid="userColumns"><property name="alias" value="t2"/></include>
  from some_table t1
    cross join some_table t2
</select>

屬性值也可以在包含的`refid`屬性或包含子句內(nèi)的屬性值中使用,例如:

<sql id="sometable">
  ${prefix}Table
</sql>

<sql id="someinclude">
  from
    <include refid="${include_target}"/>
</sql>

<select id="select" resultType="map">
  select
    field1, field2, field3
  <include refid="someinclude">
    <property name="prefix" value="Some"/>
    <property name="include_target" value="sometable"/>
  </include>
</select>

總結(jié)

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

相關(guān)文章

  • Caused?by:?java.lang.NumberFormatException:?For?input?string:?“port“(問題解決)

    Caused?by:?java.lang.NumberFormatException:?For?input?s

    這篇文章主要介紹了Caused?by:?java.lang.NumberFormatException:?For?input?string:?“port“,本文給大家分享完美解決方法,需要的朋友可以參考下
    2023-01-01
  • MyBatis源碼分析之日志記錄詳解

    MyBatis源碼分析之日志記錄詳解

    這篇文章主要給大家介紹了關(guān)于MyBatis源碼分析之日志記錄的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MyBatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • Java調(diào)用JavaScript實(shí)現(xiàn)字符串計(jì)算器代碼示例

    Java調(diào)用JavaScript實(shí)現(xiàn)字符串計(jì)算器代碼示例

    這篇文章主要介紹了Java調(diào)用JavaScript實(shí)現(xiàn)字符串計(jì)算器代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-12-12
  • Springboot整合SpringSecurity實(shí)現(xiàn)登錄認(rèn)證和鑒權(quán)全過程

    Springboot整合SpringSecurity實(shí)現(xiàn)登錄認(rèn)證和鑒權(quán)全過程

    這篇文章主要介紹了Springboot整合SpringSecurity實(shí)現(xiàn)登錄認(rèn)證和鑒權(quán)全過程,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • spring事物傳播propagation類別含義詳解

    spring事物傳播propagation類別含義詳解

    這篇文章主要介紹了spring事物傳播propagation類別含義詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java中switch的三種用法方式

    Java中switch的三種用法方式

    這篇文章主要介紹了Java中switch的三種用法方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • springboot實(shí)現(xiàn)圖片大小壓縮功能

    springboot實(shí)現(xiàn)圖片大小壓縮功能

    這篇文章主要為大家詳細(xì)介紹了springboot實(shí)現(xiàn)圖片大小壓縮功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Java開發(fā)人員最常犯的5個(gè)錯(cuò)誤總結(jié)

    Java開發(fā)人員最常犯的5個(gè)錯(cuò)誤總結(jié)

    作為一名java開發(fā)程序員,不知道大家有沒有遇到過一些匪夷所思的bug。這些錯(cuò)誤通常需要您幾個(gè)小時(shí)才能解決。今天,小編總結(jié)一些常見的編碼錯(cuò)誤,然后給出解決方案。希望大家在日常編碼中能夠避免這樣的問題
    2022-12-12
  • java中List集合子類特點(diǎn)淺析

    java中List集合子類特點(diǎn)淺析

    java.util.List接口繼承自Collection接口,是單列集合的一個(gè)重要分支,習(xí)慣性地會將實(shí)現(xiàn)了List接口的對象稱為List集合,下面這篇文章主要給大家介紹了關(guān)于java中List集合子類特點(diǎn)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • 詳解Springboot配置文件的使用

    詳解Springboot配置文件的使用

    在springboot項(xiàng)目中,也可以使用yml類型的配置文件代替properties文件。接下來通過本文給大家分享Springboot配置文件的使用,感興趣的朋友一起看看吧
    2017-07-07

最新評論