好处是,以后修改查询条件的时候不用从接口,到实现类,到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接收。的更多相关文章

  1. springMVC使用map接收入参 + mybatis使用map 传入查询参数

    测试例子: controllel层 ,使用map接收请求参数,通过Debug可以看到,请求中的参数的值都是字符串形式,如果将这个接收参数的map直接传入service,mybatis接收参数时会报错, ...

  2. jqGrid jqGrid分页参数+条件查询

    HTML <div class="row"> <div class="col-sm-20"> <form id="for ...

  3. FineReport: 参数为空选出全部值(按条件查询,空条件时直接过滤,不进行查询。。)

    在Java报表软件FineReport中,选择特定的参数(如下图中的姓名.身份证号等)后,会返回我们要查询的数据,然而假如没有输入参数值,我们却仍需要返回数据时该怎样处理呢?应该过滤掉这个条件,不按这 ...

  4. 通过带参数的Sql语句来实现模糊查询(多条件查询)

    #region 通过带参数的Sql语句来实现模糊查询(多条件查询) StringBuilder sb = new StringBuilder("select * from books&quo ...

  5. javascript:设置URL参数的方法,适合多条件查询

    适用场景:多条件查询情况,如下图所示: 通过设置URL参数,再结合数据源控件设置的RUL参数,就能进行简单的多条件查询了. javascript函数: <mce:script type=&quo ...

  6. mybatis按datetime条件查询,参数为时间戳时

    mybatis按datetime条件查询,参数为时间戳时,如果数据库为2018-1-1 20:22:10, 你的时间戳也为2018-1-1 20:22:10,但却没找到数据.可能是时差导致的.百度修正 ...

  7. angularJS 条件查询 品优购条件查询品牌(条件查询和列表展示公用方法解决思路 及 post请求混合参数提交方式)

    Brand.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...

  8. 项目:条件查询 通过StringBulider和ArrayList(参数有序) 手动拼接sql

    条件查询的sql拼接 参数拼接 public List<Product> findAll(Product product) throws SQLException { //1.1 拼凑sq ...

  9. MyBatis参数条件查询传入的值为0时的判断

    MyBatis条件查询对字段判断是否为空一般为: <if test="testValue!=null and testValue != ''"> and test_va ...

随机推荐

  1. 一键安装lamp环境出现的问题

    前言:之前安装lamp是独立安装的,安装扩展很方便,现在用这个一键安装包,不知道怎么样,尝试一把. Part1:安装过程中出现的问题 error: utf8_mime2text() has new s ...

  2. 撩课-Web大前端每天5道面试题-Day5

    1.写一个深度克隆方法(es5)? /** * 深拷贝 * @param {object}fromObj 拷贝的对象 * @param {object}toObj 目标对象 */ function d ...

  3. Java新人拿到一台新的电脑需要装配什么

    适用对象:新手 装备:win10 一.IDEA 插件等 说明 其他 TranslationPlugin 翻译插件 GitHub地址 MyBatis-Generator 自动生成Mybatis文件 Al ...

  4. 关于VUE中 import 、 export 和 export default 的注意问题

    1.import引入一个依赖包,不需要相对路径.import 引入一个自己写的js文件,是需要相对路径的. 示例:import axios from ‘axios’; import AppServic ...

  5. 洛谷 P2469 [SDOI2010]星际竞速 解题报告

    题目描述 10年一度的银河系赛车大赛又要开始了.作为全银河最盛大的活动之一,夺得这个项目的冠军无疑是很多人的梦想,来自杰森座α星的悠悠也是其中之一. 赛车大赛的赛场由N颗行星和M条双向星际航路构成,其 ...

  6. JS算法之A*(A星)寻路算法

    今天写一个连连看的游戏的时候,接触到了一些寻路算法,我就大概讲讲其中的A*算法. 这个是我学习后的一点个人理解,有错误欢迎各位看官指正. 寻路模式主要有三种:广度游戏搜索.深度优先搜索和启发式搜索. ...

  7. Linux菜鸟简单命令

    想要使用Linux,以下这些命令不可少的哦! 我在工作中经常用到的大多数都是一些文件的查找,和上传下载什么的,没什么技术含量,所以除了自己整理的之外,还有借鉴的别的大神的一些命令,我会在最后标注的\( ...

  8. JS上传图片转化成Base64编码demo

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. C# 将html文本转化为 文本内容方法TextNoHTML

    不记得在哪看过这个,挺实用的 /// <summary> /// 将html文本转化为 文本内容方法TextNoHTML /// </summary> /// <para ...

  10. 修改zabbix为中文,并解决乱码问题(三)

    当Zabbix安装完成后,默认则是英文界面,有的人看英文不习惯,现在将其改为中文界面 一.修改为中文 1.打开Zabbix界面,Administrator-Users 选择语言-Chinese(zh_ ...