zoukankan      html  css  js  c++  java
  • 自定义Repository

      很多情况下除了使用定义好的crud,我们需要为Repository提供一些自定义的实现。这时候使用自定义Repository可以满足要求。

      这里我们新增一个sayHello的方法。

    @NoRepositoryBean
    public interface MyRepository<T, ID extends Serializable> extends JpaRepository<T, ID> {
        void sayHello(String name);
    }
    

      继承JpaRepository是为了继续使用spring自己实现好的那些方法。

      下面完成MyRepository的实现类

    @NoRepositoryBean
    public class MyRepositoryImpl extends SimpleJpaRepository implements MyRepository {
    
        private EntityManager entityManager;
    
        public MyRepositoryImpl(Class domainClass, EntityManager em) {
            super(domainClass, em);
        }
    
    
        @Override
        public void sayHello(String name) {
            System.out.println("entityManager:" + entityManager);
            System.out.println("hello," + name);
        }
    }
    

      下面继承JpaRepositoryFactoryBean

    public class MyJpaRepositoryFactoryBean<T extends Repository<S, ID>, S, ID extends Serializable> extends JpaRepositoryFactoryBean<T, S, ID> {
    
        @Override
        protected RepositoryFactorySupport createRepositoryFactory(EntityManager entityManager) {
            return new MyRepositoryFactory(entityManager);
        }
    
        public MyJpaRepositoryFactoryBean(Class<? extends T> repositoryInterface) {
            super(repositoryInterface);
        }
    
    
        private static class MyRepositoryFactory<T, I extends Serializable> extends JpaRepositoryFactory {
    
    
            private EntityManager entityManager;
    
            public MyRepositoryFactory(EntityManager entityManager) {
                super(entityManager);
                this.entityManager = entityManager;
            }
    
            @Override
            protected Object getTargetRepository(RepositoryInformation information) {
                return new MyRepositoryImpl(information.getDomainType(), entityManager);
            }
    
            @Override
            protected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) {
                return MyRepository.class;
            }
        }
    }
    

      配置

    @SpringBootApplication
    @EnableJpaRepositories(repositoryFactoryBeanClass = MyJpaRepositoryFactoryBean.class)
    public class App {
        public static void main(String[] args) {
            SpringApplication.run(App.class, args);
        }
    }
    

      

    
    
    
  • 相关阅读:
    《C#高级编程》学习笔记------C#中的委托和事件(续)
    .NET Reflector 7.6.1.824 Edition .NET程序反编译神器(附插件安装教程2012-10-13更新) 完全破解+使用教程
    《C#高级编程》学习笔记------C#中的事件和委托
    TensorFlow+实战Google深度学习框架学习笔记(5)----神经网络训练步骤
    Tensorflow学习笔记----模型的保存和读取(4)
    Tensorflow学习笔记----基础(3)
    Tools
    English Learning
    Tools
    Testing
  • 原文地址:https://www.cnblogs.com/vincentren/p/9304905.html
Copyright © 2011-2022 走看看