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);
        }
    }
    

      

    
    
    
  • 相关阅读:
    phpcms基础
    读取数据库有的设置选中状态
    用php 生成 excel 表格
    ajax验证用户名是否存在,手机号是不是匹配
    系统登陆简单的密码验证
    分页显视
    时间选择的三级连动 年,月,日
    session控制登入权限
    jQuery, js 验证两次输了密码的一相同
    正则表达式判断手机号是否11位数字
  • 原文地址:https://www.cnblogs.com/vincentren/p/9304905.html
Copyright © 2011-2022 走看看