一、查询方式

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

  

最新文章

  1. RecycleView 实现多布局
  2. python的断言
  3. 两系统用asp.net forms 身份验证方式实现跨域登录信息共享
  4. 基于DDD的.NET开发框架 - ABP依赖注入
  5. 4.6---找二叉树中序后继(CC150)
  6. iOS-OC-基本控件之UITextField
  7. iOS prototype Cells
  8. WebGL 入门-WebGL简介与3D图形学
  9. purple-accessData
  10. rhel5 新建用户提示:the home directory already exists.
  11. POJ3264RMQ
  12. python中去掉空行的问题
  13. [置顶] 推荐12款很棒的HTML5开发框架和开发工具
  14. Object.setPrototypeOf 方法的使用
  15. [转载] 基于Dubbo框架构建分布式服务
  16. PAT1028:List Sorting
  17. 【大数据技术】Sqoop
  18. 三十五、minishell(3)
  19. log4j layout日志信息格式
  20. Android 出现 maybe missing INTERNET permission 错误问题解决

热门文章

  1. [html][javascript] 关于SVG环形进度条
  2. Python爬虫---爬取腾讯动漫全站漫画
  3. sql查询慢 查找
  4. python爬虫(1)requests库
  5. php 对象的调用和引入
  6. Android:RelativeLayout 内容居中
  7. 利用CRM实现电话营销部门的管控 之数据暂缓
  8. java的基础知识01
  9. 【阅读笔记】Ranking Relevance in Yahoo Search (二)—— maching learned ranking
  10. DP背包(一)