mybatis的mapper對應(yīng)的xml寫法及配置詳解
前置
你使用
- 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 配置
當數(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 中當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)文章希望大家以后多多支持腳本之家!
- Mybatis Mapper XML文件-插入,更新,刪除詳解(insert, update and delete)
- MyBatis Mapper.xml入?yún)ist使用in函數(shù)問題
- Mybatis mapper.xml使用全局變量的三種實現(xiàn)方法
- MyBatis?Mapper.XML?標簽使用小結(jié)
- Mybatis映射文件詳解之mapper.xml文件
- 修改SpringBoot 中MyBatis的mapper.xml文件位置的過程詳解
- Mybatis往Mapper.xml文件中傳遞多個參數(shù)問題
- MyBatis中的mapper.xml配置教程
- Mybatis中關(guān)于自定義mapper.xml時,參數(shù)傳遞的方式及寫法
- Mybatis mapper配置文件xml存放位置
- Mybatis Mapper接口和xml綁定的多種方式、內(nèi)部實現(xiàn)原理和過程解析
相關(guān)文章
圖解Java經(jīng)典算法希爾排序的原理與實現(xiàn)
希爾排序是希爾(Donald Shell)于1959年提出的一種排序算法。希爾排序也是一種插入排序,它是簡單插入排序經(jīng)過改進之后的一個更高效的版本,也稱為縮小增量排序,同時該算法是沖破O(n2)的第一批算法之一。本文會以圖解的方式詳細介紹希爾排序的基本思想及其代碼實現(xiàn)2022-09-09Maven及Springboot配置JDK版本,編碼,源碼打包等方式
這篇文章主要介紹了Maven及Springboot配置JDK版本,編碼,源碼打包等方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12SpringBoot后端進行數(shù)據(jù)校驗JSR303的使用詳解
這篇文章主要介紹了SpringBoot后端進行數(shù)據(jù)校驗JSR303的使用詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03關(guān)于jackson序列化和feign返回值的問題
這篇文章主要介紹了關(guān)于jackson序列化和feign返回值的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03