首先是mongo的一直以为他俩是一样的,唯一的区别就是
mongo的repository继承的是MongoRepository
mysql的repository 继承的是JpaRepository
今天偶然间发现在模糊查询方面,也有着细微的差别
先说结论
mysql的需要手动加 %
mongo的不需要
public interface Mongodb_Domain_testRepository extends MongoRepository然后是mysql的{ public Page findAllByNameLike(Pageable pageable,String name); }
public interface Mysql_Entity_TestRepository extends JpaRepository{ public Page findAllByNameLike(Pageable pageable, String name); }
方法名参数名一模一样,但是
mongo的模糊查询——》不需要加通配符 @Test
public void momgo_Repository_like(){
Pageable pageable=PageRequest.of(0,5);
Page all = mongodb_domain_testRepository.findAllByNameLike(pageable, "g");
List 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(){
ListsortOrderList=new ArrayList<>();
sortOrderList.add(Sort.Order.desc("id"));
Pageable pageable=PageRequest.of(0,5,Sort.by(sortOrderList));
Page all = testRepository.findAllByNameLike(pageable, "%l%");
// Page all = testRepository.findAllByNameLike(pageable, "%l");
// Page all = testRepository.findAllByNameLike(pageable, "l%");
// Page all = testRepository.findAllByNameLike(pageable, "l");
System.out.println("getTotalElements-->"+all.getTotalElements());
System.out.println("getTotalPages-->"+all.getTotalPages());
List content = all.getContent();
for (Mysql_Entity_Test mysql_entity_test : content) {
System.out.println("mysql_entity_test.getName() = " + mysql_entity_test.getName());
}
}
总结
另外
或许有人想过通过设置 example 的方式去模糊查询,举个例子:
User user=new User();
user.setName("%zh%");
findAll.(Example.of(user),pageable);
这样肯定是不行的,因为example就是准确查询,他会把 %zh% 当作一个整体去查询,而不是将 % 当作通配符去查询。



