最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring?data?jpa如何使用自定義repository實(shí)現(xiàn)類

 更新時間:2021年11月23日 14:36:38   作者:路過君_P  
這篇文章主要介紹了spring?data?jpa如何使用自定義repository實(shí)現(xiàn)類,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

spring data jpa使用自定義repository實(shí)現(xiàn)類

spring data jpa中使用JpaRepository等接口定義repository時,將默認(rèn)使用SimpleJpaRepository

可通過自定義實(shí)現(xiàn)類,改寫或自定義接口方法邏輯:

創(chuàng)建MyJpaRepository實(shí)現(xiàn)類

@Repository
@Transactional(readOnly = true)
public class MyRepositoryImpl<T,ID> extends SimpleJpaRepository<T, ID> {
 public MyRepositoryImpl(JpaEntityInformation<T, ID> entityInformation, EntityManager entityManager) {
        super(entityInformation, entityManager);
    }
    public MyRepositoryImpl(Class<T> domainClass, EntityManager em) {
        super(domainClass, em);
    }
    ...
}

創(chuàng)建MyJpaRepositoryFactoryBean

public class MyJpaRepositoryFactoryBean<R extends Repository<T, ID>, T, ID>
        extends JpaRepositoryFactoryBean<R, T, ID> {
    public MyJpaRepositoryFactoryBean(Class<? extends R> repositoryInterface) {
        super(repositoryInterface);
    }
    @SuppressWarnings("rawtypes")
    protected RepositoryFactorySupport createRepositoryFactory(EntityManager em) {
        return new MyJpaRepositoryFactory(em);
    }
    private static class MyJpaRepositoryFactory<T, ID>
            extends JpaRepositoryFactory {
        private final EntityManager em;
        public MyJpaRepositoryFactory(EntityManager em) {
            super(em);
            this.em = em;
        }
        @Override
        protected JpaRepositoryImplementation<?, ?> getTargetRepository(RepositoryInformation information, EntityManager entityManager) {
            return new EntityJPARepositoryImpl<E>(
                    (Class<E>) information.getDomainType(), entityManager);
        }        
        protected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) {
            return MyRepositoryImpl.class;
        }
    }
}

配置JPA

@Configuration
@EnableJpaRepositories(basePackages = {...},
        repositoryFactoryBeanClass = MyJpaRepositoryFactoryBean.class)
public class JPAConfig {}

Jpa自定義Repository方法

如果不使用SpringData的方法,想要自己實(shí)現(xiàn),該怎么辦呢?

定義一個接口: 聲明要添加的, 并自實(shí)現(xiàn)的方法

提供該接口的實(shí)現(xiàn)類: 類名需在要聲明的 Repository 后添加 Impl, 并實(shí)現(xiàn)方法

聲明 Repository 接口, 并繼承 1) 聲明的接口

注意: 默認(rèn)情況下, Spring Data 會在 base-package 中查找 "接口名Impl" 作為實(shí)現(xiàn)類. 也可以通過 repository-impl-postfix 聲明后綴.

這張圖是類與接口之間的關(guān)系

下面是具體的實(shí)現(xiàn):

包結(jié)構(gòu)

類與接口之間的關(guān)系代碼

public interface PersonRepositoiry extends JpaRepository<Person, Integer> ,PersonDao{
public interface PersonDao { 
 void test(); 
} 
@Repository
public class PersonRepositoiryImpl implements PersonDao{ 
 @PersistenceContext
 private EntityManager em; 
 @Override
 public void test() {
  //只是用來測試
  Person person = em.find(Person.class, 1);
  System.out.println(person);
 } 
}

測試代碼

@Test
 public void testCustomerRepositoryMethod() {
  personRepositoiry.test();
 }

經(jīng)過實(shí)踐發(fā)現(xiàn)

  • XXXRepositoryImpl 與XXXRepository前面的名字必須相同,后面的也需要按照規(guī)則寫
  • 若將XXXRepositoryImpl與XXXRepository接口放在同意包下,XXXRepositoryImpl不需要添加@Repository注解,但是當(dāng)XXXRepositoryImpl與XXXRepository接口不在同一包下,需要在在XXXRepositoryImpl類上加@Repository注解進(jìn)行修飾

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java中的靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造方法詳解

    java中的靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造方法詳解

    下面小編就為大家?guī)硪黄猨ava中的靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造方法詳解。小編覺得挺好的,現(xiàn)在分享給大家。給大家一個參考。一起跟隨小編過來看看吧
    2016-03-03
  • Java 跨域問題的處理方式

    Java 跨域問題的處理方式

    這篇文章主要介紹了Java 跨域問題的處理方式,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-11-11
  • java多線程JUC常用輔助類詳解

    java多線程JUC常用輔助類詳解

    這篇文章主要為大家介紹了java多線程及并發(fā)編程中JUC常用輔助類,文中附含詳細(xì)示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • Java中如何使用Response重定向

    Java中如何使用Response重定向

    這篇文章主要介紹了Java中如何使用Response重定向,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java中Class類的作用與深入理解

    Java中Class類的作用與深入理解

    這篇文章主要介紹了Java中Class類的作用與深入理解的相關(guān)資料,希望通過本文能幫助到大家讓大家理解這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • IDEA中Web項(xiàng)目控制臺亂碼的問題及解決方法

    IDEA中Web項(xiàng)目控制臺亂碼的問題及解決方法

    這篇文章主要介紹了IDEA中Web項(xiàng)目控制臺亂碼的問題及解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 在SpringBoot中使用MongoDB完成數(shù)據(jù)存儲

    在SpringBoot中使用MongoDB完成數(shù)據(jù)存儲

    本文主要介紹了在SpringBoot中如惡化使用MongoDB完成數(shù)據(jù)存儲,接下來這篇我們將圍繞MongoDB進(jìn)行,MongoDB是一個開源的,面向文檔的NoSQL數(shù)據(jù)庫管理系統(tǒng),使用類似JSON的BSON(二進(jìn)制JSON)格式來存儲數(shù)據(jù),具有靈活的數(shù)據(jù)模型和強(qiáng)大的查詢功能,需要的朋友可以參考下
    2023-11-11
  • Java連接MySQL數(shù)據(jù)庫增刪改查的通用方法(推薦)

    Java連接MySQL數(shù)據(jù)庫增刪改查的通用方法(推薦)

    下面小編就為大家?guī)硪黄狫ava連接MySQL數(shù)據(jù)庫增刪改查的通用方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • java Arrays快速打印數(shù)組的數(shù)據(jù)元素列表案例

    java Arrays快速打印數(shù)組的數(shù)據(jù)元素列表案例

    這篇文章主要介紹了java Arrays快速打印數(shù)組的數(shù)據(jù)元素列表案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • JAVA 多線程編程之CountDownLatch使用詳解

    JAVA 多線程編程之CountDownLatch使用詳解

    當(dāng)多個線程需要協(xié)調(diào)和同步執(zhí)行任務(wù)時,Java中的CountDownLatch(倒計時門閂)是一個常用的工具類,本文將介紹 CountDownLatch 的基本原理、用法以及示例代碼,需要的朋友可以參考下
    2023-05-05

最新評論

滨州市| 石嘴山市| 池州市| 山东省| 安远县| 蒙自县| 法库县| 杨浦区| 万宁市| 阳新县| 新津县| 临澧县| 高州市| 崇义县| 抚宁县| 武威市| 昂仁县| 临邑县| 庆元县| 霍林郭勒市| 都江堰市| 南阳市| 鄄城县| 塘沽区| 黑水县| 建瓯市| 霍林郭勒市| 普定县| 镶黄旗| 双牌县| 岳普湖县| 年辖:市辖区| 濮阳市| 太谷县| 胶南市| 米林县| 阿鲁科尔沁旗| 贵南县| 淮南市| 仪陇县| 清水河县|