mybatis 动态sql

作者: adm 分类: java,mybatis 发布时间: 2023-07-28

if 标签
if 标签通常用于 WHERE 语句、UPDATE 语句、INSERT 语句中,通过判断参数值来决定是否使用某个查询条件、判断是否更新某一个字段、判断是否插入某个字段的值。

<if test="name != null and name != ''">
    and NAME = #{name}
</if>

where 标签
当 name 值为 null 时,查询语句会出现 “WHERE AND” 的情况,解决该情况除了将”WHERE”改为“WHERE 1=1”之外,还可以利用 where标签。

这个“where”标签会知道如果它包含的标签中有返回值的话,它就插入一个‘where’。此外,如果标签返回的内容是以 AND 或 OR 开头的,则它会剔除掉。

<select id="getStudentListWhere" parameterType="Object" resultMap="BaseResultMap">
    SELECT * from STUDENT
    <where>
        <if test="name!=null and name!='' ">
            NAME LIKE CONCAT(CONCAT('%', #{name}),'%')
        </if>
        <if test="hobby!= null and hobby!= '' ">
            AND hobby = #{hobby}
        </if>
    </where>
</select>

Set标签

<update id="updateUser" parameterType="com.pojo.User"> 
    UPDATE user  
    <set> 
        <if test="username!= null and username != '' ">  
            username = #{username},  
        </if>  
        <if test="sex!= null and sex!= '' "> 
           sex = #{sex},  
        </if>  
        <if test="birthday != null "> 
            birthday = #{birthday},  
       </if>  
    </set>   
    WHERE user_id = #{userid}      
 </update>  

trim标签

 <select id="selectByNameOrHobby" resultMap="BaseResultMap">  
	select * from student 
	 <trim prefix="WHERE" prefixOverrides="AND | OR">  
		 <if test="name != null and name.length()>0">  
			AND name=#{name}
		</if>
		 <if test="hobby != null and hobby.length()>0">  
			AND hobby=#{hobby}
		</if>
	 </trim>  
</select>

foreach 标签
主要用于构建 in 条件,可在 sql 中对集合进行迭代。也常用到批量删除、添加等操作中


<select id="selectIn" resultMap="BaseResultMap">  
    select name,hobby from student 
    where id in
    <foreach item="item" index="index" collection="list" open="(" 
             separator="," close=")">
        #{item}
    </foreach>  
</select>

choose 标签
按顺序判断 when 中的条件出否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when
的条件都不满则时,则执行 otherwise 中的 sql

<select id="getStudentListChoose" parameterType="Student" resultMap="BaseResultMap"> 
    SELECT * from STUDENT WHERE 1=1
    <where> 
        <choose> 
            <when test="Name!=null and student!='' "> 
                AND name LIKE CONCAT(CONCAT('%', #{student}),'%')
           </when> 
            <when test="hobby!= null and hobby!= '' "> 
                AND hobby = #{hobby}
            </when> 
            <otherwise> 
                AND AGE = 15
            </otherwise> 
        </choose> 
    </where> 
</select>

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!