SpringBoot整合JPA(六)中

简介: SpringBoot整合JPA(六)

二.二.三.五 根据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;
    }


7e762474d7a02e37cda50428d01c922b.png


二.二.三.六 查询所有的数据 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;
    }


bbacd7177bad1459ff1e992f740e4792.png


二.二.三.七 根据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;
    }


ef1287e7203d442f2dd1298b25aaf2a7.png


二.二.三.八 查询数目 count


 @Test
    public void countTest(){
        Long count=userService.count();
       log.info("总数目{}",count);
    }


接口实现方法


 @Override
    public Long count() {
        return userCrudRepository.count();
    }


3883d92caf7b09db182403b6c784c05c.png


这就是 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);
}


image.png


二.三.二 PagingAndSorting 接口实现


在 repository 包下,创建 UserPagingAndSortingRepository 接口


public interface UserPagingAndSortingRepository extends PagingAndSortingRepository<User,Integer> {
}


二.三.三 PagingAndSorting 测试


在 test目录下,创建 PagingAndSortingRepositoryTests 测试类和测试方法。


多添加几条数据,好便于分页和排序。


7a1809ad83ae5ae452449d7e1ffcafb9.png


二.三.三.一 排序,按照性别和年龄


 @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;
    }


f8c3c68cca495b80d6b41ddb83368287.png


二.三.三.二 排序并分页


  @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;
    }


637a63ae740724d98ef75de0c4f0be9c.png


这就是 PageAndSorting仓库接口的基本用法。


二.四 JpaRepository 工厂接口


二.四.一接口的相关定义


@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
}


继承了分页,还有一个查询的接口。


image.png


二.四.二 Jpa 接口实现


在repository包下,创建 UserJpaRepository 接口。 通常使用的是这个Jpa的接口,会在这接口内添加相应的接口定义。


当接口的方法名称定义符合相应的规范的时候,不用写相应的实现,Jpa会帮我们自动匹配生成相应的sql语句。


public interface UserJpaRepository extends JpaRepository<User,Integer> {
}


7e3fb4e77b5fde6d532756a917b60f3a.png


dbe52632f771364f11dc09b30a860dc6.png



相关文章
|
1月前
|
存储 Java 测试技术
《Spring 测试指南》:JPA、MockMvc 和 @SpringBootTest 详解
Spring 提供了一组测试工具,可以轻松地测试 Spring 应用程序的各个组件,包括控制器、服务、存储库和其他组件。它具有丰富的测试注释、实用程序类和其他功能,以帮助进行单元测试、集成测试等。
67 0
|
8月前
|
缓存 Java Go
解决Spring Data JPA查询存在缓存问题及解决方案
解决Spring Data JPA查询存在缓存问题及解决方案
422 0
|
1月前
|
XML Java 数据库连接
Spring Boot的数据访问之Spring Data JPA以及Hibernate的实战(超详细 附源码)
Spring Boot的数据访问之Spring Data JPA以及Hibernate的实战(超详细 附源码)
55 0
|
7天前
|
SQL Java 数据库
Java一分钟之-Spring Data JPA:简化数据库访问
【6月更文挑战第10天】Spring Data JPA是Spring Data项目的一部分,简化了Java数据库访问。它基于JPA,提供Repository接口,使开发者能通过方法命名约定自动执行SQL,减少代码量。快速上手包括添加相关依赖,配置数据库连接,并定义实体与Repository接口。常见问题涉及主键生成策略、查询方法命名和事务管理。示例展示了分页查询的使用。掌握Spring Data JPA能提升开发效率和代码质量。
28 0
|
1月前
|
Java Spring
Spring Boot利用Spring Data JPA实现排序与分页查询实战(附源码,超详细)
Spring Boot利用Spring Data JPA实现排序与分页查询实战(附源码,超详细)
124 0
|
1月前
|
SQL Java 数据库连接
Springboot框架整合Spring Data JPA操作数据
Spring Data JPA是Spring基于ORM和JPA规范封装的框架,简化了数据库操作,提供增删改查等接口,并可通过方法名自动生成查询。集成到Spring Boot需添加相关依赖并配置数据库连接和JPA设置。基础用法包括定义实体类和Repository接口,通过Repository接口可直接进行数据操作。此外,JPA支持关键字查询,如通过`findByAuthor`自动转换为SQL的`WHERE author=?`查询。
|
1月前
|
Java 数据库 Spring
如何使用Spring Data JPA完成审计功能
如何使用Spring Data JPA完成审计功能
|
1月前
|
Java 数据库连接 API
Spring Boot整合Spring Data JPA进行CRUD和模糊查询
Spring Boot整合Spring Data JPA进行CRUD和模糊查询
46 0
|
1月前
|
Java 数据库 数据安全/隐私保护
使用Spring Boot和JPA实现多数据源的方法
使用Spring Boot和JPA实现多数据源的方法
94 0
|
1月前
|
前端开发 JavaScript Java
【Spring Boot+Vue.js+JPA+Mysql】实现前后端分离的名片系统(附源码 超详细必看 可作为大作业使用)
【Spring Boot+Vue.js+JPA+Mysql】实现前后端分离的名片系统(附源码 超详细必看 可作为大作业使用)
66 0