多条件查询接收很多参数的时候要用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 ...
随机推荐
- IDEA 搭建 springmvc maven 项目
前言:将搭建 java springmvc maven 项目的过程及问题记录下来,以及配置文件.这次没有涉及到数据库,后续再写. 目录: 一.首先在 IDEA 中创建 springmvc maven ...
- PowerDesigner16导出SQL时如何添加注释
添加注释方法 https://jingyan.baidu.com/article/47a29f24652e44c0142399c3.html 重点是修改value的值 alter table [%QU ...
- Redis教程基本命令
Redis是什么? Redis(REmote DIctionary Server)是一个key-value存储系统,能够高速存储数据,value值可以为字符串.哈希表.列表.集合.有序集合,位图,hy ...
- input textarea监听鼠标粘贴
发现一个问题,在input/textarea中如果是鼠标粘贴内容进去,发现判断不了value的改变,html代码如下: <!doctype html> <html> <h ...
- ionCube 安装
有些程序在php环境下运行需要安装ionCube Loader的扩展支持,得到如下提示 Site error: the ionCube PHP Loader needs to be installed ...
- PHP 如何向关联数组指定的 Key 之前插入元素
PHP 关联数组可以通过三种方式插入新元素: $array[$insert_key] = $insert_value; $array = array_merge($array, $insert_arr ...
- 为什么排版引擎解析 CSS 选择器时一定要从右往左解析?
首先我们要看一下选择器的「解析」是在何时进行的. 主要参考这篇「 How browsers work」(http://taligarsiel.com/Projects/howbrowserswork1 ...
- Spring Data MongoDB 模糊查询
Pattern pattern = Pattern.compile("^.*" + value + ".*$"); Query query = new Quer ...
- 初识WCF3
http://www.cnblogs.com/xiangchangdong/p/3924030.html 第三篇 在IIS中寄宿服务 通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包 ...
- .net core系列之《对AOP思想的理解及使用AspectCore实现自定义日志拦截》
对于AOP这个名词,相信对于搞过MVC开发的人来说,都很熟悉,里面各种各样的Filter简直是将AOP体现到了极致. 那么什么是AOP呢? AOP(Aspect Oriented Programmin ...