最近在学习JPA时发现一个问题,就是JpaRepository接口提供了一些很简单的查询方式,比如通过id查找、查找所有、分页查找等。

那我们如果想要模糊查询怎么办呢,既然用了JPA了,就不想在自己些查询语句了。

实现方式很简单,spring-data-jpa会根据方法的名字来自动生成sql语句,我们只需要按照方法定义的规则即可。

dao层

在我们的接口中添加一个方法

1
2
3
public interface UserRepository extends JpaRepository<User,Integer> {
List<User> findByuserNameLike(String name);
}

一定要使用 JPA 规定的形式 findBy+参数名+Like(参数)。

这个参数名一定要是我们自己类中的想要模糊查询的成员变量明。

server层

接口

1
2
3
4
/**
* 通过用户名模糊搜索
*/
List<User> findUserByNameLike(String userName);

实现类

1
2
3
4
@Override
public List<User> findUserByNameLike(String userName) {
return userRepository.findByuserNameLike(userName);
}

controller层

1
2
3
4
5
6
7
8
/**
* 根据用户名模糊搜索
*/
@GetMapping ("/search")
public List<User> findUserByName(@RequestBody HashMap<String, Object> data){
String name = (String) data.get("name");
return userService.findUserByNameLike("%"+name+"%");
}

这里一定要加“%”,不然查询不出来

测试

image-20210613145030842