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

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

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

前置

你使用

  • java
  • mybatis/mybatis plus

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

mapper 對(duì)應(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 映射語(yǔ)句 -->
</mapper>

簡(jiǎn)單查詢:

<!-- 簡(jiǎn)單查詢 -->
<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 即可,無(wú)需額外配置

簡(jiǎn)單插入:

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

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

簡(jiǎn)單更新:

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

簡(jiǎn)單刪除:

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

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

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

<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中,如果不寫(xiě)這樣的條件判斷,如果是對(duì)表的寫(xiě)操作,如 update,其中的 set 中當(dāng)name參數(shù)為null時(shí),生成的SQL語(yǔ)句會(huì)直接包含name = null,從而將數(shù)據(jù)庫(kù)中的對(duì)應(yīng)字段更新為NULL。這是MyBatis的默認(rèn)行為,需要開(kāi)發(fā)者顯式控制是否要過(guò)濾null值

多條件選擇 choose
類似于 Java 中的 switch-case 或 if-else 邏輯
<choose><when> 是按順序判斷的,一旦某個(gè)條件滿足,后續(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> 條件都不滿足,會(huì)導(dǎo)致 SQL 語(yǔ)句不完整或無(wú)效

遍歷集合 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>

分頁(yè)查詢

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

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

如果你使用 mybatis plus,也有自己的方式,可以使用 IPage 來(lái)分頁(yè)

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);

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

其他

如果你不想使用 resultMap 來(lái)映射 mysql column 和 entity 的 field,還有其他辦法嗎?
方法一,使用 mybatis plus 的 @TableField 注解來(lái)指定 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 是獨(dú)立的判斷,而 choose when 更像 ifelse 邏輯,一旦判斷一個(gè)滿足,后續(xù)的 when 就不執(zhí)行了!

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

相關(guān)文章

  • 圖解Java經(jīng)典算法希爾排序的原理與實(shí)現(xiàn)

    圖解Java經(jīng)典算法希爾排序的原理與實(shí)現(xiàn)

    希爾排序是希爾(Donald Shell)于1959年提出的一種排序算法。希爾排序也是一種插入排序,它是簡(jiǎn)單插入排序經(jīng)過(guò)改進(jìn)之后的一個(gè)更高效的版本,也稱為縮小增量排序,同時(shí)該算法是沖破O(n2)的第一批算法之一。本文會(huì)以圖解的方式詳細(xì)介紹希爾排序的基本思想及其代碼實(shí)現(xiàn)
    2022-09-09
  • JEE與Spring Boot代碼性能比較分析

    JEE與Spring Boot代碼性能比較分析

    JavaEE與Spring Boot其實(shí)很難比較測(cè)試,前者適合單體SOA架構(gòu),后者適合微服務(wù),但是還是有好事者把兩者放在一起比較性能。這篇文章主要介紹了JEE與Spring Boot代碼性能比較,需要的朋友可以參考下
    2018-11-11
  • 從零開(kāi)始學(xué)java之二叉樹(shù)和哈希表實(shí)現(xiàn)代碼

    從零開(kāi)始學(xué)java之二叉樹(shù)和哈希表實(shí)現(xiàn)代碼

    這篇文章主要介紹了java之二叉樹(shù)和哈希表實(shí)現(xiàn)的相關(guān)資料,二叉查找樹(shù)和平衡二叉樹(shù)是二叉樹(shù)的兩種特殊形式,哈希表是一種通過(guò)哈希函數(shù)將數(shù)據(jù)與哈希值關(guān)聯(lián)起來(lái)的數(shù)據(jù)結(jié)構(gòu),可以快速查找數(shù)據(jù),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • Maven及Springboot配置JDK版本,編碼,源碼打包等方式

    Maven及Springboot配置JDK版本,編碼,源碼打包等方式

    這篇文章主要介紹了Maven及Springboot配置JDK版本,編碼,源碼打包等方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringBoot后端進(jìn)行數(shù)據(jù)校驗(yàn)JSR303的使用詳解

    SpringBoot后端進(jìn)行數(shù)據(jù)校驗(yàn)JSR303的使用詳解

    這篇文章主要介紹了SpringBoot后端進(jìn)行數(shù)據(jù)校驗(yàn)JSR303的使用詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • 線程池的七大核心參數(shù)以及常用的四種線程池詳解

    線程池的七大核心參數(shù)以及常用的四種線程池詳解

    這篇文章主要介紹了線程池的七大核心參數(shù)以及常用的四種線程池使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • Java 注解學(xué)習(xí)筆記

    Java 注解學(xué)習(xí)筆記

    這篇文章主要介紹了Java 注解的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • java基于UDP實(shí)現(xiàn)在線聊天功能

    java基于UDP實(shí)現(xiàn)在線聊天功能

    這篇文章主要為大家詳細(xì)介紹了java基于UDP實(shí)現(xiàn)在線聊天功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • 關(guān)于jackson序列化和feign返回值的問(wèn)題

    關(guān)于jackson序列化和feign返回值的問(wèn)題

    這篇文章主要介紹了關(guān)于jackson序列化和feign返回值的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 用Java將字符串的首字母轉(zhuǎn)換大小寫(xiě)

    用Java將字符串的首字母轉(zhuǎn)換大小寫(xiě)

    在項(xiàng)目開(kāi)發(fā)的時(shí)候會(huì)需要統(tǒng)一字符串的格式,比如首字母要求統(tǒng)一大寫(xiě)或小寫(xiě),那用Java如何實(shí)現(xiàn)這一功能?下面一起來(lái)學(xué)習(xí)學(xué)習(xí)。
    2016-08-08

最新評(píng)論