多条件查询接收很多参数的时候要用Map接收。
好处是,以后修改查询条件的时候不用从接口,到实现类,到controller的参数都要修改,
假如加一个查询条件,只需要前端多传一个参数值,都用map<>键值对接收,只需要在
service实现类中,使用的时候多从get中取出一个值就好。
例如,接上一篇多条件查询组合查询的案例。
Controller改成:
/**
* <b>按条件查询路口信息。</b>
* <p><b>详细说明:</b></p>
* <!-- 在此添加详细说明 -->
* 无。
* @param crossingCode 路口编号
* @param crossingName 路口名
* @param crossingType 路口类型
* @param lightshape 灯型
* @param region 区域
* @param page 第几页
* @param pageSize 每页多少条
* @return
*/
/*@RequestMapping("/findAll")
public final @ResponseBody JsonResult<Object> findAll(@RequestParam("crossingCode") String crossingCode,
@RequestParam("crossingName") String crossingName, @RequestParam("crossingType") Integer crossingType,
@RequestParam("lightshape") Integer lightshape, @RequestParam("region") String region,
@RequestParam("page") int page,@RequestParam("pageSize") int pageSize) {
try { Pageable pageable = PageRequest.of(page - 1, pageSize, Sort.by(Direction.DESC, "id")); Page<Crossing> crossingList = getCrossingService().findAll(crossingCode, crossingName, crossingType, lightshape, region, pageable);
return JsonResult.toJsonResult(toPageSet(crossingList));
} catch (Exception e) {
return JsonResult.toJsonResult(e);
}
}*/ @RequestMapping("/findAll")
public final @ResponseBody JsonResult<Object> findAll(@RequestParam Map<String,Object> paramMap,
@RequestParam("page") int page,@RequestParam("pageSize") int pageSize) {
try { Pageable pageable = PageRequest.of(page - 1, pageSize, Sort.by(Direction.DESC, "id")); Page<Crossing> crossingList = getCrossingService().findAll(paramMap, pageable);
return JsonResult.toJsonResult(toPageSet(crossingList));
} catch (Exception e) {
return JsonResult.toJsonResult(e);
}
}
serviceimpl改成:
/**
* 按条件查询路口。
* @see com.tonsel.togt.service.CrossingService#findAll(java.lang.String, java.lang.String,
* java.lang.Integer, java.lang.Integer, java.lang.Integer, org.springframework.data.domain.Pageable)
*/
@Override
public Page<Crossing> findAll(Map<String,Object> paramMap,Pageable pageable) { Page<Crossing> pageList = getCrossingDao().findAll((root,query,cb)-> { List<Predicate> list = new ArrayList<Predicate>(); if(paramMap!=null) {
if(paramMap.get("crossingCode")!=null && !"".equals(paramMap.get("crossingCode"))) {//从Map取值判断是否为空
list.add(cb.like(root.get("code"), "%"+paramMap.get("crossingCode")+"%"));
}
if(paramMap.get("crossingName")!=null && !"".equals(paramMap.get("crossingName"))) {
list.add(cb.like(root.get("name"), "%"+paramMap.get("crossingName")+"%"));
}
if(Integer.parseInt((String) paramMap.get("crossingType"))!=-1) { //Integer类型
list.add(cb.equal(root.get("crossingTypeId"), Integer.parseInt((String) paramMap.get("crossingType"))));
}
if(Integer.parseInt((String) paramMap.get("lightshape"))!=-1) {
list.add(cb.equal(root.get("lightshapeId"), Integer.parseInt((String) paramMap.get("lightshape"))));
} Predicate[] array = new Predicate[list.size()];
Predicate Pre_And = cb.and(list.toArray(array)); List<Predicate> listOr = new ArrayList<Predicate>();
if(paramMap.get("region")!=null && !"".equals(paramMap.get("region"))) {
String arr[] = paramMap.get("region").toString().split(",");
for(int i=0;i<arr.length;i++) {
if(arr[i]!=null && arr[i]!="") {
listOr.add(cb.equal(root.get("regionId"), arr[i])); }
}
Predicate[] arrayOr = new Predicate[listOr.size()];
Predicate Pre_Or = cb.or(listOr.toArray(arrayOr));
return query.where(Pre_And,Pre_Or).getRestriction();
}else{
return null;
}
}else {
return null;
} }, pageable);return pageList;
}
service:
/**
* <b>按条件查询路口信息。</b>
* <p><b>详细说明:</b></p>
* <!-- 在此添加详细说明 -->
* 无。
* @param crossingCode 路口编号
* @param crossingName 路口名
* @param crossingType 路口类型
* @param lightshape 灯型
* @param region 区域
* @param pageable 分页条件
* @return
*/
//Page<Crossing> findAll(String crossingCode,String crossingName,Integer crossingType,Integer lightshape,String region,Pageable pageable);
Page<Crossing> findAll(Map<String,Object> paramMap,Pageable pageable); //改成这样
多条件查询接收很多参数的时候要用Map接收。的更多相关文章
- springMVC使用map接收入参 + mybatis使用map 传入查询参数
测试例子: controllel层 ,使用map接收请求参数,通过Debug可以看到,请求中的参数的值都是字符串形式,如果将这个接收参数的map直接传入service,mybatis接收参数时会报错, ...
- jqGrid jqGrid分页参数+条件查询
HTML <div class="row"> <div class="col-sm-20"> <form id="for ...
- FineReport: 参数为空选出全部值(按条件查询,空条件时直接过滤,不进行查询。。)
在Java报表软件FineReport中,选择特定的参数(如下图中的姓名.身份证号等)后,会返回我们要查询的数据,然而假如没有输入参数值,我们却仍需要返回数据时该怎样处理呢?应该过滤掉这个条件,不按这 ...
- 通过带参数的Sql语句来实现模糊查询(多条件查询)
#region 通过带参数的Sql语句来实现模糊查询(多条件查询) StringBuilder sb = new StringBuilder("select * from books&quo ...
- javascript:设置URL参数的方法,适合多条件查询
适用场景:多条件查询情况,如下图所示: 通过设置URL参数,再结合数据源控件设置的RUL参数,就能进行简单的多条件查询了. javascript函数: <mce:script type=&quo ...
- mybatis按datetime条件查询,参数为时间戳时
mybatis按datetime条件查询,参数为时间戳时,如果数据库为2018-1-1 20:22:10, 你的时间戳也为2018-1-1 20:22:10,但却没找到数据.可能是时差导致的.百度修正 ...
- angularJS 条件查询 品优购条件查询品牌(条件查询和列表展示公用方法解决思路 及 post请求混合参数提交方式)
Brand.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...
- 项目:条件查询 通过StringBulider和ArrayList(参数有序) 手动拼接sql
条件查询的sql拼接 参数拼接 public List<Product> findAll(Product product) throws SQLException { //1.1 拼凑sq ...
- MyBatis参数条件查询传入的值为0时的判断
MyBatis条件查询对字段判断是否为空一般为: <if test="testValue!=null and testValue != ''"> and test_va ...
随机推荐
- 阿里云CentOS7 64位安装jdk8和mysql5.6.43及远程连接mysql
安装mysql 先查看系统是否安装有mysql rpm -qa | grep mysql 返回空值说明没有,有的话先删除 yum remove mysql 下载mysql的repo源 wget htt ...
- Shiro官方快速入门10min例子源码解析框架3-Authentication(身份认证)
在作完预备的初始化和session测试后,到了作为一个权鉴别框架的核心功能部分,确认你是谁--身份认证(Authentication). 通过提交给shiro身份信息来验证是否与储存的安全信息数据是否 ...
- JSON 解析的可抛弃
先看例子, json文件中有些元素不是我们想要的,在反序列化时可以当它们不存在,下面例子抛弃了 aaa.ccc这两节. package main import ( "encoding ...
- 浏览器同源策略与ajax跨域方法汇总
原文 什么是同源策略 如果你进行过前端开发,肯定或多或少会听说过.接触过所谓的同源策略.那么什么是同源策略呢? 要了解同源策略,首先得理解“源”.在这个语境下,源(origin)其实就是指的URL.所 ...
- UI设计师必备
网站大全 国外的花瓣--Pinterest • The world’s catalog of ideas 字体海洋--求字体网提供中文和英文字体库下载.识别与预览服务,找字体的好帮手原创设计UI--站 ...
- cf1060E. Sergey and Subway(树形dp)
题意 题目链接 Sol 很套路的题 直接考虑每个边的贡献,最后再把奇数点的贡献算上 #include<bits/stdc++.h> #define Pair pair<int, in ...
- Tomcat学习总结(一):目录简介
一:下载地址和目录结构说明. Tomcat官方站点:http://jakarta.apache.org 下载Tomcat安装程序包:http://tomcat.apache.org/
- IoT Gateway Based on OSGi
1. OSGi Knowleage 2. OSGi.Net on Windows 3. OSGi with JAVA 4. OSGi with Qt and C++ 5. Architecture o ...
- win7 远程连接服务器出现身份验证错误,且找不到加密Oracle修正
用远程桌面连接登录服务器,结果,弹出一个错误的提示框:发生身份验证错误,要求的函数不受支持. 然后在网上找了相关的教程,基本上所有的方法都是如下所示: 策略路径:"计算机配置"-& ...
- 算法之求质数(Java语言)
质数(Prime number) 又称素数,指在的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数的数). 算法原理 验证一个数字 n 是否为素数的一种简单但 ...