二.二.三.五 根据id 进行查询 findById
@Test public void findByIdTest(){ User user=userService.findById(3); log.info(user); }
接口实现方法
@Override public User findById(Integer id) { Optional<User> optional= userCrudRepository.findById(id); if(optional.isPresent()){ return optional.get(); } return null; }
二.二.三.六 查询所有的数据 findAll
@Test public void findAllTest(){ List<User> userList=userService.findAll(); userList.forEach(n->log.info(n)); }
接口实现方法
@Override public List<User> findAll() { Iterable<User> iterator= userCrudRepository.findAll(); List<User> userList=new ArrayList<>(); //将 Iterable 转换成 list iterator.forEach(n->userList.add(n)); return userList; }
二.二.三.七 根据id集合进行查询 findAllById
@Test public void findByIdsTest(){ List<Integer> ids= Arrays.asList(3,4,6); List<User> userList=userService.findAllByIds(ids); userList.forEach(n->log.info(n)); }
接口实现方法
@Override public List<User> findAllByIds(List<Integer> ids) { Iterable<User> iterator= userCrudRepository.findAllById(ids); List<User> userList=new ArrayList<>(); iterator.forEach(n->userList.add(n)); return userList; }
二.二.三.八 查询数目 count
@Test public void countTest(){ Long count=userService.count(); log.info("总数目{}",count); }
接口实现方法
@Override public Long count() { return userCrudRepository.count(); }
这就是 Crud仓库接口的基本用法。
二.三 PagingAndSorting 工厂接口
二.三.一 接口的相关定义
org.springframework.data.repository.PagingAndSortingRepository
分页和排序的接口,继承了 Crud的接口。
@NoRepositoryBean public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> { Iterable<T> findAll(Sort sort); Page<T> findAll(Pageable pageable); }
二.三.二 PagingAndSorting 接口实现
在 repository 包下,创建 UserPagingAndSortingRepository 接口
public interface UserPagingAndSortingRepository extends PagingAndSortingRepository<User,Integer> { }
二.三.三 PagingAndSorting 测试
在 test目录下,创建 PagingAndSortingRepositoryTests 测试类和测试方法。
多添加几条数据,好便于分页和排序。
二.三.三.一 排序,按照性别和年龄
@Autowired private UserPagingAndSortingRepository userPagingAndSortingRepository; @Test public void sortTest(){ List<User> userList=userService.findAllOrderBySexAndAge(); userList.forEach(n->log.info(n)); }
业务接口方法
@Override public List<User> findAllOrderBySexAndAge() { Sort.Order sort1= Sort.Order.desc("sex"); Sort.Order sort2 = Sort.Order.asc("age"); Sort sort=Sort.by(sort1,sort2); Iterable<User> userIterable=userPagingAndSortingRepository.findAll(sort); List<User> userList=new ArrayList<>(); userIterable.forEach(n->userList.add(n)); return userList; }
二.三.三.二 排序并分页
@Test public void pageTest(){ Page<User> page=userService.pageAll(); log.info("总页数:{}",page.getTotalPages()); log.info("总的数目:{}",page.getTotalElements()); log.info("当前页数:{}",page.getNumber()+1); log.info("当前页的数目:{}",page.getNumberOfElements()); List<User> userList= page.getContent(); userList.forEach(n->log.info(n)); }
业务接口方法
@Override public Page<User> pageAll() { Sort sort=Sort.by(Sort.Direction.DESC,"id"); // 默认从0开始的 Pageable pageable= PageRequest.of(2-1, 4, sort); Page<User> userPage=userPagingAndSortingRepository.findAll(pageable); return userPage; }
这就是 PageAndSorting仓库接口的基本用法。
二.四 JpaRepository 工厂接口
二.四.一接口的相关定义
@NoRepositoryBean public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> { }
继承了分页,还有一个查询的接口。
二.四.二 Jpa 接口实现
在repository包下,创建 UserJpaRepository 接口。 通常使用的是这个Jpa的接口,会在这接口内添加相应的接口定义。
当接口的方法名称定义符合相应的规范的时候,不用写相应的实现,Jpa会帮我们自动匹配生成相应的sql语句。
public interface UserJpaRepository extends JpaRepository<User,Integer> { }