SpringBoot JPA 表关联查询实例

 更新时间:2017年04月08日 14:33:18   作者:漫步于成神之路男人   我要评论
本篇文章主要介绍了SpringBoot JPA 表关联查询实例,使用JPA原生的findBy语句实现,具有一定的参考价值,有兴趣的可以了解一下。

今天给大家介绍一下如何利用JPA实现表关联查询。

今天给大家举一个一对多的关联查询,并且是使用JPA原生的findBy语句实现的。

例子中总共有两个实体类,一个是Floor(商品楼层类),另一个是FloorContent(商品楼层内容表)。下面看两张表的源代码:

Floor类:

package cms.model; 
import cms.model.base.BaseDomain; 
import org.hibernate.annotations.GenericGenerator; 
import javax.persistence.*; 
import java.io.Serializable; 
import java.util.List; 
/** 
 * Created by Roney on 2016/10/10. 
 * 楼层管理 
 * 
 */ 
@Entity 
@Table(indexes = {@Index(name = "idx_floor_user",columnList = "user_id")}) 
public class Floor extends BaseDomain implements Serializable { 
  @Id 
  @GenericGenerator(name = "PKUUID", strategy = "uuid2") 
  @GeneratedValue(generator = "PKUUID") 
  @Column(length = 36) 
  protected String id; 
  /** 
   * 发布用户ID 
   */ 
  @Column(length = 36,name = "user_id") 
  private String userId; 
  /** 
   * 楼层名称 
   */ 
  private String name; 
  /** 
   * 楼层的模板路径 
   */ 
  private String templateUrl; 
  /** 
   * 类型 
   * 1.管理端 
   * 2.供应商 
   */ 
  private Integer type; 
 
  /** 
   * 排序 
   */ 
  @Column(name = "show_index", nullable = false) 
  private Integer showIndex; 
  /** 
   * 是否禁用 
   * */ 
 
  @Column(nullable = false) 
  private Boolean isDisable=false; 
  @OneToMany(fetch = FetchType.LAZY,mappedBy = "floor") 
  private List<FloorContent> floorContents; 
  public List<FloorContent> getFloorContents() { 
    return floorContents; 
  } 
  public void setFloorContents(List<FloorContent> floorContents) { 
    this.floorContents = floorContents; 
  } 
  public String getId() { 
    return id; 
  } 
  public void setId(String id) { 
    this.id = id; 
  } 
  public String getUserId() { 
    return userId; 
  } 
  public void setUserId(String userId) { 
    this.userId = userId; 
  } 
  public String getName() { 
    return name; 
  } 
  public void setName(String name) { 
    this.name = name; 
  } 
  public String getTemplateUrl() { 
    return templateUrl; 
  } 
  public void setTemplateUrl(String templateUrl) { 
    this.templateUrl = templateUrl; 
  } 
  public Integer getShowIndex() { 
    return showIndex; 
  } 
  public void setShowIndex(Integer showIndex) { 
    this.showIndex = showIndex; 
  } 
  public Boolean getDisable() { 
    return isDisable; 
  } 
  public void setDisable(Boolean disable) { 
    isDisable = disable; 
  } 
  @Override 
  public boolean equals(Object o) { 
    if (this == o) return true; 
    if (o == null || getClass() != o.getClass()) return false; 
    Floor floor = (Floor) o; 
    return id != null ? id.equals(floor.id) : floor.id == null; 
  } 
  @Override 
  public int hashCode() { 
    return id != null ? id.hashCode() : 0; 
  } 
} 

FloorContent类:

package cms.model; 
import cms.model.base.BaseDomain; 
import org.hibernate.annotations.GenericGenerator; 
import javax.persistence.*; 
import java.io.Serializable; 
/** 
 * Created by Roney on 2016/10/10. 
 * 楼层的内容 
 */ 
@Entity 
@Table(indexes = {@Index(name = "idx_floor_content_user", columnList = "user_id")}) 
public class FloorContent extends BaseDomain implements Serializable { 
  @Id 
  @GenericGenerator(name = "PKUUID", strategy = "uuid2") 
  @GeneratedValue(generator = "PKUUID") 
  @Column(length = 36) 
  protected String id; 
  /** 
   * 发布用户ID 
   */ 
  @Column(length = 36, name = "user_id") 
  private String userId; 
  /** 
   * 內容名稱 
   */ 
  private String name; 
  /** 
   * 
   * 內容圖片 
   */ 
  @Column(length = 256) 
  private String contentImageUrl; 
  /** 
   * 類型 
   * 1.超鏈接 
   * 2.圖片檢索 
   */ 
  private Integer type; 
  /** 
   * 超鏈接url 
   */ 
  private String linkUrl; 
  /** 
   * 圖片檢索內容 
   */ 
  private String picSearchContent; 
  /** 
   * 排序 
   */ 
  @Column(name = "show_index", nullable = false) 
  private Integer showIndex; 
  /** 
   * 是否禁用 
   */ 
  @Column(nullable = false) 
  private Boolean isDisable = false; 
  @ManyToOne 
  @JoinColumn(name = "floor_id",foreignKey = @ForeignKey(name = "fk_floor_fc")) 
  private Floor floor; 
  public Floor getFloor() { 
    return floor; 
  } 
  public void setFloor(Floor floor) { 
    this.floor = floor; 
  } 
  public String getId() { 
    return id; 
  } 
  public void setId(String id) { 
    this.id = id; 
  } 
  public String getUserId() { 
    return userId; 
  } 
  public void setUserId(String userId) { 
    this.userId = userId; 
  } 
  public String getName() { 
    return name; 
  } 
  public void setName(String name) { 
    this.name = name; 
  } 
  public String getContentImageUrl() { 
    return contentImageUrl; 
  } 
  public void setContentImageUrl(String contentImageUrl) { 
    this.contentImageUrl = contentImageUrl; 
  } 
  public Integer getType() { 
    return type; 
  } 
  public void setType(Integer type) { 
    this.type = type; 
  } 
  public String getLinkUrl() { 
    return linkUrl; 
  } 
  public void setLinkUrl(String linkUrl) { 
    this.linkUrl = linkUrl; 
  } 
  public String getPicSearchContent() { 
    return picSearchContent; 
  } 
  public void setPicSearchContent(String picSearchContent) { 
    this.picSearchContent = picSearchContent; 
  } 
  public Integer getShowIndex() { 
    return showIndex; 
  } 
  public void setShowIndex(Integer showIndex) { 
    this.showIndex = showIndex; 
  } 
  public Boolean getDisable() { 
    return isDisable; 
  } 
  public void setDisable(Boolean disable) { 
    isDisable = disable; 
  } 
  @Override 
  public boolean equals(Object o) { 
    if (this == o) return true; 
    if (o == null || getClass() != o.getClass()) return false; 
    FloorContent that = (FloorContent) o; 
    return id != null ? id.equals(that.id) : that.id == null; 
  } 
  @Override 
  public int hashCode() { 
    return id != null ? id.hashCode() : 0; 
  } 
} 

实体类已经出来了,现在具体说说怎么利用JPA中findBy来实现关联查询:

package cms.model.repository; 
import cms.model.Floor; 
import cms.model.FloorContent; 
import org.springframework.data.domain.Page; 
import org.springframework.data.domain.Pageable; 
import org.springframework.data.jpa.repository.JpaRepository; 
/** 
 * Created by Roney on 2016/10/10. 
 * Created by Roney on 2016/10/10. 
 * 楼层内容管理dao类 
 */ 
public interface FloorContentRepos extends JpaRepository<FloorContent,String>{ 
  public Page<FloorContent> findByFloor_IdAndIsDeleteOrderByShowIndexAsc(String floorId,boolean b, Pageable pageable); 
} 

从例子中就可以看出JPA关联查询主要在“_”这个符号的使用,下面来给大家具体的介绍一下这个符号到底代表什么含义。

首先findBy是必须写的,表示使用JPA规则进行查询。

如果查询的是本张表中的内容,例如查询本张表中的name字段就可以这么写:findByName()。

如果查询的是楼层中的name字段就可以这么写:findByFloor_Name()。

如果是既要查询本张表中的name字段,也要查询楼层中的name字段,就可以这么写:findByFloor_NameAndName()。

从上面的案例就可以看出可以在findBy后面添加要关联的实体类,然后在实体类后面写上“_”,"_"符号后面是添加关联表的字段而不是本身表的字段,这点要记住。如何还想关联更多的表可以在后面添加:And+表名字+“_”+表中要查询的字段。或者只是想关联本身的查询字段可以在后面添加:And+查询的字段。

千万不要写错了,写错的话运行都运行不起来的。所以写的时候要多看看是否符合规则。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持澳门金沙网上娱乐。

相关文章

  • 详解Java编程中对线程的中断处理

    详解Java编程中对线程的中断处理

    这篇文章主要介绍了Java编程中对线程的中断处理,特别讲解了中断的时机与中断状态的管理,需要的朋友可以参考下
    2015-11-11
  • 浅谈Java中生产者与消费者问题的演变

    浅谈Java中生产者与消费者问题的演变

    这篇文章主要介绍了浅谈Java中生产者与消费者问题的演变,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • servlet过滤器(Filter)详解(九)

    servlet过滤器(Filter)详解(九)

    这篇文章主要为大家详细介绍了servlet过滤器Filter的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • zookeeper节点类型详解

    zookeeper节点类型详解

    今天小编就为大家分享一篇关于zookeeper节点类型详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Java并发编程之创建线程

    Java并发编程之创建线程

    这篇文章主要介绍了Java并发编程中创建线程的方法,Java中如何创建线程,让线程去执行一个子任务,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • java读取大文件简单实例

    java读取大文件简单实例

    这篇文章主要介绍了java读取大文件简单实例,有需要的朋友可以参考一下
    2013-12-12
  • java对象初始化代码详解

    java对象初始化代码详解

    这篇文章主要介绍了java对象初始化代码详解,涉及实例变量的初始化,类变量的初始化等相关介绍几代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • SpringBoot项目没有把依赖的jar包一起打包的问题解决

    SpringBoot项目没有把依赖的jar包一起打包的问题解决

    这篇文章主要介绍了SpringBoot项目没有把依赖的jar包一起打包的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • java对图片进行压缩和resize缩放的方法

    java对图片进行压缩和resize缩放的方法

    本篇文章主要介绍了java对图片进行压缩和resize调整的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Jenkins的安装配置详解

    Jenkins的安装配置详解

    这篇文章主要介绍了Jenkins的安装配置详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06

最新评论