jpa關聯查詢

2021-10-02 03:02:34 字數 2853 閱讀 2126

栗子1:

以乙個實體類user中的幾個屬性進行篩選。

1. 名字

2. id

3. 手機號

這是乙個單錶的多條件複雜查詢,由於是在幾個屬性中進行篩選,其中的屬性的個數不知道有多少個,所以只需要利用specification 查詢就可以很方便的實現這個需求。 下面請看**:

場景:頁面上通過條件篩選,查詢使用者列表

這裡有3個條件 在頁面上我設定的id分別為searchname,searchid,searchmobile。 由於這個是user表 所以userrepository 繼承jpaspecificationexecutor介面,隨後我建立了乙個封裝條件的類

public class pageparam
由於我這個方法是直接分頁的 所以pagenumber 和pagesize 也可以直接寫入到這個類中,用於方便接收引數,主要是對下面3個引數的封裝

specificationspecification = new specification() 

if (stringutils.isnotblank(searchid))

if (stringutils.isnotblank(searchmobile))

predicate p = new predicate[list.size()];

return cb.and(list.toarray(p));

};};

這裡因為都是乙個表,所以只要root.get(『n 『)這個n對應所要查的 屬性的名字就好,屬性名 屬性名 重要的事情說三遍。

再接下來看一組多表的查詢

栗子2:

這裡有4張表

public class living 

public class actor , fetch = fetchtype.lazy)

@joincolumn(name = "actorid")

@org.hibernate.annotations.foreignkey(name = "none")

listlivings = new arraylist<>();

@onetoone(cascade = , fetch = fetchtype.lazy)

@org.hibernate.annotations.foreignkey(name = "none")

@joincolumn(name = "userdetailid", foreignkey = @foreignkey(name = "none", value = constraintmode.no_constraint))

userdetail userdetail;

@column(nullable = false)

@enumerated(value = enumtype.ordinal)

actortype actortype = actortype.a;

public enum actortype

}

public class userdetail , fetch = fetchtype.lazy)

@org.hibernate.annotations.foreignkey(name = "none")

@joincolumn(name = "actorid", foreignkey = @foreignkey(name = "none", value = constraintmode.no_constraint))

actor actor;

string truename;

}

public class region , fetch = fetchtype.lazy)

@joincolumn(name = "regionid")

@org.hibernate.annotations.foreignkey(name = "none")

listlivings;

}

現在要根據userdetai 種的 *** actor中的actortype 還有 region的id 為條件查詢出滿足條件的living。

public class pageparam

if (null!=actortype)

if (null!=cityid)

//joinjoin = root.join("bs", jointype.left);

"c").get("id"), id));

predicate p = new predicate[list.size()];

return cb.and(list.toarray(p));

};};

這裡是我對條件進行的封裝。jpa 的多條件查詢 主要是根據criteria 為我們提供的方法封裝條件,然後根據 給條件定義的位置,再生成sql語句,之後完成查詢。

不得不說的地方,在這個多表的查詢中以下面這句為例

joinjoin = root.join("actor", jointype.left);

list.add(cb.equal(join.get("userdetail").get("***"), *** ));

jointype.left主要是說最終的這個屬性 是在哪個表中, 而前面的 「actor」 則表示 從living表中 查詢的 第一步的查詢,比如我給出的例子 是要查詢出 living 中的 actor 然後是actor 中的userdetail 之後才是 userdetail中的 ***屬性 所以下面的join.get(「userdetail」).get(「***」) ,這裡就是get出相應的屬性,一直到你得到想要的屬性為止。 接下來的兩個屬性 也同理,

JPA多表關聯查詢

作用 就是實現使用乙個實體類物件操作或者查詢多個表的資料。回顧 配置多表聯絡查詢必須有兩個步驟 1.在實體類裡面建立表與表之間的關係。2.配置關聯關係,jpa使用註解配置 需求 指定oid查詢客戶的資訊 公司資訊 同時也查詢關聯的聯絡人資訊 配置步驟 通過客戶找聯絡人,所以再customer實體類配...

jpa關聯查詢 分頁

最近在使用jpa單錶操作的時候是非常的方便,但是設計到一些多表查詢的時候就比較蛋疼了。我的需求是專案中設計到乙個分頁以及關聯查詢以及多條件查詢。query value select from org t1 where t1.id in select t2.org id from org produc...

mysql關聯查詢去重 MySQL 關聯查詢

mysql 關聯查詢 sql資料分析 1週前 mysql 關聯查詢 前面,我們介紹的都是單錶查詢 就是只從一張表中獲取資料 而實際應用的時候,我們都會同時查詢多張表,這裡,我們就介紹下,多表關聯查詢的使用。sql join 用於根據兩個或多個表中的列之間的關係,從這些表中查詢資料 前置知識 主鍵 p...