Mybatis-动态SQL笔记,IF对查询结果进行判定

基于XML文档的映射

基于Mapper层使用注解的sql

@Select({"<scripe>",
			"……",
			"</script>"
})

if判断

<select 
        select * from user where 1 =1
        <if test="username != null">
            and username = #{username}
        </if>
        <if test="sex != null">
            and sex = #{sex}
        </if>
    </select>

< where >如果if语句过多的话,也可以利用标签来简洁代码

<select 
        select * from user 
        <where>
   			<if test="username != null">
           		and username = #{username}
            </if>
            <if test="sex != null">
                and sex = #{sex}
            </if>
    	</where>  
</select>

< foreach> 多个id同时查询

如果需要这么查询:SELECT * FROM USER WHERE id IN(41,42,45),多个id同时查询那么,可以利用来查询

<select 
        select * from user
        <where>
            <if test="ids != null and ids.size() > 0">
                <foreach collection="ids" open="and id in (" close=")" item="id"   
                    separator=",">
                    #{id}
                </foreach>
            </if>
        </where>
    </select>

其中中的属性:

  • collection:循环目标

  • open :sql语句拼接的开头

  • close:sql语句拼接的结尾

  • item:循环赋值对象

  • separator:分隔符

@Select({ "<script>",
            "SELECT id,name,sex,classes FROM students",
                "<where>",
                    "<if test=\"status!=null\">",
                        "<choose>",
                            "<when test=\"status==1\">AND conStatus=1</when>",
                            "<when test=\"status==2\">AND conStatus=0</when>",
                        "</choose>",
                    "</if>",
                    "<if test=\"sex!=null\">",
                        "<choose>",
                            "<when test=\"sex==1\">AND sex LIKE '男'</when>",
                            "<when test=\"sex==0\">AND sex LIKE '女'</when>",
                        "</choose>",
                    "</if>",
                    "<if test=\"type!=null and search!=null\">",
                        "<choose>",
                            "<when test=\"type==0\">AND academy</when>",
                            "<when test=\"type==1\">AND major</when>",
                            "<otherwise>AND classes</otherwise>",
                        "</choose>",
                        "LIKE #{search}",
                    "</if>",
                "</where>",
            "</script>"
    })
    List<Student> sqlStudent(Integer type, @Param("search")String key, Integer status, Integer sex);

实例

 //查询指定一级留言下的所有二级留言
    @Select({"<script>" +
            "SELECT a.*,IF(a.lwer_type=0,v.`head_img`,b.`head_img`) head_img,IF(a.lwer_type=0,v.`nickname`,b.`nickname`) reply_nickname " +
            " FROM (SELECT  lw.* FROM leave_word lw WHERE \n" +
            "(lw.`lw_first_id` = #{lwId} and lw.deleted=0) ) a  " +
            "LEFT JOIN visitor v ON a.lwer_id=v.`visitor_id` \n" +
            "LEFT JOIN blogger b ON a.lwer_id=b.`blogger_id` " +
            "ORDER BY a.creat_time desc" +
            "</script>"})
    List<QueryLeaveWordOneBO> getQueryTwoLeaveWord(QueryLeaveWordOneBO leaveOne);
/*
*先执行(SELECT  lw.* FROM leave_word lw WHERE \n" +
            "(lw.`lw_first_id` = #{lwId} and lw.deleted=0) ) a
  得到一个结果表,赋予别名为a,
  然后将表a和visitor和blogger分别做链接,并给别名v,b,
  查询时,便是以a、v、b为基础表进行查询
*/
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Mybatis-Plus动态SQL中的if语句是用于在SQL语句中根据条件动态拼接SQL语句的一种方式。通过if语句,我们可以根据不同的条件来拼接不同的SQL语句,从而实现更加灵活的SQL操作。在Mybatis-Plus中,if语句通常用于动态拼接where条件,以实现更加精确的查询。 ### 回答2: mybatis-plus是一款优秀的MyBatis增强工具,可以在MyBatis的基础上动态生成SQL语句,提高工作效率和代码质量。针对if条件的动态SQL语句生成,mybatis-plus也提供了非常方便的支持。 在mybatis-plus中,我们可以使用在<if>节点中编写动态SQL代码来根据某些条件决定是否包含这条SQL语句。这种方式非常灵活,可以处理各种复杂的条件组合。 例如,要在查询语句中根据不同条件进行查询,可以使用如下方式: ``` SELECT * FROM user WHERE 1 = 1 <if test="username != null"> AND username = #{username} </if> <if test="email != null"> AND email = #{email} </if> <if test="status != null"> AND status = #{status} </if> ``` 上面的代码中,我们在其中的三个<if>标签中编写条件,根据需要动态拼接查询语句。由于使用了mybatis-plus的动态SQL语句生成,可以在实际执行SQL语句之前生成最终的SQL语句,从而避免了构建动态SQL查询语句的麻烦,大大提高了开发效率。 除了<if>条件判断外,mybatis-plus还支持其他常用的动态SQL语句生成方式,包括: - <choose>选择语句 - <where>语句 - <set>更新语句 - <foreach>循环语句 总的来说,mybatis-plus对于动态SQL语句的生成提供了非常好的支持,可以使开发者更方便地完成各种复杂的查询和更新操作。 ### 回答3: MyBatis-Plus是一个基于MyBatis框架的增强工具,它为我们提供了很多便利的功能来简化我们在开发中的工作量。其中,动态SQLMyBatis-Plus的一大特性,可以帮助我们写出更加灵活的SQL语句。 在MyBatis-Plus中,我们可以使用if标签来实现动态SQL,if标签可以根据不同的条件来动态拼接SQL语句。if标签的语法如下: ``` <if test="条件表达式"> SQL语句 </if> ``` 其中,test属性是条件表达式,如果该表达式为true,则拼接SQL语句,否则不拼接。条件表达式可以使用OGNL表达式,例如: * 属性值判断:`test="name != null"` * 逻辑运算:`test="score > 60 and score < 80"` * 包含判断:`test="role in ('admin', 'user')"` * 方法调用:`test="StringUtils.isNotBlank(name)"` 在MyBatis-Plus中,if标签还支持嵌套使用,可以实现更加复杂的动态SQL拼接。 使用if标签的示例如下: ``` <select id="queryUserList" resultType="User"> select * from user <where> <if test="name != null"> and name like concat('%', #{name}, '%') </if> <if test="age != null"> and age = #{age} </if> </where> </select> ``` 该示例中,如果传入的参数中有name,则会拼接name的查询条件;如果传入的参数中有age,则会拼接age的查询条件。如果两个参数都有,则会拼接两个查询条件。 通过if标签的灵活运用,我们可以实现更加强大的动态SQL拼接,大大提高了我们的开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值