【修真院java小课堂】spring-data-jpa

大家好,我是成都分院12期学员晋良金,今天为大家介绍在springboot中使用spring-data-jpa。

1.背景介绍

SpringData : Spring 的一个子项目。用于简化数据库访问,支持NoSQL 和 关系数据存储。其主要目标是使数据库的访问变得方便快捷。而SpringData 项目所支持的关系数据存储技术有两种:JDBC和JPA。Spring-data-jpa致力于减少数据访问层 (DAO) 的开发量, 开发者唯一要做的就只是声明持久层的接口,其他都交给 Spring Data JPA 来帮你完成。
2.知识剖析

开发步骤

(1)声明持久层的接口。继承Repository或其子接口即可;

(2)在接口中声明需要的业务方法。Spring Data 将根据给定的策略生成实现代码;

(3)在 Spring 配置文件中增加一行声明,让 Spring 为声明的接口创建代理对象,即配置 <jpa:repositories>。(Springboot省略此步)

Spring-data-jpa提供的接口

(1)Repository:最顶层的接口,是一个空的接口,目的是为了统一所有Repository的类型,且能让组件扫描的时候自动识别;

(2)CrudRepository :是Repository的子接口,提供CRUD的功能;

(3)PagingAndSortingRepository:是CrudRepository的子接口,添加分页和排序的功能;

(4)JpaRepository:是PagingAndSortingRepository的子接口,增加了一些实用的功能,比如:批量操作等;

(5)JpaSpecificationExecutor:用来做负责查询的接口;

(6)Specification:是Spring Data JPA提供的一个查询规范,要做复杂的查询,只需围绕这个规范来设置查询条件即可。

——将表按一定规则输入到Excel文件之中;

——通过代码读取Excel文件中的内容;

代码

    @Test
    public void findAll(){

/*        List<String> list = new ArrayList();
        list.add("updateAt");
        list.add("nickName")*/
        Sort sort = new Sort(Sort.Direction.ASC, "id");

        Pageable pageable = PageRequest.of(1, 3, sort);

        Page<User> userPage = userRepository.findAll(new Specification<User>() {
            List<Predicate> predicates = new ArrayList<>();
            @Override
            public Predicate toPredicate(Root<User> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                Predicate likeNickName = criteriaBuilder.like(root.get("nickName").as(String.class),"%"+"3"+"%");
                predicates.add(likeNickName);
                return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
            }
        }, pageable);

        System.out.println("总页数:" + userPage.getTotalPages());
        System.out.println("每页大小:" + userPage.getSize());
        System.out.println("数据:" + userPage.getContent());
        System.out.println("页数:" + userPage.getNumber());
        System.out.println("总数:" + userPage.getTotalElements());


    }


3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献

         https://www.cnblogs.com/zeng1994/p/7575606.html
         https://www.cnblogs.com/BenWong/p/3890012.html
         https://www.cnblogs.com/happyday56/p/4661839.html
         https://www.cnblogs.com/hdwang/p/7843405.html

8.更多讨论

(1)jpa与JDBC有什么不同

jpa只需要声明持久层接口就可以直接使用,不像JDBC需要写sql。

(2)jpa有什么劣势

对于动态查询支持得不太好,不像MyBatis可以直接在mapper文件中写简单的判断语句即可。

(3)jpa有什么优势

简单的增删改查会非常方便,不用写太多的代码。

猜你喜欢

转载自blog.csdn.net/qq_41810013/article/details/81509178
今日推荐