配置文件完成动态条件查询

Posted yzx-sir

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配置文件完成动态条件查询相关的知识,希望对你有一定的参考价值。

问题:用户输入条件时,是否所有条件都会填写?

解决方案:**SQL语句会随着用户的输入或外部条件的变化而变化,我们称为动态SQL。

      **MyBatis对动态SQL有很强大的支撑

      *if

      *choose(when,otherwise)

      *trim(where)

      *foreach

步骤一:BrandMapper.xml文件中修改查询代码

 

<select id="selectByCondition" resultMap="brandResultMap">
        select  *
        from tb_brand
        where
            <if test="status != null">
                status = #status
            </if>

          <if test="companyName != null and companyName != \'\'">
              and company_name like #companyName
          </if>
          
          <if test="brandName != null and brandName != \'\'">
              and brand_name like #brandName
          </if>

 

Ps.    if语句,询问是否为空值,或者传入空格,如果传入了也可以进行查询,

*if: 条件判断
    *test:逻辑表达式

 

问题:如果出现status(第一个值)值的不匹配情况,也是空值,则会出现问题,第一个条件不需要逻辑运算符

解决方法:1.调整恒等式

在第一个关键字前也添加and,其中  1 = 1  存在是为了符合语法规则,没什么用

 select  *
        from tb_brand
        where 1 = 1
            <if test="status != null">
               and status = #status
            </if>

      2.<where> 替换 where关键字,不会出现语法错误

 select  *
        from tb_brand
        /*where 1 = 1*/
        <where>
            <if test="status != null">
               and status = #status
            </if>

          <if test="companyName != null and companyName != \'\'">
              and company_name like #companyName
          </if>
          
          <if test="brandName != null and brandName != \'\'">
              and brand_name like #brandName
          </if>
    </where>

  *****if:用于判断参数是否有值,使用test属性进行条件判断

    *存在的问题:第一个条件不需要逻辑运算符

    *解决方案:

        1.调整恒等式

        2.<where> 替换 where关键字,不会出现语法错误

  

 

以上是关于配置文件完成动态条件查询的主要内容,如果未能解决你的问题,请参考以下文章

Mybaits Mybatis动态 SQL

MyBatis案例 | 使用映射配置文件实现CRUD操作——动态SQL优化条件查询

3-使用MyBatis实现CRUD

MyBatis 如何配置动态的 sql 语句

产品说,我只需要一个有亿点复杂的查询界面

若依vue实现动态表格,可动态查询条件,控制列的显示隐藏及操作权限