技术标签: spring ExampleMatcher jpa SSM 分页查询
之前写过一篇博客
Spring Data JPA 使用JpaSpecificationExecutor实现多条件查询(分页查询和非分页查询)
然后发现还有其他两种写法,会更简便一些。
1、使用JPA自带的findByXxx接口
这种方法其实还比较方便,除了如果字段多的话findByXxx这个方法的名字会很长很长很长…
Containing的用法与like一致.
示例:
顺便说明一下default方法:
在java8以后,接口中可以添加使用default或者static修饰的方法,在这里我们只讨论default方法,default修饰方法只能在接口中使用,在接口中被default标记的方法为普通方法,可以直接写方法体。
实现类会继承接口中的default方法。
@Repository
public interface UserRepository extends JpaRepository<UserDO,Long> {
Page<UserDO> findByUsernameContainingAndUserPasswordContaining(String username, String password, Pageable pageable);
default Page<UserDO> searchUserByCondition(String username, String password, Pageable pageable){
if(username == null){
username = "";
}
if(password == null){
password = "";
}
return findByUsernameContainingAndUserPasswordContaining(username, password, pageable);
}
}
写个类测试一下:
注意要加上注解@RunWith(SpringRunner.class),有了这个注解@Autowired注入的类才能实例化到spring容器中,自动注入才能生效,如果不加这一行会报错NullPointerExecption.
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserTest {
@Autowired
private UserRepository userRepository;
@Test
public void Test1(){
UserDO userDO = new UserDO();
userDO.setUsername("yogi");
userDO.setUserPassword("123456");
userRepository.saveAndFlush(userDO);
List<UserDO> userDOList = userRepository.searchUserByCondition("yog",null, PageRequest.of(0,10)).getContent();
System.out.println(userDOList.size());
}
}
2、使用ExampleMatcher
@Repository
public interface UserRepository extends JpaRepository<UserDO,Long> {
default Page<UserDO> searchUserByCondition2(UserDO userDO, Pageable pageable){
if (StringUtils.isEmpty(userDO.getUserPassword())) {
// 对于数据库中允许为空的字段,需要设置null值,否则传入双引号会被判断成有值
userDO.setUserPassword(null);
}
ExampleMatcher matcher = ExampleMatcher.matching()
.withIgnoreNullValues()
.withIgnoreCase(false)
.withMatcher("username", ExampleMatcher.GenericPropertyMatchers.contains())
.withMatcher("userPassword", ExampleMatcher.GenericPropertyMatchers.contains())
.withIgnorePaths("userId", "userPhone");//忽略属性
Example<UserDO> userDOExample = Example.of(userDO, matcher);
return this.findAll(userDOExample,pageable);
}
}
方法如下:
方法 | 含义 |
---|---|
caseSensitive() | 大小写敏感 |
ignoreCase() | 忽略大小写 |
contains() | 模糊匹配,%{str}% |
startsWith() | 匹配起始字符串,{str}% |
endsWith() | 匹配结尾字符串,%{str} |
exact() | 精确匹配字符串 |
reges() | 将字符串作为正则表达式进行匹配 |
注意一下当使用完全匹配.exact()时,参数为String类型时,传参时如果传""
(空字符串),并不是不进行筛选,而是会筛选""
,结果极有可能查询结果为空。
要解决这个问题,也可以在之前对需要完全匹配的属性做出如下设置:
if (StringUtils.isEmpty(userDO.getXxx())) {
userDO.setXxx(null);
}
此时该属性需要完全匹配,并当传入""时会不进行筛选,而是查出全部。
题目链接:AcWing题目描述:给定一张 n 个点的带权无向图,点从 0~n-1 标号,每个点经过一次,求从0到n-1的最短路径题解:数据范围比较小,所以暴力也能做,但正解是贼难的位运算 Q_Q算法的核心是用一个二进制数表示一种方案对于这个数的第i位:0表示没走过,1表示走过这里的f[i][j]表示:在当前方案i中,走到了j那么状态转移方程就是f[i][j]=min(f[i][...
当表单 新增和修改 共用一个页面时const [form] = Form.useForm();const data = props.location.queryuseEffect(() => { form.setFieldsValue({...data}); }, []);_proformswitch
小程序是一种不用下载就能使用的应用,也是一项门槛非常高的创新,经过将近两年的发展,已经构造了新的小程序开发环境和开发者生态。小程序越来越火爆,那么小程序的优势在哪里?欢迎找我开发小程序啊,本人经验丰富,技术牛鼻,开发过多款微信小程序,我的微信是 A1354164181,加我著名csdn有折扣哦。小程序优点:1、方便快捷,即用即走。不需要再下载什么APP啦,既费流量,又占空间内存。小程序就是方便,即用即走。2、速度快、不占内存因为小程序前端代码都是存在微信服务器上的,在腾讯云端存放呢,所以无需加载_关于国内开发的三个旅行小程序的实例好处及缺点
目录1、Vue 完整版写法(一)2、Vue 完整版写法(二)3、Vue 非完整版 + .vue 文件1、Vue 完整版写法(一)由于 Vue 完整版的组成是由 运行时版 + 编译器,编译器可以解析 HTML 代码,所以支持将 HTML 写在 .html 文件中。<div id="app"> {{n}} <button @click="ad..._vue option-template
这里使用了ogreCore的LoadingOverlay获得Overlay:Overlay* pOverlay = OverlayManager::getSingleton().getByName("Core/LoadOverlay"); 显示Overlay:pOverlay->show(); 隐藏Overlay:pOverlay->hide(); 获得Ove_小明永久
数据库是怎么工作的?当你打开这篇文章的时候你一定也好奇:SQL语句为什么能对数据库操作事务回滚是怎么滚的?数据是怎么被保存到硬盘里的?…接下来我们将一步步搭建一个框架并逐渐完善,并尝试着把这些问题讲明白。我选择基于 SQLite ,因为 SQLite 体积小又功能齐全,整个数据库就存储在一个文件中。我认为可以以此为起点以小见大,启发大家对数据库有更多的思考。一个 SQL 语句需要经过一连串的过程才能检索或修改数据。前端包括:tokenizer 词法解析器parser 语法解析_sql编译器
1、按前述教程快速新建一个新工程,在工程文件中app文件夹下新建key子文件夹用于存放key.c/key.h文件(记得添加进头文件路径),在user/main.c编写主函数。4、main.c代码。
为了诊断mysql段错误(segment fault),也被称为崩溃(crash),需要在段错误发生时生成core文件(core dump)。默认情况下,mysql core文件是不会生成的,需要提前做好一些配置工作。mysql的core dump正确打开方式如下:1、打开linux的core文件大小限制,即ulimit -c。ulimit -c unlimited如果希望core limit永久生效,需要修改 /etc/security/limits.conf 文件,并且重新._.suid_dumpable=2
拼多多商家们如果想要做好店铺的管理工作,那肯定也需要熟练拼多多管理后台,如果发现自己的后台登录不上去的情形,大家知道这是怎么回事吗?它又有哪些功能呢?1、遇到拼多多管理后台打不开的情况,可以先重启路由器试试,如还是打不开应该是网站服务器的问题,电话客服查询吧!!2、建议可以重装一下电脑系统试试看,有可能是电脑系统不支持;3.更换网页浏览器试试看,因为有些网页浏览器是不支持拼多多管理后台登陆的。4...._电脑端微信,拼多多都登不了
vim编辑器总结目录一 vi/vim 使用vi/vim 工作模式vim 的三种工作模式 普通模式 编辑模式 末行模式1.1 打开文件命令功能vim +n filename打开文件,并将光标置于第N行的行首vim + filename打开文件,并将光标置于最后一行行首vim +/pattem filename打开文件,并将光标置于第一个与patten匹配的行vim –r filename上次使用vi...
从07年参加全国大学生电子设计大赛初次接触单片机开发至今已经有4年了,初学单片机时,都会纠结于其各个模块功能的应用,如串口(232,485)对各种功能IC的控制,电机控制PWM,中断应用,定时器应用,人机界面应用,CAN总线等. 这是一个学习过程中必需的阶段,是基本功。很庆幸,在参加电子设计大赛赛前培训时,MCU周围的控制都训练的很扎实。经过这个阶段后,后来接触不同的MCU就..._裸奔 框架