日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

将原生SQL功能休眠到您的Spring Data Repository中

發(fā)布時(shí)間:2023/12/3 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将原生SQL功能休眠到您的Spring Data Repository中 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
JPA為您提供@NamedNativeQuery以便使用本機(jī)SQL。 但是,用法不是很方便,尤其是當(dāng)您需要在本機(jī)SQL中映射多個(gè)實(shí)體時(shí)。 您必須定義一組容易出錯(cuò)的SqlResultSetMapping映射。

對(duì)于以前使用過Hibernate本機(jī)SQL功能的用戶,您會(huì)發(fā)現(xiàn)它比JPA的@NamedNativeQuery更易于使用。 在最近的項(xiàng)目中,我正在使用Spring Data JPA。 我已將休眠的本機(jī)查詢功能添加到我的Spring數(shù)據(jù)庫中。 現(xiàn)在,您可以在JPA中執(zhí)行本機(jī)查詢,而無需使用SqlResultSetMapping。

1.添加您的客戶注釋@NativeQueries和@NativeQuery

@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface NativeQueries {NativeQuery[] queries() default {}; }@Retention(RetentionPolicy.RUNTIME) public @interface NativeQuery {String name() default "";String sql() default ""; }

2.在基本Spring Data Repository中添加方法“ queryNatively”。

如果您不知道如何向Spring數(shù)據(jù)JPA基礎(chǔ)存儲(chǔ)庫添加自定義行為,請(qǐng)參閱我以前的文章, 了解如何自定義Spring數(shù)據(jù)JPA基礎(chǔ)存儲(chǔ)庫 。 您可以在上一篇文章中看到,我有意在GenericRepositoryImpl中公開存儲(chǔ)庫接口(即springDataRepositoryInterface屬性)。 這些小技巧使我可以輕松地訪問存儲(chǔ)庫界面中的注釋。

public List queryNatively(String nativeQueryName, LinkedHashMap<String,Class<?>> inEntityClasses, Map inParams ){SQLQuery query = this.createHibernateNativeQuery( nativeQueryName, inParams );//add entitiesif (inEntityClasses!=null) { for (Object key: inEntityClasses.keySet()) {String entityClassAlias = key.toString();Class<?> entityClass = (Class<?>)inEntityClasses.get(key); query.addEntity(entityClassAlias,entityClass);} }//add parameterif (inParams != null){for (Object key: inParams.keySet()) {String queryParamName = key.toString();Object queryParamValue = inParams.get(key);query.setParameter(queryParamName, queryParamValue);}} return (query!=null)? query.list() : null ;}private SQLQuery createHibernateNativeQuery (String nativeQueryName, Map inParams ){if (GenericRepository.class.isAssignableFrom(getSpringDataRepositoryInterface())) {Annotation nativeQueryAnn = getSpringDataRepositoryInterface().getAnnotation(NativeQueries.class);if(nativeQueryAnn != null){NativeQueries nativeQueries = (NativeQueries)nativeQueryAnn;NativeQuery[] queries = nativeQueries.queries();for (NativeQuery sqlquery : queries) { if (StringUtils.equals(nativeQueryName, sqlquery.name())) {String sql = sqlquery.sql();Session hiernateSess = em.unwrap(Session.class);SQLQuery query = hiernateSess.createSQLQuery(sql);//add parameterif (inParams != null){for (Object key: inParams.keySet()) {String queryParamName = key.toString();Object queryParamValue = inParams.get(key);query.setParameter(queryParamName, queryParamValue);}} return query;} }}}return null;}

3.示例用法

在存儲(chǔ)庫界面中,通過@NativeQueries和@NativeQuery批注定義要使用的本機(jī)SQL查詢。 用法與調(diào)用休眠本機(jī)查詢功能相似。 您可能只看到休眠別名和屬性引用 。

@NativeQueries (queries = {@NativeQuery(name="query1", sql="SELECT {cat.*}, {mother.*} FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID and c.name = :catName "),@NativeQuery(name="query2", sql="SELECT {cat.*} FROM CATS where c.ID = :catName") } ) public interface CatRepository extends GenericRepository<Cat, Long> { }

在注入存儲(chǔ)庫的服務(wù)或業(yè)務(wù)類中,您只需簡(jiǎn)單地調(diào)用queryNatively()方法即可執(zhí)行本機(jī)SQL查詢。

@Service public class CatService {@Injectprivate CatRepository catRepository;public List<Cat> searchCat( String catName) {List<Cat> catList;// Add entity mapping for your queryHashMap<String, Object> inParams = new HashMap<String, Object>();inParams.put("catName", "Felix");// Prepare parameters for your native sqlLinkedHashMap<String, Object> entityMap = new LinkedHashMap<String, Object>();entityMap.put("cat", Cat.class);entityMap.put("mother",Mother.class);catList = catRepository.queryNatively("query1", "",entityParam);return catList;} }

參考:來自Programming Peacely博客的JCG合作伙伴 Boris Lam 向您的Spring Data Repository中添加了Hibernate本機(jī)SQL功能 。


翻譯自: https://www.javacodegeeks.com/2012/08/hibernate-native-sql-features-into-your.html

總結(jié)

以上是生活随笔為你收集整理的将原生SQL功能休眠到您的Spring Data Repository中的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。