好处是,以后修改查询条件的时候不用从接口,到实现类,到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. 11、Map、可变参数、Collections

    Map接口 Map集合概述 *A:Map集合概述: 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同 a:Collection中的集合,元素 ...

  2. C++输入输出流--<iostream>详解

    C++输入输出流包含在头文件<iostream>中, 流的定义如下:通过设备驱动程序与键盘.屏幕.文件.打印机等进行交互, iostream 类提供与之交互的方法.输出流:输出流的对象是字 ...

  3. C#语言数据类型

    整数类型 sbyte   -128~127之间 byte   0~255 short(Int16) -32768~32768 ushort(UInt16)  0~65535 Int (Int32)   ...

  4. 03.CSS选择器-->交集并集选择器

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Oracle 计算两个日期间隔的天数、月数和年数

    在Oracle中计算两个日期间隔的天数.月数和年数: 一.天数: 在Oracle中,两个日期直接相减,便可以得到天数: select to_date('08/06/2015','mm/dd/yyyy' ...

  6. Python爬虫教程-06-爬虫实现百度翻译(requests)

    使用python爬虫实现百度翻译(requests) python爬虫 上一篇介绍了怎么使用浏览器的[开发者工具]获取请求的[地址.状态.参数]以及使用python爬虫实现百度翻译功能[urllib] ...

  7. Software Testing Techniques LAB 02: Selenium

    1. Installing 1. Install firefox 38.5.1 2. Install SeleniumIDE    After installing, I set the view o ...

  8. Linux案例01:eth0网卡异常

    一.现象描述 今天在调试两台物理机,做完配置重启主机后,发现一台服务器网络无法ssh连接,通过ILO进去ifconfig发现eth0配置的IP地址等信息丢失,手动重启后,可以ssh连接,但过一段时间, ...

  9. Git在eclipse中的配置

    1:git在eclipse中的配置 windows - >preferences->team->git->configuration 点击add Entry key值:输入 u ...

  10. console 程序随系统启动及隐藏当前程序窗口

    应业务需求,程序需要与系统启动而自动运行,故加入以下代码,保存成 .bat文件 ,双击执行即可 reg add "HKEY_CURRENT_USER\Software\Microsoft\W ...