controller层按条件查询代码
时间: 2023-08-20 14:11:59 浏览: 151
mybatis-plus分页查询 学习mybatis-plus在项目中的简单使用,代码生成器,分页查询,多数据源等
以下是一个简单的示例,假设我们有一个User模型,需要按照条件查询用户列表:
```java
@RestController
@RequestMapping("/users")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping
public List<User> getUsers(@RequestParam Map<String, String> params) {
return userService.getUsersByParams(params);
}
}
```
在controller中,我们通过@GetMapping注解定义了一个GET请求的接口,并且使用@RequestParam注解将查询参数注入到方法中。
在UserService中,我们可以编写getUsersByParams方法来根据不同的查询条件来查询用户列表:
```java
@Service
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public List<User> getUsersByParams(Map<String, String> params) {
Specification<User> spec = buildSpecification(params);
return userRepository.findAll(spec);
}
private Specification<User> buildSpecification(Map<String, String> params) {
Specification<User> spec = Specification.where(null);
for (Map.Entry<String, String> entry : params.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
if (StringUtils.isEmpty(value)) {
continue;
}
switch (key) {
case "name":
spec = spec.and((root, criteriaQuery, criteriaBuilder) ->
criteriaBuilder.like(root.get("name"), "%" + value + "%"));
break;
case "age":
spec = spec.and((root, criteriaQuery, criteriaBuilder) ->
criteriaBuilder.equal(root.get("age"), Integer.valueOf(value)));
break;
// 其他条件的处理
default:
break;
}
}
return spec;
}
}
```
在UserService中,我们首先通过buildSpecification方法来构建查询条件。该方法可以根据不同的查询参数来构建查询条件。在本例中,我们只是简单地处理了name和age两个查询参数。
接下来,我们使用JPA的Specification来实现查询条件的拼装。在以上示例中,我们使用了like查询和equal查询两种方式。其他查询条件的处理也可以类似地实现。
最后,我们使用userRepository.findAll(spec)方法来查询符合条件的用户列表,并返回给controller层。
阅读全文