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>