springboot中使用JOIN实现关联表查询

* 首先要确保你的表和想要关联的表有外键连接

  • repository中添加接口JpaSpecificationExecutor<?>,就可以使用springboot jpa 提供的API了。
  • @Repository
    public interface MyEntityRepository extends JpaRepository<MyEntity, Integer>, JpaSpecificationExecutor<MyEntity> {
       //...
    }

    在查询方法中调用 JpaSpecificationExecutor 提供的 findAll() 方法,查询到我们需要的结果集,先上代码,后续说明

      • public Page<MyEntity> getMerchants(List<Integer> fKIds, String sortField, String entityName,
                    Integer pageNum) {
                Pageable pageable = PageRequest.of(pageNum, 20, Direction.DESC, sortField);
                @SuppressWarnings("serial")
                Page<MyEntity> page = myEntityRepository.findAll(new Specification<MyEntity>() {
        
                    @Override
                    public Predicate toPredicate(Root<MyEntity> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
        
                        if (fKIds!= null) {
                            Join<MyEntity, EntityDetails> join = root.join("entityDetails");
                            list.add(join .get("id").in(fKIds));
                        }
                        Predicate[] array = new Predicate[list.size()];
                        return cb.and(list.toArray(array));
                    }
                }, pageable);
                return page;
            }

        代码解释:

      • fKIds,这里为了顺便记录in查询,我查询的条件是 MyEntity.entityDetails.id in fKIds,就是关联表字段的in查询
      • sortField, pageNum为分页参数
      • toPredicate方法构建了查询条件的集合
      • 这里join的精髓就是,获取join对象,通过join对象进行查询条件的构建。
      • javax.persistence.criteria.Join<MyEntity, EntityDetails>
        
        A join to an entity, embeddable, or basic type.
        Type Parameters:<Z> the source type of the join                <X> the target type of the joinSince:Java Persistence 2.0

低调总结:真的不太用的来博客园这个编辑器(^_^),JPA其实蛮好用的,多用就知道了。

原文地址:https://www.cnblogs.com/zhoujl-5071/p/10382976.html

时间: 2024-10-07 05:16:29

springboot中使用JOIN实现关联表查询的相关文章

MyBatis学习总结(五)——实现关联表查询(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(五)--实现关联表查询 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. 1 CREATE TABLE teacher( 2 t_id INT PRIMARY KEY AUTO_INCREMENT, 3 t_name VARCHAR(20) 4 ); 5 CREATE TAB

MyBatis-----4.实现关联表查询

前面几节都是单表查询,但是实际中一定会用到多表关联查询,本节将介绍关联表查询的实现 1.一对一关联 1.1创建数据表和添加数据 CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name VARCHAR(20) ); CREATE TABLE class( c_id INT PRIMARY KEY AUTO_INCREMENT, c_name VARCHAR(20), teacher_id INT ); ALTER TABL

django orm 关联表查询

django orm 关联表数据,即sql的多表查询 例如两个表: Apply表中定义了字段position为foreignkey指向job表的id字段, 1.通过job表查找子表apply的字段信息: job.objects.values( 'id', 'job_type', 'apply__date_created') 连接符为小写的子表tablename+双下线+子表字段名即:apply__date_created 表示寻找Apply表中的date_created字段 等价于后台的SQL:

INEER JOIN..ON两表查询例子

一.创建两个表 1.hanshu 2.YingHu 二.建立关系 --inner join on用法两表查询--查询hanshu中的name 和 YingHu中的YYqq --select *或(列名) from hanshu(表1) INNER JOIN YingHu(表二) ON hanshu.id=YingHu.id (来源于两表中的关联主键) select hanshu.name,YingHu.YYqq from hanshu INNER JOIN YingHu ON hanshu.id

mybatis 关联表查询

这段时间由于项目上的需求:需要将数据库中两表关联的数据查询出来展示到前端(包含一对一,一对多): (1)一对一: 在实体类中维护了另一个类的对象: 这里我以用户(User)和产品(Product)为例:其中get和set的方法我就没有生成了,请自行生成: 实体类: public class User { private String id; private String name; private String password; private Product product; } publi

MyBatis学习总结(五)——实现关联表查询

一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name VARCHAR(20) ); CREATE TABLE class( c_id INT PRIMARY KEY AUTO_INCREMENT, c_name VA

MyBatis学习总结_05_实现关联表查询

一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. 1 CREATE TABLE teacher( 2 t_id INT PRIMARY KEY AUTO_INCREMENT, 3 t_name VARCHAR(20) 4 ); 5 CREATE TABLE class( 6 c_id INT PRIMARY KEY AUTO_INCREMEN

Mybatis实现关联表查询

一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. 1 CREATE TABLE teacher( 2 t_id INT PRIMARY KEY AUTO_INCREMENT, 3 t_name VARCHAR(20) 4 ); 5 CREATE TABLE class( 6 c_id INT PRIMARY KEY AUTO_INCREMEN

Mybatis关联表查询_5

使用Mybatis实现关联查询,分为一对一和一对多两种情况,最后并对ResultMap进行一个简要说明. 创建表和数据 创建教师表,班级表,学生表, 假设一个老师只负责教一个班,那么老师和班级之间的关系是一对一的关系. 假设一个班级有多个学生,那么班级和学生之间的关系是一对多的关系. CREATE TABLE teacher( t_id number(5) PRIMARY KEY, t_name VARCHAR2(20) ); CREATE TABLE class( c_id number(5)