SpringDataJPA

一、简介

SpringData 中基于JPA标准操作数据库的模块,简化持久层的代码。

二、注解

注解 说明
@Id 标注为主键
@GeneratedValue(strategy = GenerationType.IDENTITY) 主键生成策略
@Column(name = "xx") 表明数据库字段
@ManyToOne(cascade = CascadeType.PERSIST) 表示多的一方
@JoinColumn(name = "xx") 维护一个外键
@OneToMany() 表示一的一方
@Query(nativeQuery = true/ false) 执行一个jpql或者sql
@Modifying 执行更新

三、JPA提供的核心接口

  • Repository
  • CrudRepository
  • PagingAndSortingRepository:提供分页与排序的操作
  • JPASecificationExecutor:单独存在的,提供多条件查询支持

四、查询方式

  • 方法名称要遵循驼峰式命名规则:findBy + 属性名称(首字母大写)+查询条件(首字母大写) findByNameLike();

  • Sort & Order 定义排序规则。

  • Pageable: 封装了分页参数,当前页从0开始。

  • JPASecificationExecutor

    //单条件查询
    @Test
    public void test(){
    	//Predicate :封装了单个查询条件
        /** 
         * @param root 查询对象属性的封装
         * @param criteriaQuery 封装了我们要执行的查询中的各个部分的信息,select from order
         * @param criteriaBuilder 查询条件的构造器
         */
        Specification<xxx> spec = new Specification<XXX>(){
            @Override
            public Predicate toPredicate(Root<xxx> root, CriteriaQuery<?> cq, CriteriaBuilder cb){
                Predicate predicate = cb.equal(root.get("namexx"),"xx");
                return predicate;
            }
        }
    }
    
    //多条件查询一
    @Test
    public void test(){
        Specification<xxx> spec = new Specification<XXX>(){
            @Override
            public Predicate toPredicate(Root<xxx> root, CriteriaQuery<?> cq, CriteriaBuilder cb){
                List<Predicate> list = new ArrayList<>();
                list.add(cb.equal(root.get("namexx"),"xx"));
                list.add(cb.equal(root.get("agexx"),"xx"));
                Predicate[] array = new Predicate[list.size()];
                return cb.and(list.toArray());
            }
        }
    }
    
    //多条件查询二
    @Test
    public void test(){
        Specification<xxx> spec = new Specification<XXX>(){
            @Override
            public Predicate toPredicate(Root<xxx> root, CriteriaQuery<?> cq, CriteriaBuilder cb){
               	Path<String> nameField = root.get("namexx");
                Path<Integer> ageField = root.get("agexx");
                Path<String> idField = root.get("idxx");
                Predicate name = cb.like(nameField, "%zzz");
                Predicate age = cb.equal(ageField, 11);
                Predicate id = cb.equal(idField,"1");
                return cb.or(cb.and(name,age),id);
            }
        }
    }
    

五、级联操作

posted @ 2021-08-31 15:00  十一の宇宙  阅读(62)  评论(0)    收藏  举报