7.21_SpringDataJPA下的mongo和mysql的模糊查询

一直以为他俩是一样的,唯一的区别就是
mongo的repository继承的是MongoRepository
mysql的repository 继承的是JpaRepository
今天偶然间发现在模糊查询方面,也有着细微的差别
先说结论
mysql的需要手动加 %
mongo的不需要

首先是mongo的

public interface Mongodb_Domain_testRepository extends MongoRepository<Mongodb_Domain_test,String> {
    public Page<Mongodb_Domain_test> findAllByNameLike(Pageable pageable,String name);
}

然后是mysql的

public interface Mysql_Entity_TestRepository extends JpaRepository<Mysql_Entity_Test,Integer> {
    public Page<Mysql_Entity_Test> findAllByNameLike(Pageable pageable, String name);
}

方法名参数名一模一样,但是

mongo的模糊查询——》不需要加通配符

	@Test
	public void momgo_Repository_like(){

		Pageable pageable=PageRequest.of(0,5);

		Page<Mongodb_Domain_test> all = mongodb_domain_testRepository.findAllByNameLike(pageable, "g");
		List<Mongodb_Domain_test> content = all.getContent();
		System.out.println("all.getTotalElements() = " + all.getTotalElements());
		System.out.println("all.getTotalPages() = " + all.getTotalPages());
		for (Mongodb_Domain_test test : content) {
			System.out.println(test);
		}
	}

mysql的模糊查询——》需要自己加通配符

@Test
	public void mysql_Repository_like(){

		List<Sort.Order>sortOrderList=new ArrayList<>();
		sortOrderList.add(Sort.Order.desc("id"));
		Pageable pageable=PageRequest.of(0,5,Sort.by(sortOrderList));

		Page<Mysql_Entity_Test> all = testRepository.findAllByNameLike(pageable, "%l%");
//		Page<Mysql_Entity_Test> all = testRepository.findAllByNameLike(pageable, "%l");
//		Page<Mysql_Entity_Test> all = testRepository.findAllByNameLike(pageable, "l%");
//		Page<Mysql_Entity_Test> all = testRepository.findAllByNameLike(pageable, "l");
		System.out.println("getTotalElements-->"+all.getTotalElements());
		System.out.println("getTotalPages-->"+all.getTotalPages());

		List<Mysql_Entity_Test> content = all.getContent();
		for (Mysql_Entity_Test mysql_entity_test : content) {
			System.out.println("mysql_entity_test.getName() = " + mysql_entity_test.getName());
		}

	}

总结

/**
 *
 * Repository封装好的模糊查询——————》mysql的和mongodb的不一样
 * 		mysql的like里面需要自己写匹配规则
 * 				like(%zhang%)	还是
 * 				like(%zhang)	还是
 * 				like(zhang%)
 * 但是	mongo里面的like 就不需要自己写 % 只需要写 like(zhang) 就默认是前后匹配
 * 		findAllByNameEndingWith(zhang) 	是	%zhang
 * 		findAllByNameStartingWith(zhang)	是	zhang%
 * 	这里他们两个的不同
 *
 * */

另外

或许有人想过通过设置 example 的方式去模糊查询,举个例子:

User user=new User();
user.setName("%zh%");
findAll.(Example.of(user),pageable);

这样肯定是不行的,因为example就是准确查询,他会把 %zh% 当作一个整体去查询,而不是将 % 当作通配符去查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值