让前端的下拉框支持单选、多选及全选,后台MyBaits解决方案

一、解决思路

  让前端的下拉框支持单选、多选及全选,后台让Mybatis使用** trim **标签拼接动态SQL,实现

select * from order 
where startDate = sysdate
and (name="A" or name="B" or name="C")
-----------------------------------------------
--当用户全选时,舍弃掉最后的 and() 条件
select * from order 
where startDate = sysdate

二、请求参数

入参说明

// 单选
{
  "date":"2021-10-1",
  "name":["A"]
}

// 多选
{
  "date":"2021-10-1",
  "name":["A","B","C"]
}

// 全选
{
  "date":"2021-10-1",
  "nameList":["all"]
}

三、后台相关代码

  • 1、请求的入参对应的实体类
@Data
public SelectReq{
  private String date;
  private List<String> nameList;
}

* 2、Mybatis映射文件

<select id="selectByBeans" resultMap="BaseResultMap" parameterType="com.wg.demo.po.SelectReq">
  select
  *
  from employee 
  where date = to_date(#{date},'yyyy-mm-dd')
  <trim prefix="and (" suffix=")" suffixOverrides="and | or">
    <foreach collection="nameList"  item="item">
      <if test='name != "all"'>
        name=#{item} or
      </if>
    </foreach>
  </trim>
</select>

四、Mybatis注意要点

  • trim标签一般用于去除sql语句中多余的and关键字,逗号,或者给sql语句前拼接 “where“、“set“以及“values(“ 等前缀,或者添加“)“等后缀
prefix 给sql语句拼接的前缀
suffix 给sql语句拼接的后缀
prefixOverrides 去除sql语句前面的关键字或者字符,该关键字或者字符由prefixOverrides属性指定,假设该属性指定为"AND",当sql语句的开头为"AND",trim标签将会去除该"AND"
suffixOverrides 去除sql语句后面的关键字或者字符,该关键字或者字符由suffixOverrides属性指定
  • foreach表示循环操作,具体的参数含义如下:
foreach 元素的属性主要有 item,index,collection,open,separator,close。
item 表示集合中每一个元素进行迭代时的别名
index 指定一个名字,用于表示在迭代过程中,每次迭代到的位置
open 表示该语句以什么开始
separator 表示在每次进行迭代之间以什么符号作为分隔符
close 表示以什么结束
  • if 标签判断字符串
<if test = 'sex == "Y"'>
这里注意,外层用单引号,字符串用双引号包裹
作者:落花桂
         
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/nthforsth/p/15359159.html