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

mybatis的mapper對應(yīng)的xml寫法及配置詳解

 更新時間:2025年05月29日 10:45:07   作者:abcnull  
這篇文章給大家介紹mybatis的mapper對應(yīng)的xml寫法及配置詳解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧

前置

你使用

  • java
  • mybatis/mybatis plus

如果你使用 mybatis plus,也是會向下兼容 mybatis 的

mapper 對應(yīng) xml 基礎(chǔ)配置

<?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.mapper.UserMapper">
    <!-- SQL 映射語句 -->
</mapper>

簡單查詢:

<!-- 簡單查詢 -->
<select id="getUserById" resultType="com.example.model.User">
	SELECT * FROM user WHERE id = #{id}
</select>
  • id:與 Mapper 接口中的方法名一致
  • resultType:返回值類型(Java 類的全限定名或別名)
  • #{id}:預(yù)編譯參數(shù),防止 SQL 注入
  • 如果返回 List,直接使用 resultType 即可,無需額外配置

簡單插入:

<insert id="insertUser" parameterType="com.example.model.User">
    INSERT INTO user (name, age) VALUES (#{name}, #{age})
</insert>

parameterType:輸入?yún)?shù)類型(可選,MyBatis 可自動推斷)

簡單更新:

<update id="updateUser" parameterType="com.example.model.User">
    UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
</update>

簡單刪除:

<delete id="deleteUserById" parameterType="int">
    DELETE FROM user WHERE id = #{id}
</delete>

mapper 對應(yīng) xml 復(fù)雜配置

resultMap 配置
當(dāng)數(shù)據(jù)庫字段名與 Java 對象屬性名不一致時,需使用 映射。一般都需要配置

<resultMap id="userResultMap" type="com.example.model.User">
    <id property="id" column="user_id"/>       <!-- 主鍵映射 -->
    <result property="name" column="user_name"/> <!-- 字段映射 -->
    <result property="age" column="user_age"/>
</resultMap>
<select id="getUserById" resultMap="userResultMap">
    SELECT user_id, user_name, user_age FROM user WHERE user_id = #{id}
</select>

if 條件

<select id="searchUsers" resultType="com.example.model.User">
    SELECT * FROM user
    <where>
        <if test="name != null anconcatd name != ''">
            AND name LIKE CONCAT('%', #{name}, '%')
        </if>
        <if test="age != null">
            AND age = #{age}
        </if>
    </where>
</select>

在MyBatis中,如果不寫這樣的條件判斷,如果是對表的寫操作,如 update,其中的 set 中當(dāng)name參數(shù)為null時,生成的SQL語句會直接包含name = null,從而將數(shù)據(jù)庫中的對應(yīng)字段更新為NULL。這是MyBatis的默認行為,需要開發(fā)者顯式控制是否要過濾null值

多條件選擇 choose
類似于 Java 中的 switch-case 或 if-else 邏輯
<choose><when> 是按順序判斷的,一旦某個條件滿足,后續(xù)條件不再判斷

<select id="findUser" resultType="com.example.model.User">
    SELECT * FROM user
    <where>
        <choose>
            <when test="type == 'name'">
                AND name = #{value}
            </when>
            <when test="type == 'email'">
                AND email = #{value}
            </when>
            <otherwise>
                AND status = 'active'
            </otherwise>
        </choose>
    </where>
</select>

<otherwise> 是可選的,但如果省略且所有 <when> 條件都不滿足,會導(dǎo)致 SQL 語句不完整或無效

遍歷集合 foreach

<select id="getUsersByIds" resultType="com.example.model.User">
    SELECT * FROM user
    WHERE id IN
    <foreach item="id" collection="ids" open="(" separator="," close=")">
        #{id}
    </foreach>
</select>

分頁查詢

<select id="getUsersByPage" resultType="com.example.model.User">
    SELECT * FROM user
    LIMIT #{offset}, #{limit}
</select>

你也可以使用 pagehelper 工具,更常用,那就不需要 limit offset

如果你使用 mybatis plus,也有自己的方式,可以使用 IPage 來分頁

Mapper 中的相關(guān)注解

@Param注解

@Select("SELECT * FROM user WHERE name = #{user_name} AND age = #{user_age}")
User getUserByNameAndAge(@Param("user_name") String userName, @Param("user_age") int userAge);

如果沒寫 @Param,MyBatis 默認將未使用 @Param 注解的參數(shù)封裝為 Map,鍵名為 param1、param2、…、paramN(按參數(shù)順序遞增),也就是說 sql 中應(yīng)該寫 #{param1}#{param2}

其他

如果你不想使用 resultMap 來映射 mysql column 和 entity 的 field,還有其他辦法嗎?
方法一,使用 mybatis plus 的 @TableField 注解來指定 column 和 field 的映射
方法二:xml 中使用別名

<select id="getUserById" resultType="com.example.model.User">
    SELECT user_id AS id, user_name AS name, user_age AS age FROM user
</select>

choose when 和 if 區(qū)別
if 是獨立的判斷,而 choose when 更像 ifelse 邏輯,一旦判斷一個滿足,后續(xù)的 when 就不執(zhí)行了!

到此這篇關(guān)于mybatis的mapper對應(yīng)的xml寫法的文章就介紹到這了,更多相關(guān)mybatis mapper對應(yīng)的xml寫法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何使用IDEA完成登錄與注冊功能

    如何使用IDEA完成登錄與注冊功能

    這篇文章主要介紹了如何使用IDEA完成登錄與注冊功能,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • Java8時間接口LocalDateTime詳細用法

    Java8時間接口LocalDateTime詳細用法

    最近看別人項目源碼,發(fā)現(xiàn)Java8新的日期時間API很方便強大,所以整理了這篇文章,文中有非常詳細的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • Java適配器模式_動力節(jié)點Java學(xué)院整理

    Java適配器模式_動力節(jié)點Java學(xué)院整理

    這篇文章主要介紹了Java適配器模式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Java利用Zxing生成二維碼的簡單實例

    Java利用Zxing生成二維碼的簡單實例

    下面小編就為大家?guī)硪黄狫ava利用Zxing生成二維碼的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • mac安裝配置jdk環(huán)境變量

    mac安裝配置jdk環(huán)境變量

    這篇文章主要為大家介紹了mac安裝配置jdk環(huán)境變量實現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • mybatis如何使用Map接收返回值

    mybatis如何使用Map接收返回值

    這篇文章主要介紹了mybatis如何使用Map接收返回值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 使用springboot每日推送早安問候語到用戶微信的全過程

    使用springboot每日推送早安問候語到用戶微信的全過程

    近期網(wǎng)上又出現(xiàn)一股給女朋友做微信公眾號推送的潮流,所以這篇文章主要給大家介紹了關(guān)于如何使用springboot每日推送早安問候語到用戶微信的相關(guān)資料,文中通過圖文以及實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • Java如何接收XML格式參數(shù)并轉(zhuǎn)換為JSON

    Java如何接收XML格式參數(shù)并轉(zhuǎn)換為JSON

    在 Java 應(yīng)用程序中,處理 XML 數(shù)據(jù)并將其轉(zhuǎn)換為 JSON 格式是很常見的任務(wù),這篇文章為大家整理了一下具體的實現(xiàn)方法,希望對大家有所幫助
    2025-03-03
  • IDEA報錯“Command line is too long”的解決步驟

    IDEA報錯“Command line is too long”的解決步驟

    這篇文章解釋了在使用SpringBoot項目時,因啟動命令行過長導(dǎo)致啟動失敗的問題,并提供了兩種解決方案:JARmanifest和classpathfile,推薦使用JARmanifest,如果遇到類加載問題可;同時提供了修改默認模板的方法,以避免以后的新項目再次遇到此問題,需要的朋友可以參考下
    2026-05-05
  • Java中使用@CrossOrigin和Proxy解決跨域問題詳解

    Java中使用@CrossOrigin和Proxy解決跨域問題詳解

    這篇文章主要介紹了Java中使用@CrossOrigin和Proxy解決跨域問題詳解,在Web開發(fā)中,如果前端頁面和后端接口不在同一個域名下,就會發(fā)生跨域請求的問題,同源策略是瀏覽器的一種安全策略,它限制了來自不同源的客戶端腳本在瀏覽器中運行時的交互,需要的朋友可以參考下
    2023-12-12

最新評論

吴堡县| 乐平市| 舒兰市| 革吉县| 日照市| 龙陵县| 肃宁县| 新干县| 枝江市| 定结县| 马公市| 沭阳县| 临沭县| 余江县| 益阳市| 遵义市| 昆明市| 蓝山县| 广德县| 明水县| 绍兴市| 海兴县| 仪陇县| 钦州市| 大渡口区| 黔西| 徐州市| 和龙市| 清新县| 揭阳市| 凤山市| 沙湾县| 敦化市| 叶城县| 松江区| 会同县| 昭苏县| 绍兴县| 偃师市| 太康县| 湟中县|