zoukankan      html  css  js  c++  java
  • SpringData:关联查询

    一、查询方式

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

      

  • 相关阅读:
    如何自动生成图片用于测试 pytorch(No image? No need image)
    深度学习中Dropout原理解析
    关于深度学习中的batch_size
    每日一问
    flask中使用ajax 处理前端请求,每隔一段时间请求不通的接口,结果展示同一页面
    flask中使用ajax 处理前端请求,每隔一段时间请求一次
    flask中使用ajax 处理前端请求,结果展示在同一页面,不点击页面不展示
    appium 使用name 定位报错 Locator Strategy 'name' is not supported for this session
    robot framework 中一条用例执行失败,终止其他用例执行
    python 实现定时任务
  • 原文地址:https://www.cnblogs.com/zhangrongfei/p/11395387.html
Copyright © 2011-2022 走看看