java?jpa如何自定義sql語句
java jpa自定義sql語句
本篇只是為了再次記錄自己又學(xué)習(xí)了jpa的使用,框架原生的通過解析方法名多適用于單表操作,自定義的sql查詢則可以解決所有問題,記錄些自定義sql語法的記錄,以便后續(xù)參照。
1.多表關(guān)聯(lián)查詢,含條件
@Query(value = "SELECT b FROM QyVideo a JOIN YjQyXx b ON a.qyId = b.id AND a.cameraId = ?1 ")
2.清空表
@Transactional @Modifying @Query(value = "truncate table yj_qy_xx", nativeQuery = true)
注:update、truncate或delete時必須使用@Modifying和@Transactional對方法進(jìn)行注解,才能使得ORM知道現(xiàn)在要執(zhí)行的是寫操作。
3.模糊查詢
@Query("select p from WhpzxryzsXxPo p where p.ryxm like concat('%',?1,'%') and p.cyyxqq >= ?2")
4.查詢結(jié)果為VO
含兩個實(shí)體類
@Query(value = "SELECT new com.kun.aqsczt.vo.FxjzfbVo(u, seventinfo) FROM SSmsInfo u left join SEventInfo seventinfo on u.referId = seventinfo.eventId WHERE (:referType IS NULL OR :referType IS '' OR u.referType = :referType) AND (:isSend IS NULL OR :isSend IS '' OR u.isSend = :isSend) ")
5.使用@Param注解注入?yún)?shù)
分頁查詢
@Query(value = "SELECT a FROM CEiWorkaccMaybe a " + "WHERE (:psnName IS NULL OR :psnName IS '' OR a.psnName LIKE %:psnName%) " + "AND (:commName IS NULL OR :commName IS '' OR a.commName LIKE %:commName%) " + "AND (:idCard IS NULL OR :idCard IS '' OR a.idCard LIKE %:idCard%) " + "AND (:doctorDateStart IS NULL OR :doctorDateStart IS '' OR a.doctorDate >= :doctorDateStart) " + "AND (:doctorDateEnd IS NULL OR :doctorDateEnd IS '' OR a.doctorDate <= :doctorDateEnd) " ) Page<CEiWorkaccMaybe> getSuspectedWorkAccidentVerification( @Param("psnName") String psnName, @Param("commName") String commName, @Param("idCard") String idCard, @Param("doctorDateStart") String doctorDateStart, @Param("doctorDateEnd") String doctorDateEnd, Pageable pageable );
無非是把日常的sql中的表名換成了對應(yīng)的實(shí)體類名,接收參數(shù)適用 ?加上第幾個參數(shù)的幾。當(dāng)然也可使用@Param注解注入?yún)?shù),就變成了使用 :參數(shù) 名稱接收。
jpa自定義sql查詢結(jié)果
很多時候都會遇到自定義sql,自定義返回字段,而不是pojo類。這個情況要通過接口定義返回。
直接上代碼
@Query(value = "select m.field AS field,COUNT(m.field) AS size from MigrationObject m where m.xmlName = ?1 and m.groupName = ?2 group by m.field") List<WorkCenter> getKey(String xmlName, String groupName);
對于這種情況,只返回了兩個字段,就需要定義一個接口來接收(注意AS別名的配置)
public interface WorkCenter { String getField(); String getSize(); }
最后跑一下demo代碼
List<WorkCenter> list = migrationObjectRepository.getKey("EN_Work centerResource.xml","Key"); for (WorkCenter workCenter:list){ System.out.println(workCenter.getField()); System.out.println(workCenter.getSize()); }
ARBPL
5
SPRAS
2
CANUM
2
ENDDA
1
WERKS
5
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Cache自定義緩存key和過期時間的實(shí)現(xiàn)代碼
使用 Redis的客戶端 Spring Cache時,會發(fā)現(xiàn)生成 key中會多出一個冒號,而且有一個空節(jié)點(diǎn)的存在,查看源碼可知,這是因為 Spring Cache默認(rèn)生成key的策略就是通過兩個冒號來拼接,本文給大家介紹了Spring Cache自定義緩存key和過期時間的實(shí)現(xiàn),需要的朋友可以參考下2024-05-05Spring在多線程下保持事務(wù)的一致性的方法實(shí)現(xiàn)
當(dāng)Spring在多線程環(huán)境下運(yùn)行時,確保事務(wù)一致性是非常重要的,本文主要介紹了Spring在多線程下保持事務(wù)的一致性的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01JAVA實(shí)現(xiàn)異步調(diào)用實(shí)例代碼
在java平臺,實(shí)現(xiàn)異步調(diào)用的角色主要三種角色:調(diào)用者、取貨憑證、真實(shí)數(shù)據(jù)。本篇文章給大家介紹java實(shí)現(xiàn)異步調(diào)用實(shí)例代碼,需要的朋友可以參考下2015-09-09解決lambda表達(dá)式內(nèi)出現(xiàn)異常無法throw拋出的問題
這篇文章主要介紹了lambda表達(dá)式內(nèi)出現(xiàn)異常無法throw拋出的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09Java Idea TranslationPlugin翻譯插件使用解析
這篇文章主要介紹了Java Idea TranslationPlugin翻譯插件使用解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04HttpUtils 發(fā)送http請求工具類(實(shí)例講解)
下面小編就為大家?guī)硪黄狧ttpUtils 發(fā)送http請求工具類(實(shí)例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07