Spring Data Jpa的複雜查詢

2021-10-01 09:08:09 字數 3798 閱讀 1947

springjpa的複雜查詢

借助介面中定義好的方法完成查詢

/*

* 統計查詢:查詢客戶的總數量

* */

@test

public

void

testcount()

/* * 判斷id為4的客戶是否存在

* */

@test

public

void

testexists()

/* * 根據id從資料庫中查詢

* @transactional:保證getone的正常執行

* findone:立即載入

* getone:延遲載入,底層是getreference

* */

@test

@transactional

public

void

testgetone()

jpql查詢方式

需要將jpql語句配置到介面方法上

特有的查詢,需要在dao介面上配置方法

在新新增的方法上,使用註解的形式配置jpql查詢語句

註解:@query

根據客戶名查詢客戶

public

inte***ce

customerdao

extends

jparepository

, jpaspecificationexecutor

@runwith

(springjunit4classrunner.

class

)//宣告spring提供的單元測試環境

@contextconfiguration

(locations =

)//指定spring容器的配置資訊

public

class

jpqltest

}

根據客戶名和客戶id查詢客戶

/*

* 根據客戶名和客戶id查詢客戶

* 對於多個佔位符,預設情況下,佔位符位置和引數的位置保持一致

* 可以指定佔位符引數的位置

* ? 索引:指定此佔位符的取值**,例如?2:就是從方法引數中取第二個引數

* */

/* * 根據客戶名和客戶id查詢客戶

* */

@query

(value =

"from customer where name = ? and id = ?"

)customer findcusbynameandid

(string custname,integer id)

;

@test

public

void

testfindcusbynameandid()

根據id更新客戶名

/*

* 根據客戶id更新客戶名

* @query:代表的是進行查詢

* @modifying:宣告此方法是用來進行更新的

* */

@query

(value =

"update customer set name = ?2 where id = ?1"

)@modifying

void

updcusbyid

(integer id,string custname)

;

/*

* 修改、刪除需要新增事務支援,否則會報錯

* 新增了事務的支援,預設執行之後會回滾事務,使用@rollback設定不自動回滾

* */

@test

@transactional

@rollback

(value =

false

)public

void

testupdcusbyid()

sql語句的查詢

需要將sql語句配置到介面方法上

特有的查詢,需要在dao介面上配置方法

在新新增的方法上,使用註解的形式配置sql查詢語句

註解:@query

屬性:nativequery:是否使用本地查詢,true(使用本地查詢,就是sql查詢),false(不使用,預設值,也就是jpql查詢)

查詢全部客戶

/*

* 查詢全部客戶

* nativequery:true sql查詢 | false:jpql查詢

* */

@query

(value =

"select * from customer"

,nativequery =

true

)list]>

findsql()

;

@test

public

void

testfindsql()

}

客戶名模糊查詢

/*

* 客戶名模糊查詢

* */

@query

(value =

"select * from customer where name like ?"

,nativequery =

true

)list]>

findbylike

(string name)

;

@test

public

void

testfindbylike()

}

方法名稱規則查詢

是對jpql查詢更加深入的一層封裝,我們只需要按照springdatajpa提供的方法名稱規則定義方法,不需要再去配置jpql語句,完成查詢

根據客戶名查詢客戶

/*

* 方法名的約定:

* findby:查詢

* 物件中屬性的名稱(首字母大寫),查詢的條件

* */

customer findbyname

(string custname)

;

//測試方法命名查詢

@test

public

void

testfindby()

模糊查詢

/*

* 模糊查詢

* */

customer findbynamelike

(string custname)

;

//測試模糊查詢

@test

public

void

testfindbynamelike()

多條件查詢

//多條件查詢

customer findbynamelikeandid

(string custname,integer id)

;

//測試多條件查詢

@test

public

void

testfindbynamelikeandid()

spring data jpa遇到的坑

1 column註解name最好全寫了,不然遇到像hibernate駝峰和下劃線風格配置變更時會出現找不到屬性,尤其開啟自動建表情況 2 唯讀操作情況,如果對讀取物件進行了屬性修改操作,那麼jpa會認為你要修改這個實體,使用hibernate的情況下回預設執行乙個update的sql,然後你懂得由於...

spring Data Jpa的分頁管理

通過jpa大大簡化了我們對資料庫的開發工作。但是,之前的例子中我們只提到了最簡單的crud 增刪改查 操作。實際上,spring data jpa對於分頁以及排序的查詢也有著完美的支援,接下來,我們來學習如何通過pageable來對資料庫進行分頁查詢。一 pageable 是spring data庫...

SpringData Jpa中count的使用

通常,我們會有統計數量的需求,jpa對一些簡單統計數量的需求通過方法名就可以解析。然而對於稍微複雜的需求則無法通過方法名解析。對於這種需求,還是需要寫sql實現。當我的repository介面繼承jparepository時,缺省會繼承它的乙個count 方法 crudrepository介面中有c...