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...