JPA?查詢?cè)鶶QL轉(zhuǎn)換VO對(duì)象方式
JPA查詢?cè)鶶QL轉(zhuǎn)換VO對(duì)象
List<String> sqlList = RiverCourseSql.getRiverCourseSQLString(new RiverCourseDataQO()); List<RiverCourseDataVO> riverCourseDataVO = rsvrfsrBDao.executeNativeQuery2Obj(sqlList.get(0), new PageQO(), RiverCourseDataVO.class);
查詢sql,然后執(zhí)行功能方法。
<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; }
JPA非注解方式原生sql查詢的一些注意事項(xiàng)
背景:DDD系統(tǒng)里面有復(fù)雜的聚合統(tǒng)計(jì),代碼組裝數(shù)據(jù)不方便
import javax.persistence.EntityManager; import javax.persistence.Query; @Autowired private EntityManager entityManager;
這里直接用自定義VO接收,sql返回結(jié)果集必須是VO的子集,不然組裝數(shù)據(jù)會(huì)報(bào)錯(cuò),說(shuō)白了就是sql查詢結(jié)果的字段必須全在vo里對(duì)應(yīng),vo可以有多余字段,但sql結(jié)果不能有多余字段
String sql = "sql"; Query nativeQuery = entityManager.createNativeQuery(sql);
給sql里動(dòng)態(tài)傳參設(shè)置參數(shù) := param ,注意in后面?zhèn)鲾?shù)組的話,根據(jù)版本不一樣,有的要加括號(hào),有的不要加,直接傳數(shù)據(jù)進(jìn)去就行
nativeQuery.setParameter(String var1, Object var2);
這是當(dāng)前不過(guò)時(shí)的方法,將sql查詢結(jié)果轉(zhuǎn)成自定義VO
Transformers可以轉(zhuǎn)成list和vo,nativeQueryImplementor也能轉(zhuǎn)成list和vo
NativeQueryImplementor nativeQueryImplementor = nativeQuery.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(VO.class)); VO vo = new VO(); try { // 這里有個(gè)坑,如果返回結(jié)果為空的話,會(huì)報(bào)錯(cuò),要捕獲這個(gè)異常,再進(jìn)一步操作 vo = (VO)nativeQueryImplementor.getSingleResult(); } catch (EntityNotFoundException e) { e.printStackTrace(); return vo ; }
目前就這些了。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis中自定義TypeHandler處理枚舉的示例代碼
typeHandler,是 MyBatis 中的一個(gè)接口,用于處理數(shù)據(jù)庫(kù)中的特定數(shù)據(jù)類型,下面簡(jiǎn)單介紹創(chuàng)建自定義 typeHandler 來(lái)處理枚舉類型的示例,感興趣的朋友跟隨小編一起看看吧2024-01-01Java圖像之自定義角度旋轉(zhuǎn)(實(shí)例)
這篇文章主要介紹了Java圖像之自定義角度旋轉(zhuǎn)(實(shí)例),需要的朋友可以參考下2017-09-09Java?超詳細(xì)講解類的定義方式和對(duì)象的實(shí)例化
Java是一門純面向?qū)ο蟮恼Z(yǔ)言(Object?Oriented?Program,繼承OOP),在面對(duì)對(duì)象的世界里面,一切皆為對(duì)象。面向?qū)ο笫墙鉀Q問(wèn)題的一種思想,主要依靠對(duì)象之間的交互完成一件事情2022-03-03java GUI編程之監(jiān)聽(tīng)操作實(shí)例分析
這篇文章主要介紹了java GUI編程之監(jiān)聽(tīng)操作,結(jié)合實(shí)例形式分析了java GUI編程監(jiān)聽(tīng)操作的Button監(jiān)聽(tīng)、TextField文本輸入監(jiān)聽(tīng)等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2020-01-01Project?Reactor源碼解析publishOn使用示例
這篇文章主要為大家介紹了Project?Reactor源碼解析publishOn使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Java反射之通過(guò)反射獲取一個(gè)對(duì)象的方法信息(實(shí)例代碼)
下面小編就為大家?guī)?lái)一篇Java反射之通過(guò)反射獲取一個(gè)對(duì)象的方法信息(實(shí)例代碼)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10