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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

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

發布時間:2023/12/3 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将原生SQL功能Hibernate到您的Spring Data Repository中 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
JPA為您提供@NamedNativeQuery以便使用本機SQL。 但是,用法并不方便,特別是當您需要在本機SQL中映射多個實體時。 您必須定義一組SqlResultSetMapping映射,這很容易出錯。

對于以前使用過Hibernate本機SQL功能的用戶,您會發現它比JPA的@NamedNativeQuery更易于使用。 在最近的項目中,我正在使用Spring Data JPA。 我已將Hibernate的本機查詢功能添加到我的Spring數據庫中。 現在,您可以在JPA中執行本機查詢,而無需使用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數據JPA基礎存儲庫添加自定義行為,請參閱我以前的文章, 了解如何自定義Spring數據JPA基礎存儲庫 。 您可以在上一篇文章中看到,我有意在GenericRepositoryImpl中公開存儲庫接口(即springDataRepositoryInterface屬性)。 這些小技巧使我能夠輕松訪問存儲庫界面中的注釋。

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.示例用法

在存儲庫界面中,通過@NativeQueries和@NativeQuery批注定義要使用的本機SQL查詢。 用法與調用Hibernate本機查詢功能相似。 您可能只看到Hibernate別名和屬性引用 。

@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> { }

在注入存儲庫的服務或業務類中,您只需簡單地調用queryNatively()方法即可執行本機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本機SQL功能 。


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

總結

以上是生活随笔為你收集整理的将原生SQL功能Hibernate到您的Spring Data Repository中的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。