SpringBoot JPA 表關(guān)聯(lián)查詢實例
今天給大家介紹一下如何利用JPA實現(xiàn)表關(guān)聯(lián)查詢。
今天給大家舉一個一對多的關(guān)聯(lián)查詢,并且是使用JPA原生的findBy語句實現(xiàn)的。
例子中總共有兩個實體類,一個是Floor(商品樓層類),另一個是FloorContent(商品樓層內(nèi)容表)。下面看兩張表的源代碼:
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; /** * 發(fā)布用戶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. * 樓層的內(nèi)容 */ @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; /** * 發(fā)布用戶ID */ @Column(length = 36, name = "user_id") private String userId; /** * 內(nèi)容名稱 */ private String name; /** * * 內(nèi)容圖片 */ @Column(length = 256) private String contentImageUrl; /** * 類型 * 1.超鏈接 * 2.圖片檢索 */ private Integer type; /** * 超鏈接url */ private String linkUrl; /** * 圖片檢索內(nèi)容 */ 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; } }
實體類已經(jīng)出來了,現(xiàn)在具體說說怎么利用JPA中findBy來實現(xiàn)關(guān)聯(lián)查詢:
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. * 樓層內(nèi)容管理dao類 */ public interface FloorContentRepos extends JpaRepository<FloorContent,String>{ public Page<FloorContent> findByFloor_IdAndIsDeleteOrderByShowIndexAsc(String floorId,boolean b, Pageable pageable); }
從例子中就可以看出JPA關(guān)聯(lián)查詢主要在“_”這個符號的使用,下面來給大家具體的介紹一下這個符號到底代表什么含義。
首先findBy是必須寫的,表示使用JPA規(guī)則進行查詢。
如果查詢的是本張表中的內(nèi)容,例如查詢本張表中的name字段就可以這么寫:findByName()。
如果查詢的是樓層中的name字段就可以這么寫:findByFloor_Name()。
如果是既要查詢本張表中的name字段,也要查詢樓層中的name字段,就可以這么寫:findByFloor_NameAndName()。
從上面的案例就可以看出可以在findBy后面添加要關(guān)聯(lián)的實體類,然后在實體類后面寫上“_”,"_"符號后面是添加關(guān)聯(lián)表的字段而不是本身表的字段,這點要記住。如何還想關(guān)聯(lián)更多的表可以在后面添加:And+表名字+“_”+表中要查詢的字段?;蛘咧皇窍腙P(guān)聯(lián)本身的查詢字段可以在后面添加:And+查詢的字段。
千萬不要寫錯了,寫錯的話運行都運行不起來的。所以寫的時候要多看看是否符合規(guī)則。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot3?Web編程開發(fā)的工程搭建攔截器及測試工具示例
這篇文章主要介紹了SpringBoot3?Web編程開發(fā)的工程搭建攔截器及測試工具示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08Java通過反射機制將對象封裝成JSON和JsonArray格式
這篇文章主要介紹了Java通過反射機制將對象封裝成JSON和JsonArray格式,JAVA反射機制是在運行狀態(tài)中,對于任意一個實體類,都能夠知道這個類的所有屬性和方法,需要的朋友可以參考下2023-10-10Spring boot配置多數(shù)據(jù)源代碼實例
這篇文章主要介紹了Spring boot配置多數(shù)據(jù)源代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-07-07淺談Hibernate對象狀態(tài)之間的神奇轉(zhuǎn)換
這篇文章主要介紹了淺談Hibernate對象狀態(tài)之間的神奇轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09jvm細節(jié)探索之synchronized及實現(xiàn)問題分析
這篇文章主要介紹了jvm細節(jié)探索之synchronized及實現(xiàn)問題分析,涉及synchronized的字節(jié)碼表示,JVM中鎖的優(yōu)化,對象頭的介紹等相關(guān)內(nèi)容,具有一定借鑒價值,需要的朋友可以參考下。2017-11-11Java安全之Filter權(quán)限繞過的實現(xiàn)
在一些需要挖掘一些無條件RCE中,大部分類似于一些系統(tǒng)大部分地方都做了權(quán)限控制的,而這時候想要利用權(quán)限繞過就顯得格外重要,本文就介紹了如何實現(xiàn),一起來了解一下2021-05-05