spring data 自定义接口
1 spring data jpa
虽然说spring data 提供了很多DAO 接口,但是依然可能不能满足我们日常的使用,所以,有时我们需要自定义接口方法。自定义接口方法步骤如下:
1. 创建自定义工厂类:CustomerJpaRepositoryFactoryBean, 需要继承JpaRepositoryFactoryBean
     package org.zgf.spring.data.customer;  
     import java.io.Serializable;  
     import javax.persistence.EntityManager;  
     import org.springframework.data.jpa.repository.support.JpaRepositoryFactory;
     import org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean;
     import org.springframework.data.repository.Repository;
     import org.springframework.data.repository.core.RepositoryMetadata;
     import org.springframework.data.repository.core.support.RepositoryFactorySupport;  
     /**
      *  自定义工厂
      * @author: zonggf
      * @date: 2016年1月18日-下午2:16:18
      */
     public class CustomerJpaRepositoryFactoryBean<T extends Repository<S, ID>, S, ID extends Serializable>
             extends JpaRepositoryFactoryBean<T, S, ID> {  
         @Override
         protected RepositoryFactorySupport createRepositoryFactory(
                 EntityManager entityManager) {
             return new CustomerRepositoryFactory(entityManager);
         }  
         private static class CustomerRepositoryFactory<T, I extends Serializable> extends JpaRepositoryFactory {  
             private EntityManager entityManager;  
             public CustomerRepositoryFactory(EntityManager entityManager) {
                 super(entityManager);
                 this.entityManager = entityManager;
             }  
             protected Object getTargetRepository(RepositoryMetadata metadata) {
                 return new IBaseDaoImpl<T, I>((Class<T>) metadata.getDomainType(), entityManager);
             }  
             protected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) {
                 return IBaseDao.class;
             }
         }
     }  
2. 创建自定义接口:IBaseDao, 需要继承JpaRepository
    package org.zgf.spring.data.customer;  
    import java.io.Serializable;  
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.repository.NoRepositoryBean;  
    //必须使用该注解标明,此接口不是一个Repository Bean
    @NoRepositoryBean
    public interface IBaseDao <T, ID extends Serializable> extends JpaRepository<T, ID>{  
        //自定义接口方法
        public void sayHello(String name);  
    }  
3. 创建自定义接口实现 类:IBaseDaoImpl, 名称必须是 接口名+ Impl
     package org.zgf.spring.data.customer;  
     import java.io.Serializable;  
     import javax.persistence.EntityManager;  
     import org.springframework.data.jpa.repository.support.SimpleJpaRepository;
     import org.springframework.data.repository.NoRepositoryBean;
     //必须使用该注解标明,此接口不是一个Repository Bean
     @NoRepositoryBean
     public class IBaseDaoImpl<T, ID extends Serializable> extends SimpleJpaRepository<T, ID>
             implements IBaseDao<T, ID> {  
         private EntityManager entityManager;  
         public IBaseDaoImpl(Class<T> domainClass, EntityManager em) {
             super(domainClass, em);
             this.entityManager = em;
         }  
         @Override
         public void sayHello(String name) {
             System.out.println("entityManage:" + entityManager);
             System.out.println("hello, " + name);
         }
     }  
4. 配置文件中配置自定义工厂类:
<!-- 5. 配置 SpringData -->
<!-- 加入 jpa 的命名空间 扫描 Repository Bean 所在的 package, 自定义工厂类 -->
<jpa:repositories base-package="org.zgf.spring.data" entity-manager-factory-ref="entityManagerFactory" factory-class="org.zgf.spring.data.customer.CustomerJpaRepositoryFactoryBean"/>
5. 测试类
spring data 自定义接口的更多相关文章
- spring data 自定义查询
		
spring data 自定义查询 https://www.cnblogs.com/airycode/p/6535635.html 在方法接口上面使用@Query
 - Spring Data Jpa接口简介
		
Repository接口 public interface Repository<T, ID> {....} 提供了按方法名称的查询方式: 提供了@Query的查询方式 可能遇到的错误: ...
 - Spring data jpa中Query和@Query分别返回map结果集
		
引用: http://blog.csdn.net/yingxiake/article/details/51016234 http://blog.csdn.net/yingxiake/article/d ...
 - Spring Data Elasticsearch 用户指南
		
https://www.jianshu.com/p/27e1d583aafb 翻译自官方文档英文版,有删减. BioMed Central Development Team version 2.1.3 ...
 - Spring Data(一)概念和仓库的定义
		
Spring Data(一)概念和仓库的定义 Spring Data的主要任务是为数据访问提供一个相似的.一致的.基于Spring的编程模型,同时又保留着下面各个数据存储的特征.它使得使用数据访问技术 ...
 - Spring MVC和Spring Data JPA之获取数据表数据放在List集合,显示在JSP页面
		
涉及到很多xml配置没写:只写具体实现的所有类 1.实体类 对应数据表SYS_SBGL, 主键是SBBM,主键是自动生成的uuid 数据表内容如下(有图有真相): package com.jinhet ...
 - Spring Data JPA: 实现自定义Repository
		
一.前言 由于项目中的 实体(entity)默认都是继承一个父类(包含一些公共的属性,比如创建时间,修改时间,是否删除,主键id).为了实现逻辑删除,一般会自己实现RepositoryFactoryB ...
 - Spring Data 之 Repository 接口
		
1. 介绍 Repository是一个空接口,即是一个标记性接口; 若我们定义的接口继承了Repository,则该接口会被IOC容器识别为一个 Repository Bean; 也可以通过@Repo ...
 - Spring data JPA 理解(默认查询 自定义查询 分页查询)及no session 三种处理方法
		
简介:Spring Data JPA 其实就是JDK方式(还有一种cglib的方式需要Class)的动态代理 (需要一个接口 有一大堆接口最上边的是Repository接口来自org.springfr ...
 
随机推荐
- rabbitmq 简单应用
			
1. 启动 rabbitmq-server & 2. 队列重置(清空队列.用户等) rabbitmqctl stop_apprabbitmqctl resetrabbitmqctl stop ...
 - jenkins Build Flow job 输入参数获取和传递
			
jenkins Build Flow job 输入参数获取和传递 如果设置Build Flow的job,怎样获取手工输入的参数. 1. 指定构建参数 job配置中,勾选"参数化构建" ...
 - C++(指针和高级指针)-上篇
			
[在指针中存储地址] int *pAge=nullptr; //将PAge声明为int指针,即用于存储int变量的地址 如果将指针初始化为0或者NUll,以后必须将变量的地址赋给它,如下例代码: ; ...
 - UWP开发入门(一)——SplitView
			
接下来会写一个UWP(Universal Windows Platform)开发入门的系列,自己学习到哪里,有什么心得总结,就会写到哪里.本篇对适用于顶层导航的SplitView控件展开讨论. 首先S ...
 - 安装OWA2013
			
首先可以参考以下博客进行安装 http://www.cnblogs.com/poissonnotes/p/3238238.html 需要特别注意的是,我的SHAREPOINT系统虽然是英文版的,但是同 ...
 - JPA_映射双向多对多的关联关系(转)
			
双向多对多的关联关系 转自(http://www.cnblogs.com/lj95801/p/5011537.html) 双向多对多的关联关系(抽象成A-B)具体体现:A中有B的集合的引用,同时B中也 ...
 - Learning Rich Features from RGB-D Images for Object Detection and Segmentation论文笔记
			
相关工作: 将R-CNN推广到RGB-D图像,引入一种新的编码方式来捕获图像中像素的地心姿态,并且这种新的编码方式比单纯使用深度通道有了明显的改进. 我们建议在每个像素上用三个通道编码深度图像:水平视 ...
 - Python(序列化json,pickle,shelve)
			
序列化 参考:https://www.cnblogs.com/yuanchenqi/articles/5732581.html # dic = str({'1':'111'}) # # f = ope ...
 - Java网络编程以及简单的聊天程序
			
网络编程技术是互联网技术中的主流编程技术之一,懂的一些基本的操作是非常必要的.这章主要讲解网络编程,UDP和Socket编程,以及使用Socket做一个简单的聊天软件. 全部代码下载:链接 1.网络编 ...
 - Azure CLI2.0 捕获Linux ARM非托管磁盘虚拟机并创建ARM托管磁盘虚拟机
			
1.系统内部取消预配VM,创建了测试文件目录及文件:hlm20180904/ hlm20180904.txt 2.使用CLI2.0创建VM映像 a.登陆CLI2.0 备注:在 Azure 中国区使用 ...