SpringBoot JPA 表關聯查詢
今天給大家介紹一下如何利用JPA實現表關聯查詢。
今天給大家舉一個一對多的關聯查詢,並且是使用JPA原生的findBy語句實現的。
想學習分散式、微服務、JVM、多執行緒、架構、java、python的童鞋,千萬不要掃碼,否則後果自負~
例子中總共有兩個實體類,一個是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+查詢的欄位。
千萬不要寫錯了,寫錯的話執行都執行不起來的。所以寫的時候要多看看是否符合規則。
如果大家對文章有什麼問題或者疑意之類的,可以加我訂閱號在上面留言,訂閱號上面我會定期更新最新部落格。如果嫌麻煩可以直接加我wechat:lzqcode
相關文章
- JPA多表關聯查詢
- Spring JPA 聯表查詢Spring
- Spring Data JPA 實現聯表查詢Spring
- JPA 連表查詢
- spring data jpa 多對一聯表查詢Spring
- Mongodb 關聯表查詢MongoDB
- Spring Data JPA 實現多表關聯查詢Spring
- JPA 之 多表聯合查詢
- jpa動態查詢與多表聯合查詢
- mysql 三表關聯查詢MySql
- mysql三表關聯查詢MySql
- SpringBoot Jpa多條件查詢Spring Boot
- mysql三張表關聯查詢MySql
- SQL三表左關聯查詢SQL
- 兩表關聯查詢:sql、mybatisSQLMyBatis
- MYSQL A、B表陣列關聯查詢MySql陣列
- mysql三表關聯查詢練習MySql
- 三表關聯查詢-多次LEFT JOIN...ON
- 區分關聯子查詢和非關聯子查詢
- exist-in和關聯子查詢-非關聯子查詢
- flink維表關聯絡列之Redis維表關聯:實時查詢Redis
- MyBatis關聯查詢MyBatis
- thinkphp關聯查詢PHP
- jpa 聯合查詢資料,查詢使用者資訊與部門資訊
- spring data jpa關聯查詢(一對一、一對多、多對多)Spring
- SpringBoot + JPA的自學之路(三)多表連線查詢Spring Boot
- Spring JPA聯表情況下的複雜查詢Spring
- MySQL多表關聯查詢MySql
- Spring Data Jpa 複雜查詢總結 (多表關聯 以及 自定義分頁 )Spring
- SQL 三表聯合查詢SQL
- 按月分表聯合查詢
- 關聯查詢子查詢效率簡單比照
- SpringBoot JPA查詢對映到自定義實體類Spring Boot
- jpa一對多查詢
- JPA時間段查詢
- spring data jpa查詢Spring
- mysql關聯查詢優化MySql優化
- 關聯子查詢 Correlated Subqueries