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

mybatis-plus集成springboot實(shí)現(xiàn)XML映射器方式

 更新時(shí)間:2026年03月15日 10:13:12   作者:一只游魚(yú)  
本文詳細(xì)介紹了MyBatis-Plus中SQL映射配置的使用方法,包括動(dòng)態(tài)SQL的支持和常見(jiàn)SQL操作的實(shí)現(xiàn),通過(guò)XML映射器,可以靈活地定義復(fù)雜的查詢語(yǔ)句,并處理動(dòng)態(tài)條件和批量操作,文中還提供了具體的配置步驟和示例代碼,幫助開(kāi)發(fā)者更好地理解和應(yīng)用這些功能

主要功能

SQL 映射配置

1、定義復(fù)雜的 SQL 查詢語(yǔ)句

2、配置數(shù)據(jù)庫(kù)操作與 Java 方法的映射關(guān)系

3、處理動(dòng)態(tài) SQL 語(yǔ)句

補(bǔ)充注解方式的不足

1、當(dāng) @Select、@Insert 等注解無(wú)法滿足復(fù)雜 SQL 需求時(shí)

2、更好地管理長(zhǎng) SQL 語(yǔ)句,提高代碼可讀性

3、支持復(fù)雜的條件判斷和循環(huán)操作

動(dòng)態(tài) SQL 支持

1、使用 <if>、<choose>、<when>、<otherwise> 等標(biāo)簽

2、實(shí)現(xiàn)條件查詢和動(dòng)態(tài)參數(shù)綁定

3、支持集合遍歷等復(fù)雜操作

使用場(chǎng)景

1、復(fù)雜查詢: 多表關(guān)聯(lián)查詢、嵌套查詢等

2、動(dòng)態(tài)條件: 根據(jù)不同參數(shù)構(gòu)建不同的 SQL 語(yǔ)句

3、批量操作: 批量插入、更新等操作

4、自定義 SQL: 當(dāng) MyBatis-Plus 提供的通用方法無(wú)法滿足需求時(shí)

XML 映射器本質(zhì)上是 MyBatis 的特性,在 MyBatis-Plus 中同樣適用,可以與通用 Mapper 方法并存使用。

應(yīng)用

1.依賴

???????<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.9</version>
</dependency>

2.配置

在application.properties文件中配置:

# 指定Mapper接口的xml文件位置

mybatis-plus.mapper-locations=classpath*:mapper/**/*.xml 

# 實(shí)體類(lèi)包名

mybatis-plus.type-aliases-package=com.example.demo.pojo

3.創(chuàng)建xml文件

在mapper文件夾下新建xml包,新建UserMapper.xml文件,寫(xiě)入以下測(cè)試內(nèi)容:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">



<mapper namespace="com.example.demo.mapper.UserMapper" >



<!--這里寫(xiě)了一個(gè)方便區(qū)分的sql-->

    <delete id="deleteUserAaaaa">

        DELETE FROM user WHERE id = #{id}

    </delete>


</mapper>

4.聲明方法

在UserMapper文件里聲明:

//記得加上@mapper注解
@Mapper

public interface UserMapper extends BaseMapper<User> {

    int deleteUserAaaaa(@Param("id") Long id);



}

5.使用

這里在測(cè)試類(lèi)里測(cè)試,

@Test

void testLogicDelete(){

    int affectedRows = userMapper.deleteUserAaaaa(4L);

    System.out.println("刪除了" + affectedRows + "條記錄");

}

運(yùn)行后顯示成功。。。。

常見(jiàn)SQL操作實(shí)現(xiàn)

(以下是官方的文檔XML 映射器_MyBatis中文網(wǎng)

1.Select

<select
  id="selectPerson"
  parameterType="int"
  parameterMap="deprecated"
  resultType="hashmap"
  resultMap="personResultMap"
  flushCache="false"
  useCache="true"
  timeout="10"
  fetchSize="256"
  statementType="PREPARED"
  resultSetType="FORWARD_ONLY">

屬性:

id

在命名空間中唯一的標(biāo)識(shí)符,可以被用來(lái)引用這條語(yǔ)句。

parameterType

將會(huì)傳入這條語(yǔ)句的參數(shù)的類(lèi)全限定名或別名。這個(gè)屬性是可選的,因?yàn)?/span> MyBatis 可以通過(guò)類(lèi)型處理器(TypeHandler)推斷出具體傳入語(yǔ)句的參數(shù),默認(rèn)值為未設(shè)置(unset)。

parameterMap

用于引用外部 parameterMap 的屬性,目前已被廢棄。請(qǐng)使用行內(nèi)參數(shù)映射和 parameterType 屬性。

resultType

期望從這條語(yǔ)句中返回結(jié)果的類(lèi)全限定名或別名。 注意,如果返回的是集合,那應(yīng)該設(shè)置為集合包含的類(lèi)型,而不是集合本身的類(lèi)型。 resultType resultMap 之間只能同時(shí)使用一個(gè)。

resultMap

對(duì)外部 resultMap 的命名引用。結(jié)果映射是 MyBatis 最強(qiáng)大的特性,如果你對(duì)其理解透徹,許多復(fù)雜的映射問(wèn)題都能迎刃而解。 resultType resultMap 之間只能同時(shí)使用一個(gè)。

flushCache

將其設(shè)置為 true 后,只要語(yǔ)句被調(diào)用,都會(huì)導(dǎo)致本地緩存和二級(jí)緩存被清空,默認(rèn)值:false。

useCache

將其設(shè)置為 true 后,將會(huì)導(dǎo)致本條語(yǔ)句的結(jié)果被二級(jí)緩存緩存起來(lái),默認(rèn)值:對(duì) select 元素為 true。

timeout

這個(gè)設(shè)置是在拋出異常之前,驅(qū)動(dòng)程序等待數(shù)據(jù)庫(kù)返回請(qǐng)求結(jié)果的秒數(shù)。默認(rèn)值為未設(shè)置(unset)(依賴數(shù)據(jù)庫(kù)驅(qū)動(dòng))。

fetchSize

這是一個(gè)給驅(qū)動(dòng)的建議值,嘗試讓驅(qū)動(dòng)程序每次批量返回的結(jié)果行數(shù)等于這個(gè)設(shè)置值。 默認(rèn)值為未設(shè)置(unset)(依賴驅(qū)動(dòng))。

statementType

可選 STATEMENT,PREPARED CALLABLE。這會(huì)讓 MyBatis 分別使用 Statement,PreparedStatement CallableStatement,默認(rèn)值:PREPARED。

resultSetType

FORWARD_ONLY,SCROLL_SENSITIVE, SCROLL_INSENSITIVE DEFAULT(等價(jià)于 unset 中的一個(gè),默認(rèn)值為 unset (依賴數(shù)據(jù)庫(kù)驅(qū)動(dòng))。

databaseId

如果配置了數(shù)據(jù)庫(kù)廠商標(biāo)識(shí)(databaseIdProvider),MyBatis 會(huì)加載所有不帶 databaseId 或匹配當(dāng)前 databaseId 的語(yǔ)句;如果帶和不帶的語(yǔ)句都有,則不帶的會(huì)被忽略。

resultOrdered

這個(gè)設(shè)置僅針對(duì)嵌套結(jié)果 select 語(yǔ)句:如果為 true,將會(huì)假設(shè)包含了嵌套結(jié)果集或是分組,當(dāng)返回一個(gè)主結(jié)果行時(shí),就不會(huì)產(chǎn)生對(duì)前面結(jié)果集的引用。 這就使得在獲取嵌套結(jié)果集的時(shí)候不至于內(nèi)存不夠用。默認(rèn)值:false。

2.insert, update 和 delete

<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">

屬性:

id

在命名空間中唯一的標(biāo)識(shí)符,可以被用來(lái)引用這條語(yǔ)句。

parameterType

將會(huì)傳入這條語(yǔ)句的參數(shù)的類(lèi)全限定名或別名。這個(gè)屬性是可選的,因?yàn)?/span> MyBatis 可以通過(guò)類(lèi)型處理器(TypeHandler)推斷出具體傳入語(yǔ)句的參數(shù),默認(rèn)值為未設(shè)置(unset)。

parameterMap

用于引用外部 parameterMap 的屬性,目前已被廢棄。請(qǐng)使用行內(nèi)參數(shù)映射和 parameterType 屬性。

flushCache

將其設(shè)置為 true 后,只要語(yǔ)句被調(diào)用,都會(huì)導(dǎo)致本地緩存和二級(jí)緩存被清空,默認(rèn)值:(對(duì) insert、update delete 語(yǔ)句)true。

timeout

這個(gè)設(shè)置是在拋出異常之前,驅(qū)動(dòng)程序等待數(shù)據(jù)庫(kù)返回請(qǐng)求結(jié)果的秒數(shù)。默認(rèn)值為未設(shè)置(unset)(依賴數(shù)據(jù)庫(kù)驅(qū)動(dòng))。

statementType

可選 STATEMENT,PREPARED CALLABLE。這會(huì)讓 MyBatis 分別使用 Statement,PreparedStatement CallableStatement,默認(rèn)值:PREPARED。

useGeneratedKeys

(僅適用于 insert update)這會(huì)令 MyBatis 使用 JDBC getGeneratedKeys 方法來(lái)取出由數(shù)據(jù)庫(kù)內(nèi)部生成的主鍵(比如:像 MySQL SQL Server 這樣的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)的自動(dòng)遞增字段),默認(rèn)值:false。

keyProperty

(僅適用于 insert update)指定能夠唯一識(shí)別對(duì)象的屬性,MyBatis 會(huì)使用 getGeneratedKeys 的返回值或 insert 語(yǔ)句的 selectKey 子元素設(shè)置它的值,默認(rèn)值:未設(shè)置(unset)。如果生成列不止一個(gè),可以用逗號(hào)分隔多個(gè)屬性名稱。

keyColumn

(僅適用于 insert update)設(shè)置生成鍵值在表中的列名,在某些數(shù)據(jù)庫(kù)(像 PostgreSQL)中,當(dāng)主鍵列不是表中的第一列的時(shí)候,是必須設(shè)置的。如果生成列不止一個(gè),可以用逗號(hào)分隔多個(gè)屬性名稱。

databaseId

如果配置了數(shù)據(jù)庫(kù)廠商標(biāo)識(shí)(databaseIdProvider),MyBatis 會(huì)加載所有不帶 databaseId 或匹配當(dāng)前 databaseId 的語(yǔ)句;如果帶和不帶的語(yǔ)句都有,則不帶的會(huì)被忽略。

3.動(dòng)態(tài)SQL

<!--    if標(biāo)簽-->

    <select id="selectUsers" resultType="User">

        SELECT * FROM user

        WHERE 1=1

        <if test="name != null">

            AND name = #{name}

        </if>

        <if test="age != null">

            AND age = #{age}

        </if>

    </select>



<!--    choose/when/otherwise 標(biāo)簽-->

    <select id="selectUsers" resultType="User">

        SELECT * FROM user

        WHERE 1=1

        <choose>

            <when test="name != null">

                AND name = #{name}

            </when>

            <when test="email != null">

                AND email = #{email}

            </when>

            <otherwise>

                AND status = 1

            </otherwise>

        </choose>

    </select>



<!--    where 標(biāo)簽 (自動(dòng)處理 WHERE 和 AND/OR)-->

    <select id="selectUsers" resultType="User">

        SELECT * FROM user

        <where>

            <if test="name != null">

                AND name = #{name}

            </if>

            <if test="age != null">

                AND age = #{age}

            </if>

        </where>

    </select>



<!--    set 標(biāo)簽 (用于 UPDATE 語(yǔ)句)-->

    <update id="updateUser">

        UPDATE user

        <set>

            <if test="name != null">name=#{name},</if>

            <if test="age != null">age=#{age},</if>

            <if test="email != null">email=#{email},</if>

        </set>

        WHERE id=#{id}

    </update>

4.常見(jiàn)問(wèn)題解決

參數(shù)為 null 的判斷

<if test="name != null and name != ''">  <!-- 同時(shí)檢查null和空字符串 -->

  AND name = #{name}

</if>

集合判空

<if test="ids != null and ids.size() > 0">

  AND id IN

  <foreach collection="ids" item="id" open="(" separator="," close=")">

    #{id}

  </foreach>

</if>

動(dòng)態(tài)排序

<if test="orderBy != null">

  ORDER BY ${orderBy}

  <if test="asc != null and asc">

    ASC

  </if>

  <if test="asc != null and !asc">

    DESC

  </if>

</if>

總結(jié)

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

相關(guān)文章

  • Java讀取數(shù)據(jù)庫(kù)表的示例代碼

    Java讀取數(shù)據(jù)庫(kù)表的示例代碼

    這篇文章主要介紹了Java讀取數(shù)據(jù)庫(kù)表,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Java實(shí)現(xiàn)合并多個(gè)升序鏈表

    Java實(shí)現(xiàn)合并多個(gè)升序鏈表

    本文主要介紹了Java實(shí)現(xiàn)合并多個(gè)升序鏈表,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Java使用集合實(shí)現(xiàn)斗地主分牌完整代碼

    Java使用集合實(shí)現(xiàn)斗地主分牌完整代碼

    在斗地主游戲中,通常是將一副牌平均分成3份,每份17張牌,并留3張底牌,我們可以使用集合來(lái)實(shí)現(xiàn)這一功能,這篇文章主要給大家介紹了關(guān)于Java使用集合實(shí)現(xiàn)斗地主分牌的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • Springboot 使用 JSR 303 對(duì) Controller 控制層校驗(yàn)及 Service 服務(wù)層 AOP 校驗(yàn) 使用消息資源文件對(duì)消息國(guó)際化

    Springboot 使用 JSR 303 對(duì) Controller 控制層校驗(yàn)及 Service 服務(wù)層 AOP 校驗(yàn)

    這篇文章主要介紹了Springboot 使用 JSR 303 對(duì) Controller 控制層校驗(yàn)及 Service 服務(wù)層 AOP 校驗(yàn) 使用消息資源文件對(duì)消息國(guó)際化的相關(guān)知識(shí),需要的朋友可以參考下
    2017-12-12
  • 關(guān)于Maven生命周期相關(guān)命令演示

    關(guān)于Maven生命周期相關(guān)命令演示

    Maven的生命周期分為Clean、Default和Site三個(gè)主要階段,每個(gè)階段包含多個(gè)關(guān)鍵步驟,如清理、編譯、測(cè)試、打包等,通過(guò)執(zhí)行相應(yīng)的Maven命令,可以高效地管理和構(gòu)建Java項(xiàng)目
    2025-01-01
  • Nacos配置中心命名空間與組的用法解讀

    Nacos配置中心命名空間與組的用法解讀

    文章介紹了如何將配置文件拆分并放在Nacos配置中心中,包括創(chuàng)建命名空間和組、配置數(shù)據(jù)源、MyBatis和Spring的配置,以及如何通過(guò)bootstrap.properties文件從Nacos中引入多個(gè)配置文件,測(cè)試發(fā)現(xiàn)項(xiàng)目能正常運(yùn)行,并且切換環(huán)境只需修改組名
    2026-03-03
  • Java反轉(zhuǎn)字符串的10種方法

    Java反轉(zhuǎn)字符串的10種方法

    這篇文章主要介紹了Java反轉(zhuǎn)字符串的10種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,下面我們來(lái)一起學(xué)習(xí)一下吧
    2019-06-06
  • Java基礎(chǔ)第二篇方法與數(shù)據(jù)成員

    Java基礎(chǔ)第二篇方法與數(shù)據(jù)成員

    在上一篇文章中介紹了Java基礎(chǔ) 從HelloWorld到面向?qū)ο?,我們初步了解了?duì)象(object)。對(duì)象中的數(shù)據(jù)成員表示對(duì)象的狀態(tài)。對(duì)象可以執(zhí)行方法,表示特定的動(dòng)作。這篇文章我們進(jìn)一步深入到對(duì)象。了解Java中方法與數(shù)據(jù)成員的一些細(xì)節(jié)。
    2021-09-09
  • eclipse中maven的pom.xml文件中增加依賴的方法

    eclipse中maven的pom.xml文件中增加依賴的方法

    日 在Maven項(xiàng)目中,可以使用pom.xml文件來(lái)添加依賴包,本文主要介紹了eclipse中maven的pom.xml文件中增加依賴的方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • 基于JavaBean編輯器讀取peroperties文件的實(shí)例

    基于JavaBean編輯器讀取peroperties文件的實(shí)例

    下面小編就為大家?guī)?lái)一篇基于JavaBean編輯器讀取peroperties文件的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10

最新評(píng)論

永新县| 双鸭山市| 沾化县| 苏尼特左旗| 枣庄市| 阿巴嘎旗| 门源| 五河县| 开远市| 博客| 邯郸市| 怀化市| 资阳市| 贺兰县| 饶阳县| 金山区| 长子县| 西畴县| 余干县| 高青县| 怀来县| 上饶县| 衡水市| 湘潭县| 东方市| 宁强县| 秦皇岛市| 江阴市| 鹿泉市| 鲁甸县| 怀来县| 凤庆县| 阳原县| 潮安县| 孝义市| 台安县| 芦溪县| 象州县| 安塞县| 林口县| 镇沅|