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

浙公网安备 33010602011771号