SpringBoot + JPA的自學之路(三)多表連線查詢
上一節分享了一下JPA的基本操作,但是有時候這些基本操作並不能滿足業務的需求,用慣了Mybatis的我覺得多表查詢也是挺容易的一件事情,不用修改實體,自己寫sql非常的靈活也非常的方便,但是在JPA中要實現多表查詢就稍微麻煩一點,需要對實體進行修改,加上一些註解表示與其他實體的關聯關係(一對一、一對多、多對一,多對多),下面我們就通過例子來講解一下。
現在我們假設有這樣的一個需求:查詢一個使用者列表,列表的資訊有使用者的id、姓名等以及部門id和部門名稱,顯然之前的基本操作無法滿足我們現在的需求,一個型別的Repository只能返回對應型別的實體(我也覺得這樣才是合理的),現在我們不光需要查詢使用者表還有通過使用者表的部門id查詢對應的部門資訊,接下來說一下其中的一種解決方案。
有一種解決方案就是使用實體關聯的方式來實現連線查詢
修改之後的UserModel.java
package priv.cwr.model;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.*;
@EqualsAndHashCode(callSuper = true)
@Entity
@Table(name = "t_user")
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
public class UserModel extends BaseModel {
/**
* 使用者id
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long userId;
/**
* 使用者姓名
*/
private String name;
/**
* 性別,1:男,2:女
*/
private Integer gender;
/**
* 使用者電話
*/
private String phone;
/**
* 備註
*/
private String note;
/**
* 部門實體
*/
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "dept_id")
private DeptModel dept;
// /**
// * 部門id
// */
// @Column(name = "dept_id")
// private Long deptId;
}
現在將之前的dept_id欄位註釋掉,改為實體關聯,因為這裡是使用者和部門的多對一關聯,所以使用@ManyToOne,@JoinColumn則表示的是關聯的欄位,這裡可以理解為外來鍵。
特別提醒:如果使用者對應的部門id為null則查詢出的部門實體也為null,如果通過部門id找不到對應的部門,則整個使用者也會返回null。
查詢結果如下
存在dept_id對應的部門
dept_id為空
查詢使用者列表(Pageable分頁)
現在已經初步達到了我們的要求,連線查詢出了使用者資訊以及對應的部門資訊,但是現在的問題是這樣查詢出來的實體都是所有的欄位,也許很多時候我們只需要其中的幾個欄位,就比如說這裡我們只需要部門的id和名稱,如果說部門表有幾十個甚至上百個欄位,毫無疑問這樣做是非常浪費時間以及資源的,所以這個時候我們可能會需要自定義一個滿足需求的物件即可,下一節會分享一下如何將查詢結果對映到自定義的物件中。
相關文章
- JPA的多表複雜查詢
- MYSQL學習筆記23: 多表查詢(自連線內連線+左右外連線)MySql筆記
- JPA多表關聯查詢
- JPA 之 多表聯合查詢
- jpa動態查詢與多表聯合查詢
- 【學習】SQL基礎-006-多表連線查詢SQL
- JPA 連表查詢
- Spring Data JPA 實現多表關聯查詢Spring
- SpringBoot Jpa多條件查詢Spring Boot
- Spring Data Jpa 的簡單查詢多表查詢HQL,SQL ,動態查詢, QueryDsl ,自定義查詢筆記SpringSQL筆記
- sql 連線查詢例項(left join)三表連線查詢SQL
- 暑期自學 Day 13 | 資料庫 (六)- 多表查詢資料庫
- 多表查詢
- 【SpringBoot】SpringBoot + MyBatis 連線 MySQL 並完成簡單查詢的流程Spring BootMyBatisMySql
- OceanBase學習之路4|SpringBoot 連線示例Spring Boot
- SQL查詢的:子查詢和多表查詢SQL
- Mybatis連線池_動態sql語句_多表查詢實現MyBatisSQL
- MySQL學習-連線查詢MySql
- MySql中的資料查詢語言(DQL)三:連線查詢MySql
- MySQL筆記-左連線的使用(left join有關聯的多表查詢)MySql筆記
- MYSQL學習筆記26: 多表查詢|子查詢MySql筆記
- 【MySQL】多表查詢MySql
- mysql多表查詢MySql
- 04多表查詢
- MySQL 多表查詢MySql
- 連線查詢
- MYSQL學習筆記25: 多表查詢(子查詢)[標量子查詢,列子查詢]MySql筆記
- MySQL講義第27講——select 查詢之自連線查詢MySql
- SQL面試題 三(單表、多表查詢)SQL面試題
- 3.DQL資料查詢語言(內連線,外連線,自連線)
- Oracle-多表查詢Oracle
- ORM多表查詢下ORM
- oracle 連線查詢Oracle
- SQL連線查詢SQL
- SpringBoot JPA查詢對映到自定義實體類Spring Boot
- Spring Data Jpa 複雜查詢總結 (多表關聯 以及 自定義分頁 )Spring
- spring data jpa查詢Spring
- MySQL之連線查詢和子查詢MySql