java jpa如何自定義sql語句
java jpa自定義sql語句
本篇隻是為瞭再次記錄自己又學習瞭jpa的使用,框架原生的通過解析方法名多適用於單表操作,自定義的sql查詢則可以解決所有問題,記錄些自定義sql語法的記錄,以便後續參照。
1.多表關聯查詢,含條件
@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對方法進行註解,才能使得ORM知道現在要執行的是寫操作。
3.模糊查詢
@Query("select p from WhpzxryzsXxPo p where p.ryxm like concat('%',?1,'%') and p.cyyxqq >= ?2")
4.查詢結果為VO
含兩個實體類
@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註解註入參數
分頁查詢
@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中的表名換成瞭對應的實體類名,接收參數適用 ?加上第幾個參數的幾。當然也可使用@Param註解註入參數,就變成瞭使用 :參數 名稱接收。
jpa自定義sql查詢結果
很多時候都會遇到自定義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
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 使用JPA自定義SQL查詢結果
- Java jpa外連接查詢join案例詳解
- SpringData JPA的常用語法匯總
- spring data jpa @Query註解中delete語句報錯的解決
- SpringDataJpa的@Query註解報錯的解決