一、查询方式

1、导航式查询

  使用“对象.属性”   进行查询;对于多的查询, 默认就是延迟加载,添加注解@Transactional

  在OneToMany 注解中需要添加属性   fetch:值:FetchType.LAZY   延迟加载  FetchType.ENAGER   及时加载

通过联系人 查询客户;一的查询默认是及时加载,可以配置成延时加载

2、Specification查询

  需求   查询客户信息  根据联系人的手机号查
  需要查询  CustomerDao2需要继承JpaSpecificationExecutor接口
二、编写实体类
1、主表实体类关联从表添加属性所需添加的注解  @OneToMany(mappedBy = "customer",cascade = CascadeType.ALL,fetch = FetchType.LAZY)
2、从表实体类关联主表添加属性所需添加的注解  @ManyToOne(fetch = FetchType.LAZY)  @JoinColumn(name="custid",referencedColumnName = "cust_id")
三、编写dao;主表da需要继承JpaRepository和JpaSpecificationExecutor从表dao需要继承JpaRepository
四、测试
package cn.zrf.jpa;

import cn.zrf.jpa.dao.Customer2Dao;
import cn.zrf.jpa.dao.LinkManDao;
import cn.zrf.jpa.entity.Customer2;
import cn.zrf.jpa.entity.LinkMan;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional; import javax.persistence.criteria.*;
import java.util.Set; @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class QueryTest {
@Autowired
Customer2Dao customer2Dao;
@Autowired
LinkManDao linkManDao; @Test
@Transactional
public void queryCustomer(){
Customer2 one = customer2Dao.findOne(1l);
// System.out.println(one);
//根据客户查询联系人信息
Set<LinkMan> set = one.getLinkMans();
for(LinkMan linkMan:set){
System.out.println(linkMan);
}
}
//根据联系人查询客户
@Test
@Transactional
public void queryLinkMan(){
LinkMan one = linkManDao.findOne(3l);
System.out.println(one);
Customer2 customer2 = one.getCustomer2();
System.out.println(customer2);
}
//根据手机号查询
@Test
@Transactional
public void questPhone(){
Customer2 customer2 = customer2Dao.findOne(new Specification<Customer2>() {
@Override
public Predicate toPredicate(Root<Customer2> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
//root:关联联系人表
//参数1、Customer2实体类中关联的属性的名称 参数2、连接方式
Join<Object, Object> join = root.join("linkMans", JoinType.LEFT);
//创建查询条件
Predicate predicate = criteriaBuilder.equal(join.get("lkmPhone"), "1234");
return predicate;
}
});
// System.out.println(customer2);
//获得客户信息查询联系人
Set<LinkMan> linkMans = customer2.getLinkMans();
for (LinkMan linkMan:linkMans){
System.out.println(linkMan);
} }
}

  

SpringData:关联查询的更多相关文章

  1. JDBC MySQL 多表关联查询查询

    public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver&q ...

  2. MYSQL基础操作之数据约束与关联查询

    一.MYSQL约束 1.默认值约束,当字段没有插入值的时候,mysql自动给该字段分配默认值. 默认值的字段允许为空. 对默认值字段也可以插入null. CREATE TABLE STUDENT( I ...

  3. C#代码中实现两个表(DataTable)的关联查询(JOIN)

    之前通常都是使用SQL直接从数据库中取出表1和表2关联查询后的数据,只需要用一个JOIN就可以了,非常方便.近日遇到一种情况,两个表中的数据已经取到代码中,需要在代码中将这两个表关联起来,并得到它们横 ...

  4. Mybatis关联查询和数据库不一致问题分析与解决

    Mybatis关联查询和数据库不一致问题分析与解决 本文的前提是,确定sql语句没有问题,确定在数据库中使用sql和项目中结果不一致. 在使用SpringMVC+Mybatis做多表关联时候,发现也不 ...

  5. Mysql多表表关联查询 inner Join left join right join

    Mysql多表表关联查询 inner Join left join right join

  6. YII2-数据库数据查询方法,关联查询with, joinWith区别和分页

    一.ActiveRecord 活动记录 1.with关联查询 例如,查询评论 $post = Post::find()->with('comments'); 等价于以下结果集 SELECT * ...

  7. Mybatis高级查询之关联查询

    learn from:http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#Result_Maps 关联查询 准备 关联结果查询(一对一) resul ...

  8. Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询

    在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...

  9. [NHibernate]一对多关系(关联查询)

    目录 写在前面 文档与系列文章 一对多查询 总结 写在前面 上篇文章介绍了nhibernate的一对多关系如何配置,以及级联删除,级联添加数据的内容.这篇文章我们将学习nhibernate中的一对多关 ...

随机推荐

  1. Linux提权-suid提权

    0x1 suid概念 通俗理解为其他用户执行这个程序是可以用该程序所有者/组的权限 0x2 suid提权 简单理解为,一个文件有s标志(权限中包含s),并且对应的是root权限,那么当运行这个程序时就 ...

  2. [YII2] COOKIE的操作使用

    PHPcookie的设置 setcookie('username',$data['username'],time()+3600*24*7); YII2cookie的设置 $cookies = Yii: ...

  3. share sdk

    新浪微博                 http://open.weibo.com 腾讯微博                 http://dev.t.qq.com QQ空间             ...

  4. 使用 Junit + Mockito 实践单元测试

    一.前言 相信做过开发的同学,都多多少少写过下面的代码,很长一段时间我一直以为这就是单元测试... @SpringBootTest @RunWith(SpringRunner.class) publi ...

  5. Spring5参考指南:Bean作用域

    文章目录 Bean作用域简介 Singleton作用域 Prototype作用域 Singleton Beans 中依赖 Prototype-bean web 作用域 Request scope Se ...

  6. QML-AES加解密小工具

    Intro 为了解码网课视频做的小工具,QML初学者可以参考一下. 项目地址 Todo 在插入新条目时,ListView不会自动根据section进行重排,因此出现同一个文件夹重复多次的现象.目测强行 ...

  7. Retrofit的文件上传和进度提示

    2019独角兽企业重金招聘Python工程师标准>>> 1.写一个上传监听的接口: /** * Created by Zzm丶Fiona on 2017/7/31. */ publi ...

  8. 高性能服务器开发基础系列 (二)Reactor模式

    系列目录 第01篇 主线程与工作线程的分工 第02篇 Reactor模式 第03篇 一个服务器程序的架构介绍 第04篇 如何将socket设置为非阻塞模式 第05篇 如何编写高性能日志 第06篇 关于 ...

  9. INTERVIEW #0

    一.造成网络延迟的可能原因 1,WiFi所有用户上下行流量共用一个信道,当用户太多或者有人在下载大的资源时带宽不够,丢包: 2,线路质量不佳导致信噪比太低,比如光纤损耗太大等. 二.IPv6优势 1, ...

  10. 一张图告诉你E-R图怎么画

    E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型.属性和联系的方法,用来描述现实世界的概念模型. 它是描述现实世界关系概念模型的有效方法.是表示概 ...