SpringDataJpa+MongoDB进行分页查询和模糊查询

本文介绍了使用 Spring Data JPA 实现多种条件下的分页查询方法,包括无条件、精确条件及模糊条件查询,并展示了如何利用 Pageable 和 Example 对象进行灵活配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:https://blog.csdn.net/weixin_43935907/article/details/91354738
的’方式二:通过原生的方法实现条件查询、分页和排序’

利用org.springframework.data.domain包的Pageable类实现.
查询方式一:无条件分页查询

	public List<MatchsInfo> findPage(int currentPage,int pageSize) {


		Pageable pageableObj = PageRequest.of(currentPage,pageSize );

		Page<MatchsInfo> all = matchsInfoRepositoryObj.findAll(pageableObj);
		System.out.println(all);
//通过增强for遍历
		for (MatchsInfo matchsInfo : all) {
			System.out.println(matchsInfo);
		}

		return null;
	}

查询方式二:有条件精确分页查询

	public List<MatchsInfo> findPage(int currentPage,int pageSize) {

		//通过实体类来定义查询条件
		MatchsInfo matchsInfoObj = new MatchsInfo();
		matchsInfoObj.setfIndex("5");//条件一:findex字段的数据为5的
		matchsInfoObj.setfScale("2");//条件二:fScale字段的数据为2的
		
		//将实体类对象传入Example对象中
		Example<MatchsInfo> exampleObj = Example.of(matchsInfoObj);
		Pageable pageableObj = PageRequest.of(currentPage,pageSize);

	//传入Example对象和Pageable对象
		Page<MatchsInfo> all = matchsInfoRepositoryObj.findAll(exampleObj, pageableObj);
		System.out.println(all);
//通过增强for遍历
		for (MatchsInfo matchsInfo : all) {
			System.out.println(matchsInfo);
		}

		return null;
	}

查询方式三:where id = ? and name = ?,有条件并且式多字段模糊分页查询
参考:https://blog.csdn.net/u010721764/article/details/90444094?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

		int currentPage = 0;
		int pageSize = 10;
		//通过实体类来定义查询条件
		MatchsInfo matchsInfoObj = new MatchsInfo();
		matchsInfoObj.setMatchName("日");
		
		//将实体类对象传入Example对象中
		Example<MatchsInfo> exampleObj = Example.of(matchsInfoObj, ExampleMatcher.matching().withStringMatcher(StringMatcher.CONTAINING));//CONTAINING就是模糊匹配的意思
		Pageable pageableObj = PageRequest.of(currentPage,pageSize);

	//传入Example对象和Pageable对象
		Page<MatchsInfo> all = matchsInfoRepositoryObj.findAll(exampleObj, pageableObj);
		System.out.println(all);
//通过增强for遍历
		for (MatchsInfo matchsInfo : all) {
			System.out.println(matchsInfo);
		}

查询方式四:where id = ? or name = ?,有条件或者式多字段模糊分页查询
参考:https://blog.csdn.net/weixin_30922589/article/details/96017599
https://blog.csdn.net/qq_28241535/article/details/103365854
https://blog.csdn.net/tjbsl/article/details/80620303
该方法与上面查询方法三还有不同,上面查询方法三的话,虽然可以通过实体类进行多条件分页查询,但是这是属于将拼接性质定义为’and’的情况下. 就相当于mysql的"where id = ? and name = ?"一样.
而此处我想举例的,则是类似于mysql的"where id = ? or name = ?"一样.是或者式的查询.
这项查询方式较为繁琐,但俗话说越繁琐则意味着功能越强.
这项查询方式不仅需要用到Pageable实现分页
需要用到Query对象进行条件确认,
需要用到Criteria对象进行查询条件拼接,
需要用到MongoJpa的模板注入对象’MongoTemplate’,进行最终查询.

@Controller
public class WebTest {
	@Autowired
	private MongoTemplate mongoTemplateObj;
	@RequestMapping("/emp")
	public void findInemp() {
		int currentPage = 0;
		int pageSize = 10;
		Pageable pageableObj = PageRequest.of(currentPage,pageSize); //先创建Pageble分页对象,定义当前页和显示数量

		Query queryObj = new Query();//创建Query对象
		Criteria criteriaObj = new Criteria();//创建Criteria查询语句拼接对象
		criteriaObj.orOperator(
				Criteria.where("homeName").regex("船"),//或者条件一 homeName字段中的数值包含'船'这个字. 此处的regex是正则表达式,'模糊查询'就是依靠这个来实现的.如果不为'regex()'方法而为'is()'方法,则为精准查询.
				Criteria.where("guestName").regex("船")//或者条件二 guestName字段中包含'船这个字;
				);

		
		queryObj.addCriteria(criteriaObj);//通过Query对象的addCriteria方法将Criteria查询语句拼接对象作为参数添加到里头.
		 long count = mongoTemplateObj.count(queryObj, MatchsInfo.class);//取总记录数时。注意,要在find方法执行前面才能获取到正确的记录数量。否则获取到的是分页之后的当页记录数量。
		List<MatchsInfo> find = mongoTemplateObj.find(queryObj.with(pageableObj), MatchsInfo.class);//Query对象通过with方法将Pageble分页对象作为分页参数添加,然后通过MongoTemplate注入对象的find方法将其和实体类作为参数传入进行多条件分页模糊查询.
		
		System.out.println(find.size());
		 for (int i = 0; i < find.size(); i++) {
			 System.out.println(find.get(i));
			}
		
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值