使用动态sql时,if标签不起作用

目录

场景:

问题分析:

问题解决:


场景:

简单讲一下应用场景

我拿到一个项目,完成后端数据处理,在进行可选条件查询时,使用动态sql

 在mapper.xml中我先是这么写的

<select id="list" resultType="com.yizhi.student.domain.StudentInfoDO">
        select * from s_student_info
       <where>

           <if test="name!=null">
               student_name like concat('%',#{name},'%')
           </if>
           <if test="tocollegeId!=null">
               and tocollege=#{tocollegeId}
           </if>


           <if test="tomajorId!=null">
               and tomajor=#{tomajorId}
           </if>
           <if test="classId!=null">
               and class_id=#{classId}
           </if>
       </where>
       limit #{currPage},#{pageSize}
    </select>

 然后,就出现if标签失效的情况,关键是它有时候也会返回到前端数据,给我都搞蒙了

反复查看,加上网搜索类似案例

大致知道是什么原因

问题分析:

在前端向后端传递数据时,不一定传递的是null,也会是空字符串。

果然,在加上判断后可以执行if

问题解决:

<select id="list" resultType="com.yizhi.student.domain.StudentInfoDO">
        select * from s_student_info
       <where>

           <if test="name!=null and name!=''">
               student_name like concat('%',#{name},'%')
           </if>
           <if test="tocollegeId!=null and tocollegeId!=''">
               and tocollege=#{tocollegeId}
           </if>


           <if test="tomajorId!=null and tomajorId!=''">
               and tomajor=#{tomajorId}
           </if>
           <if test="classId!=null and classId!=''">
               and class_id=#{classId}
           </if>
       </where>
       limit #{currPage},#{pageSize}
    </select>