一、解决思路

  让前端的下拉框支持单选、多选及全选,后台让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"'>
这里注意,外层用单引号,字符串用双引号包裹

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

  1. angular-ui-select 下拉框支持过滤单选多选解决方案(系列一)

    angular-ui-select  官方文档:github地址:https://github.com/angular-ui/ui-select 请大家多看文档     首先注意版本的问题,如果版本不 ...

  2. jquery 根据后台传过来的值动态设置下拉框、单选框选中

    更多内容推荐微信公众号,欢迎关注: jquery  根据后台传过来的值动态设置下拉框.单选框选中 $(function(){ var sex=$("#sex").val(); va ...

  3. jQuery 前端复选框 全选 反选 下拉菜单联动

    jQuery 页面中复选框全选.反选.下拉联动(级联) <!DOCTYPE html> <html lang="en"> <head> < ...

  4. vue实现功能 单选 取消单选 全选 取消全选

    vue实现功能 单选 取消单选 全选 取消全选 代码部分 <template> <div class=""> <h1>全选框</h1> ...

  5. jQuery对下拉框、单选框、多选框的处理

    下拉框: //得到下拉菜单的选中项的文本(注意中间有空格) var cc1 = $(".formc select[@name='country'] option[@selected]&quo ...

  6. MVC身份验证.MVC过滤器.MVC6关键字Task,Async.前端模拟表单验证,提交.自定义匿名集合.Edge导出到Excel.BootstrapTree树状菜单的全选和反选.bootstrap可搜索可多选可全选下拉框

    1.MVC身份验证. 有两种方式.一个是传统的所有控制器继承自定义Control,然后再里面用MVC的过滤器拦截.所以每次网站的后台被访问时.就会先走入拦截器.进行前端和后端的验证 一个是利用(MVC ...

  7. Android学习使用基本界面组件(下拉框,单选框,复选框,数字转轮,滚动条)

    (一)建立单选框按钮 RadioGroup和RadioButton建立单选框按钮 字符串资源文件: <resources> <string name="app_name&q ...

  8. MVC5 下拉框绑定(单选)

    1.Model [Display(Name = "学历")] public ICollection<System.Web.Mvc.SelectListItem> asd ...

  9. selenium自学笔记---ecshop购买脚本 xpath定位元素(下拉框,单选框)

    本机环境:xamppv3.2.1+ecshop3.0  1.元素定位写对,却一直报错,发现是页面元素加载的太慢,所以加上延时 from selenium import webdriverimport ...

随机推荐

  1. DeltaLake数据湖解决方案

    Delta Lake 是DataBricks公司推出的一种数据湖解决方案,Delta为该方案的核心组件.围绕数据流走向(数据入湖从流入数据湖.数据组织管理.数据查询到流出数据湖)推出了一系列功能特性, ...

  2. springboot静态资源路径制定

    spring.resources.static-location参数指定了Spring Boot-web项目中静态文件存放地址, 该参数默认设置为: classpath:/static, classp ...

  3. Asp.NetCore ResposeCache 缓存的使用

    先小结一下: 缓存策略: [ResponseCache(CacheProfileName ="default30")] 直接使用缓存,30秒过期: [ResponseCache(D ...

  4. 整理之Fragment

    基础 生命周期 执行层次 进 退 创建与销毁 onAttach -> onCreate -> onCreateView -> onActivityCreate onDestroyVi ...

  5. 面试必备:排序算法汇总(c++实现)

    排序算法主要考点: 7种排序 冒泡排序.选择排序.插入排序.shell排序.堆排序.快速排序.归并排序 以上排序算法是面试官经常会问到的算法,至于其他排序比如基数排序等等,这里不列举. 以下算法通过c ...

  6. Pulsar の 保证消息的顺序性、幂等性和可靠性

    原文链接:Pulsar の 保证消息的顺序性.幂等性和可靠性 一.背景 前面两篇文章,已经介绍了关于Pulsar消费者的详细使用和自研的Pulsar组件. 接下来,将简单分析如何保证消息的顺序性.幂等 ...

  7. vue JS获取当前时间并格式化 ( 前端小细节,大进步 )

    JS // 获取并且格式化时间     formatter (thistime, fmt) {       let $this = new Date(thistime)       let o = { ...

  8. (一)Superset 1.3图表篇——Table

    本系列文章基于Superset 1.3.0版本.1.3.0版本目前支持分布,趋势,地理等等类型共59张图表.本次1.3版本的更新图表有了一些新的变化,而之前也一直没有做过非常细致的图表教程. 而且目前 ...

  9. Java基础(四)——抽象类和接口

    一.抽象类 1.介绍 使用关键字 abstract 定义抽象类. abstract定义抽象方法,只有声明,不用实现. 包含抽象方法的类必须定义为抽象类. 抽象类中可以有普通方法,也可以有抽象方法. 抽 ...

  10. 详细解读go语言中的chnanel

    Channel 底层数据结构 type hchan struct { qcount uint // 当前队列中剩余元素个数 dataqsiz uint // 环形队列长度,即可以存放的元素个数 buf ...