Java jpa外连接查询join案例详解

1、IndexTagController.java

@GetMapping("/tags/{id}")
    public String types(@PageableDefault(size = 3,sort = {"updateTime"},direction = Sort.Direction.DESC)Pageable pageable,
                        @PathVariable long id,
                        Model model,
                        HttpSession session){
        //找到所有的标签,并且按照标签新闻量排序
        List<Tag> tags = tagService.listTagTop(50);
        if(id == -1){
            //得到最大数据量的分类
            id = tags.get(0).getId();
        }

        model.addAttribute("tags",tags);
        model.addAttribute("page",newsService.listNews(id,pageable));
        model.addAttribute("activeId",id);
        session.setAttribute("query","");
        return "tags";
    }

newService.listNews(id,pgeable)中id为标签的id,这个方法要做的就是查询出标签中包含id为参数id的所有新闻。

2、业务层代码

NewService.java是一个接口,其中存在以下方法

//根据标签Id查找符合条件的新闻
Page<News> listNews(long id,Pageable pageable);

NewServiceImpl.java为实现NewService接口的类,实现listNews方法

@Override
    public Page<News> listNews(long id, Pageable pageable) {
        return newsRepository.findAll(new Specification() {
            @Override
            public Predicate toPredicate(Root root, CriteriaQuery cq, CriteriaBuilder cb) {
                //外连接查询 Join
                Join join =root.join("tags");
                return cb.equal(join.get("id"),id);
            }
        },pageable);

    }

NewsRepository.java 继承了JpaSpecificationExecutor

public interface NewsRepository extends JpaRepository<News,Long>, JpaSpecificationExecutor {

    @Query("select n from News n where n.recommend = true ")
    List<News> findTop(Pageable pageable);

    @Query("select n from News n where n.title like ?1 or n.content like ?1")
    Page<News> findByQuery(String query,Pageable pageable);

    @Query("select function('date_format',n.updateTime,'%Y') as year1 from News n group by year1 order by year1 desc ")
    List<String> findGroupYear();

    @Query("select n from News n where function('date_format',n.updateTime,'%Y') = ?1 ")
    List<News> findByYear(String year);

}

到此这篇关于Java jpa外连接查询join案例详解的文章就介绍到这了,更多相关Java jpa外连接查询join内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java之jpa入门教程讲解

    JPA快速入门介绍 一:什么是JPA JPA的英文全称是Java PersistenceAPI, 目的是给Java开发者提供对象关系映射工具用于在 Java应用程序开发中来管理关系数据(RDBMS).JavaPersistence 包含下面三个部分: Java持久化API JPA查询语言 对象关系映射元数据 二:JPA有哪些框架提供了的实现 当前JPA提供厂商有Hibernate, Apache, Eclipse Link等,Google云计算平台 AppEngine也使 用了JPA作为持久层.

  • Java Swing JPanel面板的使用方法

    1. 概述 官方JavaDocsApi: javax.swing.JPanel JPanel,面板.JPanel 是在开发中使用频率非常高的一般轻量级面板容器组件. JPanel 常用构造方法: // 创建默认使用流式布局的面板 JPanel() // 创建指定布局管理器的面板 JPanel(LayoutManager layout) 2. 代码实例 package com.xiets.swing; import javax.swing.*; import java.awt.*; public

  • Spring Boot JPA中java 8 的应用实例

    上篇文章中我们讲到了如何在Spring Boot中使用JPA. 本文我们将会讲解如何在Spring Boot JPA中使用java 8 中的新特习惯如:Optional, Stream API 和 CompletableFuture的使用. Optional 我们从数据库中获取的数据有可能是空的,对于这样的情况Java 8 提供了Optional类,用来防止出现空值的情况.我们看下怎么在Repository 中定义一个Optional的方法: public interface BookRepos

  • Java Swing JPasswordField密码框的实现示例

    1. 概述 官方JavaDocsApi: javax.swing.JPasswordField JPasswordField,密码框.JPasswordField 继承自 JTextField,只是显示输入的内容时用特定的字符替换显示(例如 * 或 ●),用法和 JTextField 基本一致. JPasswordField 常用构造方法: /* * 参数说明: * text: 默认显示的文本 * columns: 用来计算首选宽度的列数:如果列设置为 0,则首选宽度将是组件实现的自然结果 */

  • spring Data jpa简介_动力节点Java学院整理

    前言 自 JPA 伴随 Java EE 5 发布以来,受到了各大厂商及开源社区的追捧,各种商用的和开源的 JPA 框架如雨后春笋般出现,为开发者提供了丰富的选择.它一改之前 EJB 2.x 中实体 Bean 笨重且难以使用的形象,充分吸收了在开源社区已经相对成熟的 ORM 思想.另外,它并不依赖于 EJB 容器,可以作为一个独立的持久层技术而存在.目前比较成熟的 JPA 框架主要包括 Jboss 的 Hibernate EntityManager.Oracle 捐献给 Eclipse 社区的 E

  • Java jpa外连接查询join案例详解

    1.IndexTagController.java @GetMapping("/tags/{id}") public String types(@PageableDefault(size = 3,sort = {"updateTime"},direction = Sort.Direction.DESC)Pageable pageable, @PathVariable long id, Model model, HttpSession session){ //找到所有

  • SQL的各种连接Join案例详解

    最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN).SQL LEFT JOIN.SQL RIGHT JOIN.SQL FULL JOIN,其中前一种是内连接,后三种是外链接. 假设我们有两张表,Table A是上边的表,Table B是下边的表. Table A id name 1 Google 2 淘宝 3 微博 4 Facebook Table B id address 1 美国 5 中国 3 中国 6 美国 一.INNER JOIN 内连接是最常见的一种连接,只连接

  • Java for循环常见优化方法案例详解

    目录 方法一:最常规的不加思考的写法 方法二:数组长度提取出来 方法三:数组长度提取出来 方法四:采用倒序的写法 方法五:Iterator 遍历 方法六:jdk1.5后的写法 方法七:循环嵌套外小内大原则 方法八:循环嵌套提取不需要循环的逻辑 方法九:异常处理写在循环外面 前言 我们都经常使用一些循环耗时计算的操作,特别是for循环,它是一种重复计算的操作,如果处理不好,耗时就比较大,如果处理书写得当将大大提高效率,下面总结几条for循环的常见优化方式. 首先,我们初始化一个集合 list,如下

  • Java静态代理与动态代理案例详解

    代理模式 代理模式(Proxy):为其他对象提供一个代理以控制对这个对象的访问. 主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上.在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层. 代理模式的元素是:共同接口.代理对象.目标对象. 代理模式的行为:由代理对象执行目标对象的方法.由代理对象扩展目标对象的方法. 代理模式的

  • Java Pattern与Matcher字符串匹配案例详解

    Pattern类定义          public final class Pattern extends Object implementsSerializable正则表达式的编译表示形式.用于编译正则表达式后创建一个匹配模式.         指定为字符串的正则表达式必须首先被编译为此类的实例.然后,可将得到的模式用于创建Matcher对象,依照正则表达式,该对象可以与任意字符序列匹配.执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式.         因此,典型的

  • Java page cache回写机制案例详解

    JAVA写文件的基本流程 在不使用堆外内存的情况下,java在写文件时,先将字节写入JVM的堆内内存中:然后调用jvm的写文件函数,将字节写入jvm的堆外内存中,jvm再调用系统内核的写文件函数,将字节写入内核的heap中:然后内核将字节写入page cache中,将page cache状态改为dirty,根据page cache的回写机制在合适的时机将字节写入磁盘. page cache 自动回写机制 page cache的回写时机由系统配置/etc/sysctl.conf 中的几个参数决定,

  • java设计模式责任链模式原理案例详解

    目录 引言 责任链模式定义 类图 角色 核心 示例代码 1.对请求处理者的抽象 2.对请求处理者的抽象 3.责任链的创建 责任链实现请假案例 案例类图 可扩展性 纯与不纯的责任链模式 纯的责任链模式 不纯的责任链模式 责任链模式主要优点 职责链模式的主要缺点 适用场景 模拟实现Tomcat中的过滤器机制 运行过程如下 分析Tomcat 过滤器中的责任链模式 引言 以请假流程为例,一般公司普通员工的请假流程简化如下: 普通员工发起一个请假申请,当请假天数小于3天时只需要得到主管批准即可:当请假天数

  • MongoDB模糊查询操作案例详解(类关系型数据库的 like 和 not like)

    1.作用与语法描述 作用: 正则表达式是使用指定字符串来描述.匹配一系列符合某个句法规则的字符串.许多程序设计语言都支持利用正则表达式进行字符串操作.MongoDB 使用 $regex 操作符来设置匹配字符串的正则表达式. 语法一 { <field>: { $regex: /pattern/, $options: '<options>' } } { <field>: { $regex: 'pattern', $options: '<options>' } }

  • Java基础之枚举Enum类案例详解

    一.文章序言 Java中引用类型:数组.类.接口.枚举.注解 枚举这个既熟悉又陌生的东西具体再哪里可以使用呢? 什么是枚举? 枚举是一个引用类型,枚举就是一个规定了取值范围的变量类型. 枚举变量不能使用其他的数据,只能使用枚举中常量赋值.提高程序安全性: //格式: public enum 枚举名{ //枚举的取值范围 //枚举中可以生命方法 } 枚举的使用场景介绍? 1.最常见的情况如星期,相关变量我们会在Java里面重复使用,在这里我们就可以来定义一个叫做"星期"的枚举. publ

  • Java dom4j生成与解析XML案例详解

    一)dom4j介绍 使用方式:在pom.xml中导入dom4j对应的jar <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> 优点:dom4j使Java生成和解析XML灵活性变高,并且代码易于维护 API操作类: Document:表示xml文档信

随机推荐