Spring如何使用4行代码优雅的实现模糊查询,精确查询,分页查询功能。

最近开始使用Spring开发新项目了,开发新项目必定少不了折腾增删查改。 其中模糊查询,精确查询,分页查询也算是不好对付的功能,需要手写大量重复的代码来实现相关的功能,如何优雅的实现查询功能呢?

首先上两张截图。


第一张截图是分页列出活动,可以根据活动名称和活动内容进行模糊查询。 举办机构,举办年份,活动分类为可选项。如指定了年份就会检索相应年份的数据。

第二张截图是列出分类。 可以根据分类名称进行模糊查询。

可以发现,两个listData 方法均只有4行代码。

第一行指定模糊查询的列名s,第二行获取一个 Specification 对象,并且传递需精确匹配的参数。 第三行查询。第四行return 。

以下是获取Specification对象的实现 。 这里使用了静态泛型方法,关键在于熟练的使用 CriteriaBuilder 来构建or and like eq 等操作符号。

最终的实现效果如下:

这里需要根据fid 隔离不同用户的数据,所以每条sql查询都带有一个fid=? 条件查询,当然这个条件是通过 addCommon 方法来实现的。 如果有其他共同的查询条件,在此方法中实现即可。

PageRequestUtil 类的实现,简单的实现了参数的校验。 比如页码不能为负数,每页最多100条数据。 如果 numPerPage大于100,很有可能就是有人在采集你网站的数据了,虽然这种限制也根本阻止不了别人的采集行为。但至少可以使得程序更加安全一点,不会一次性查询大量数据导致mysql崩溃。

如何应对新的业务, 如果只有根据某些字段进行模糊查询, 只需写4行代码足以实现分页功能。

如何应对业务的变更, 今天产品说根据活动名称检索足以,但第二天又说需要跟据活动内容进行检索,或者新增检索字段。 那么还是只需要修改第一行代码即可。

原文地址:https://blog.51cto.com/13981400/2381529

时间: 2024-08-28 01:28:11

Spring如何使用4行代码优雅的实现模糊查询,精确查询,分页查询功能。的相关文章

Spring Boot 中 10 行代码构建 RESTful 风格应用

RESTful ,到现在相信已经没人不知道这个东西了吧!关于 RESTful 的概念,我这里就不做过多介绍了,传统的 Struts 对 RESTful 支持不够友好 ,但是 SpringMVC 对于 RESTful 提供了很好的支持,常见的相关注解有: @RestController @GetMapping @PutMapping @PostMapping @DeleteMapping @ResponseBody ... 这些注解都是和 RESTful 相关的,在移动互联网中,RESTful 得

几行代码搞定图片模糊模式

- (void)viewDidLoad { [super viewDidLoad]; // 做图片 UIImageView *myImgView = [[UIImageView alloc]initWithFrame:[UIScreen mainScreen].bounds]; myImgView.image = [UIImage imageNamed:@"A2D368D0CE416A120C9A4411C1B721CA.png"]; [self.view addSubview:myI

开源一个Mac漂亮的小工具 PPRows for Mac, 在Mac上优雅的计算你写了多少行代码

开源一个Mac漂亮的小工具 PPRows for Mac, 在Mac上优雅的计算你写了多少行代码. 开源地址: https://github.com/jkpang/PPRows

【翻】Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏

译者地址:[翻]Android Design Support Library 的 代码实验--几行代码,让你的 APP 变得花俏 原文:Codelab for Android Design Support Library used in I/O Rewind Bangkok session--Make your app fancy with few lines of code 原文项目 demo: Lab-Android-DesignLibrary 双语对照地址: [翻-双语]Android D

为什么说 2017 年你必须要学习 Go 了(多核,网络,多人协作,简单非OO,没有注解,Native,垃圾收集,代码优雅),附两个评论

为什么要学习Go Go是未来的服务端语言—?Tobias Lütke, Shopify.在过去的几年中,Golang逐步流行起来. 还有什么能比一门新语言让码农们疯狂呢? 因此,我开始学习了一段时间Golang,在这里我将告诉你为什么你也应该学习这种新语言. 在本文里我不会告诉你怎么写hello world. 我要分析计算机硬件软件的当前阶段,以解释为什么我们需要像Go这样的新语言? 硬件限制 摩尔定律正在失效 第一个具有3.0GHz时钟速度的Pentium 4处理器是由英特尔于2004年推出的

1行代码为每个Controller自定义“TabBar”-b

这篇文章大致会带你实现以下的功能,废话少说,先看东西: JPNavigationController.gif Q&A:Demo里都有那些东西? 01.关于自定义导航栏 01.第一个控制器的导航条是透明的,第二个控制器的导航条是白色的,第三个控制器的导航条是橙色的.所以,为每个控制器定制自己的导航条. 02.支持全屏右滑,这简直是必须的.关于全屏右滑,最详细,也最早探究这个问题的,我了解到的是 J_雨,他应该是全屏右滑的鼻祖. 03.最重要的一点,要求全屏右滑返回的时候,导航条跟随自己的控制器流畅

Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏

译者地址:[翻]Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏 原文:Codelab for Android Design Support Library used in I/O Rewind Bangkok session----Make your app fancy with few lines of code 原文项目 demo: Lab-Android-DesignLibrary 双语对照地址: [翻-双语]Android

【转】【翻】Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏

转自:http://mrfufufu.github.io/android/2015/07/01/Codelab_Android_Design_Support_Library.html [翻]Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏 Jul 1, 2015 译者地址:[翻]Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏 原文:Codelab for Androi

50行代码实现Java方法代理

工作中经常需要对现有程序进行一些扩展,而不想修改现有代码.可以使用代理方法,常使用的代理技术有JDK的java.lang.reflect.Proxy.spring的代理等. 例如对方法加事务,就常用org.springframework.transaction.interceptor.TransactionInterceptor.他就是在现有方法前面开启事务,后面关闭事务. 本文以spring+aspectj做一个简单的例子: 1.使用maven依赖的文件如下:         <depende