14、MyBatis动态标签的使用详解
千里之行,始于足下
正文
一、符号转义详解:
1、转义字符方式:
含义 | 原符号 | 转义字符 |
---|---|---|
小于 | < | < |
小于等于 | <= | <= |
大于 | > | > |
大于等于 | >= | >= |
逻辑与(和) | & | & |
单引号 | ‘ | ' |
双引号 | “ | " |
# 查询创建时间是小于2023年的用户
SELECT * FROM user where create_at < '2023'
2、XML语法方式:
含义 |
原符号 |
转义字符 |
小于 |
< |
<![CDATA[ < ]]> |
小于等于 |
<= |
<![CDATA[ <= ]]> |
大于 |
> |
<![CDATA[ > ]]> |
大于等于 |
>= |
<![CDATA[ >= ]]> |
逻辑与(和) |
& |
<![CDATA[ & ]]> |
单引号 |
‘ |
<![CDATA[ ’ ]]> |
双引号 |
“ |
<![CDATA[ " ]]> |
# 查询创建时间是小于2023年的用户
SELECT * FROM user where create_at <![CDATA[ < ]]> '2023'
二、动态<if>标签使用详解:
1、if标签判断不为空:
<select id="selectAllDemo" resultMap="BaseResultMap" parameterType="java.lang.String"> select <include refid="Base_Column_List"/> from page_demo where delete = 0 <if test="id neq null and id != ''"> AND uuid = #{id} </if> </select>
2、if标签判断String类型:
<select id="selectAllDemo" resultMap="BaseResultMap" parameterType="java.lang.String"> select <include refid="Base_Column_List"/> from page_demo where delete = 0 <if test="name == 'one'.toString()"> AND nums > 10 </if> </select>
3、if标签判断Integer类型:
MyBatis规定,MyBatis在进行判断时,会将Integer=0的参数默认为‘’(空串),允许数字与字符串做比较
方式一:
<select id="selectAllDemo" resultMap="BaseResultMap" parameterType="java.lang.String"> select <include refid="Base_Column_List"/> from page_demo where delete = 0 <if test="nums != null"> AND nums = #{nums } </if> </select>
方式二:
<select id="selectAllDemo" resultMap="BaseResultMap" parameterType="java.lang.String"> select <include refid="Base_Column_List"/> from page_demo where delete = 0 <if test="nums > '0'.toString()"> AND nums > #{nums } </if> </select>
4、if标签判断Boolean类型:
方式一:
<select id="selectAllDemo" resultMap="BaseResultMap" parameterType="java.lang.String"> select <include refid="Base_Column_List"/> from page_demo where delete = 0 <if test="isReport"> AND is_report = 1 </if> </select>
方式二:
<select id="selectAllDemo" resultMap="BaseResultMap" parameterType="java.lang.String"> select <include refid="Base_Column_List"/> from page_demo where delete = 0 <if test="isReport != null and 'true'.toString() == isReport .toString()"> AND is_report = #{isReport} </if> </select>
三、动态<foreach>标签使用详解:
1、foreach标签循环String类型:
<select id="selectAllDemo" resultMap="BaseResultMap" parameterType="java.lang.String"> select <include refid="Base_Column_List"/> from page_demo where delete = 0 <if test="names != null and names != ''"> AND ( <foreach collection="names.split(',')" item="item" separator=" OR "> name LIKE CONCAT('%', #{item}, '%') </foreach>) </if> <if test="ids != null and ids != ''"> AND id IN <foreach collection="ids.split(',')" item="item" index="index" open="(" separator="," close=")"> #{item} </foreach> </if> </select>
2、foreach标签循环List类型:
<select id="selectAllDemo" resultMap="BaseResultMap" > select <include refid="Base_Column_List"/> from page_demo where delete = 0 <if test="idList != null"> id IN <foreach collection="idList" item="id" index="index" open="(" separator="," close=")"> #{id, jdbcType=CHAR} </foreach> </if> </select>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)