spring data jpa 两表关联 join

多方查询 终于得出join的用法在此记录

  1. 第一步:建立两表的实体 A和B 并在A属性加入 中B类对象
@Data
@Entity
@Table(name = "A")
public class A implements Serializable {
    @Id
    //id
    private String id;
    private String name;
    //性别
    private String gender;
    //与B表关联的id
    private Integer bId
    @ManyToOne //连接表参数   name中是本实体类中关联字段   referencedColumnName:是该属性中的关联字段
    @JoinColumn(name = "bId",referencedColumnName = "id",insertable=false,updatable=false)
    private B b;
    }
@Data
@Entity
@Table(name = "B")
public class B implements Serializable {

    @Id
    private String id;
	//职位
    private String post;
}

2.我写了一个方法 可以不写方法一匿名内部类的形式创建Specification

 private Specification<A> getSpecification(String key) {
		new Specification<A>() {
		            @Nullable
		            @Override
		            public Predicate toPredicate(Root<A> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
		                //判断是否模糊查询
		                if (StringUtils.isNotBlank(key)){
		                    //创建查询条件集合
		                    List<Predicate> orlist = new ArrayList<Predicate>();
		                    //添加查询条件  cb.like:模糊查询   root.get("查询字段").as(类型.class)
		                    orlist.add(cb.like(root.get("name").as(String.class),"%"+  key + "%"));//-------------//
		                    orlist.add(cb.like(root.get("phone").as(String.class), "%"+  key + "%"));//-------------//
		                    orlist.add(cb.like(root.get("role").as(String.class),"%"+  key + "%"));//-------------//
		                    //创建左外连接  Join<左,右>     root.join("副表实体在主表主体中的属性名",连接方式)
		                    Join<A,B> join = root.join("b", JoinType.LEFT);
		                    //将连接表需要查询的字段写入
		                    orlist.add(cb.like(join.get("post").as(String.class),"%"+key+"%"));
		                    int s =orlist.size();
		                    return  cb.or(orlist.toArray(new Predicate[s]));
		                }
		                return null;
		            }
		        };
		 }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值