find是CRUD中的R,是使用得最多的方法,此篇先整理下自带的find方法(不需要在dao层写对应接口),后续会整理下拓展方法
一、getById(通过id进行单个查询(跟findById差不多,返回值类型不一样))
service层
@Transactional
public User getById(Integer id){
return userDao.getById(id);
}
control层
@GetMapping("/getById")
public User getById(Integer id){
return userService.getById(id);
}
对id为27的数据进行查询,测试成功!
后台执行了一行sql
二、findAll(对所有数据进行查询)
service层
@Transactional
public List<User> findAll(){
return userDao.findAll();
}
control层
/**
* 查询所有的数据
* @return 所有用户的列表
*/
@GetMapping("/findAll")
public List<User> findAll(){
return userService.findAll();
}
对所有数据进行查询,测试成功!
后台进行了一行sql
三、findAllSort(查询所有数据并进行对应参数排序)
service层
@Transactional
public List<User> findAllSort(Sort ascOrDesc){
return userDao.findAll(ascOrDesc);
}
control层
/**
* 查询所有数据并进行排序
* @param sort 正序或者反序
* @param para 需要排序的参数
* @return
*/
@GetMapping("/findAllSort")
public List<User> findAllSort(String sort,String para){
Sort ascOrDesc;
if(sort.toLowerCase().equals("asc")){
//ascOrDesc = Sort.by(Sort.Direction.ASC,para);
ascOrDesc = JpaSort.unsafe(Sort.Direction.ASC,para);
} else {
ascOrDesc = Sort.by(Sort.Direction.DESC,para);
}
return userService.findAllSort(ascOrDesc);
}
按照age进行正序排序,测试正常!
后台进行了一行sql
四、findAll(Example<S> example) (使用条件查询所有)(这个有点复杂还需要研究一下)
service层
@Transactional
public <S extends User> List<S> findByIdExample(Example<S> example){
return userDao.findAll(example);
}
control层
/**
* 对数据进行模糊查询
* @param name 需要查询的name
* @return
*/
@GetMapping("/findByIdExample")
public List<User> findByIdExample(String name){
User user = new User();
user.setName(name);
ExampleMatcher exampleMatcher = ExampleMatcher.matching()
.withMatcher("name", ExampleMatcher.GenericPropertyMatchers.contains())
.withMatcher("age", ExampleMatcher.GenericPropertyMatchers.exact())
.withIgnoreCase(true);
Example<User> example = Example.of(user,exampleMatcher);
return userService.findByIdExample(example);
}
查询所有name为刘佳丽的数据,测试成功!
后台进行了一行sql
五、findAll(Pageable pageable) (用分页的方式获取所有数据)
service层
@Transactional
public Page<User> findAllPage(Pageable pageable){
return userDao.findAll(pageable);
}
control层
/**
* 对数据进行分页查询
* @param page 页数 从0开始
* @param size 页面大小(每页数据多少)
* @param sort 排序
* @param name 排序对象
* @return
*/
@GetMapping("/findAllPage")
public Page<User> findAllPage(Integer page,Integer size,String sort,String name){
Pageable pageable = PageRequest.of(page, size,
sort == "desc"? Sort.Direction.DESC : Sort.Direction.ASC, name);
return userService.findAllPage(pageable);
}
pagerequest源码里面of后面有三种传参方式,page和size是必填的,后面的排序和排序参数选填
网页测试成功!
出参如图:
后台执行了两条jpql