您好,登錄后才能下訂單哦!
小編給大家分享一下JPA如何查詢原生SQL轉換VO對象方式,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
List<String> sqlList = RiverCourseSql.getRiverCourseSQLString(new RiverCourseDataQO()); List<RiverCourseDataVO> riverCourseDataVO = rsvrfsrBDao.executeNativeQuery2Obj(sqlList.get(0), new PageQO(), RiverCourseDataVO.class);
查詢sql,然后執行功能方法。
<E> List<E> executeNativeQuery2Obj(String sql, SortQO sortQO, Class<E> clz); public <E> List<E> executeNativeQuery2Obj(String sql, SortQO sortQO, Class<E> clz) { Query query = this.entityManager.createNativeQuery(sql); this.setAliasParameter(query, sortQO); ((NativeQueryImpl)query.unwrap(NativeQueryImpl.class)).setResultTransformer(Transformers.aliasToBean(clz)); List<E> resultList = query.getResultList(); return resultList; }
背景:DDD系統里面有復雜的聚合統計,代碼組裝數據不方便
import javax.persistence.EntityManager; import javax.persistence.Query; @Autowired private EntityManager entityManager;
這里直接用自定義VO接收,sql返回結果集必須是VO的子集,不然組裝數據會報錯,說白了就是sql查詢結果的字段必須全在vo里對應,vo可以有多余字段,但sql結果不能有多余字段
String sql = "sql"; Query nativeQuery = entityManager.createNativeQuery(sql);
給sql里動態傳參設置參數 := param ,注意in后面傳數組的話,根據版本不一樣,有的要加括號,有的不要加,直接傳數據進去就行
nativeQuery.setParameter(String var1, Object var2);
這是當前不過時的方法,將sql查詢結果轉成自定義VO
Transformers可以轉成list和vo,nativeQueryImplementor也能轉成list和vo
NativeQueryImplementor nativeQueryImplementor = nativeQuery.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(VO.class)); VO vo = new VO(); try { // 這里有個坑,如果返回結果為空的話,會報錯,要捕獲這個異常,再進一步操作 vo = (VO)nativeQueryImplementor.getSingleResult(); } catch (EntityNotFoundException e) { e.printStackTrace(); return vo ; }
目前就這些了。
以上是“JPA如何查詢原生SQL轉換VO對象方式”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。