Specifications动态查询

JpaSpecificationExecutor方法列表:
T findOne(Specification var1);//查询单个对象
List findAll(Specification var1);//查询列表
//查询全部,分页
//pageable:分页参数
//返回值:分页pageBean(page:是springdatajpa提供)
Page findAll(Specification var1, Pageable var2);
//查询列表
//Sort:排序参数
List findAll(Specification var1, Sort var2);
//统计查询
long count(Specification var1);

  • Specification:查询条件
    • 自定义我们自己的Specification实现类
      • 实现:Predicate toPredicate(Root var1, CriteriaQuery<?> var2, CriteriaBuilder var3);
      • root:查询的根对象(查询的任何属性都可以从根对象中获取)
      • CriteriaQuery:顶层擦汗寻对象,自定义查询方式(了解)
      • CriteriaBuilder :查询的构造器,封装了很多的查询条件

        多表之间的关系和操作多表的操作步骤

        表关系
        一对一
        一对多:
        一的一方:主表
        多的一方:从表
        外键:需要在从表上新建一列作为外键,他的取值来源于主表的主键
        多对多:
        中间表:中间表最少应该由两个字段组成,这两个字段作为外键指向两张表的主键,又组成了联合主键

讲师对学员:一对多关系

实体类中的关系
包含关系:
继承关系
分析步骤

  1. 明确表关系
  2. 确定表关系(描述 外键 | 中间表)
  3. 编写实体类,再实体类中描述表关系(包含关系)
  4. 配置映射关系

    完成多表操作

    一对多

多对多

/*
配置用户到角色多对多关系
配置多对多关系
1.声明表关系的配置
@ManyToMany(targetEntity = Role.class)//多对多
targetEntity:代表对方实体类字节码
2.配置中间表(包含两个外键)
@JoinTable
name:中间表的名称
joinColumns:配置当前对象在中间表的外键
@JoinColumn的数组
name:外键名
referencedColumnName:参照的主表的主键名
inverseJoinColumns:配置对方对象在中间表的外键
*/
分析步骤

  1. 明确表关系
  2. 确定表关系(描述 外键 | 中间表)
  3. 编写实体类,再实体类中描述表关系(包含关系)
  4. 配置映射关系

多表的查询

  1. 对象导航查询
    1. 查询一个对象的同时,通过此对象查询他的关联对象

从一方查询多方:
默认使用延迟加载
从多方查询一方:
默认使用立即加载