zoukankan      html  css  js  c++  java
  • spring data jpa 使用自定义repository实现类

    • spring data jpa中使用JpaRepository等接口定义repository时,将默认使用SimpleJpaRepository
    • 可通过自定义实现类,改写或自定义接口方法逻辑:
    1. 创建MyJpaRepository实现类
    @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);
        }
        ...
    }
    
    1. 创建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;
            }
    
            @SuppressWarnings("unchecked")
            protected Object getTargetRepository(RepositoryMetadata metadata) {
                return new MyRepositoryImpl<T, ID>(
                        (Class<T>) metadata.getDomainType(), em);
            }
    
            protected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) {
                return MyRepositoryImpl.class;
            }
        }
    }
    
    1. 配置JPA
    @Configuration
    @EnableJpaRepositories(basePackages = {...},
            repositoryFactoryBeanClass = MyJpaRepositoryFactoryBean.class)
    public class JPAConfig {}
    
  • 相关阅读:
    滚动到Table的某个位置
    前端导出可修改样式的Excel表格
    在vue中绑定weui的class
    html5的消息通知
    在nginx上部署页面,使用ip访问页面,实现跨设备访问本地静态页面
    用原生javascript实现get请求,及具体数据的获取
    vue中如何实现图片不存在时显示一个默认的图片
    css选择器
    javascript 类型及类型判断
    CSS
  • 原文地址:https://www.cnblogs.com/luguojun/p/14294711.html
Copyright © 2011-2022 走看看