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 自定义接口的更多相关文章

  1. spring data 自定义查询

    spring data 自定义查询 https://www.cnblogs.com/airycode/p/6535635.html 在方法接口上面使用@Query

  2. Spring Data Jpa接口简介

    Repository接口 public interface Repository<T, ID> {....} 提供了按方法名称的查询方式: 提供了@Query的查询方式 可能遇到的错误: ...

  3. Spring data jpa中Query和@Query分别返回map结果集

    引用: http://blog.csdn.net/yingxiake/article/details/51016234 http://blog.csdn.net/yingxiake/article/d ...

  4. Spring Data Elasticsearch 用户指南

    https://www.jianshu.com/p/27e1d583aafb 翻译自官方文档英文版,有删减. BioMed Central Development Team version 2.1.3 ...

  5. Spring Data(一)概念和仓库的定义

    Spring Data(一)概念和仓库的定义 Spring Data的主要任务是为数据访问提供一个相似的.一致的.基于Spring的编程模型,同时又保留着下面各个数据存储的特征.它使得使用数据访问技术 ...

  6. Spring MVC和Spring Data JPA之获取数据表数据放在List集合,显示在JSP页面

    涉及到很多xml配置没写:只写具体实现的所有类 1.实体类 对应数据表SYS_SBGL, 主键是SBBM,主键是自动生成的uuid 数据表内容如下(有图有真相): package com.jinhet ...

  7. Spring Data JPA: 实现自定义Repository

    一.前言 由于项目中的 实体(entity)默认都是继承一个父类(包含一些公共的属性,比如创建时间,修改时间,是否删除,主键id).为了实现逻辑删除,一般会自己实现RepositoryFactoryB ...

  8. Spring Data 之 Repository 接口

    1. 介绍 Repository是一个空接口,即是一个标记性接口; 若我们定义的接口继承了Repository,则该接口会被IOC容器识别为一个 Repository Bean; 也可以通过@Repo ...

  9. Spring data JPA 理解(默认查询 自定义查询 分页查询)及no session 三种处理方法

    简介:Spring Data JPA 其实就是JDK方式(还有一种cglib的方式需要Class)的动态代理 (需要一个接口 有一大堆接口最上边的是Repository接口来自org.springfr ...

随机推荐

  1. mysql初次登陆跳过密码并初始化密码

    如下均已mysql5.7为标准版本. 1.重置密码的第一步就是跳过MySQL的密码认证过程,方法如下: #vim /etc/my.cnf(注:windows下修改的是my.ini) 在文档内搜索mys ...

  2. JAVA 字符串编码转换

    /** * 字符串编码转换的实现方法 * @param str 待转换编码的字符串 * @param newCharset 目标编码 * @return * @throws UnsupportedEn ...

  3. java随笔——HashMap与红黑树

    前言: hashmap是一种很常用的数据结构,其使用方便快捷,接下来笔者将给大家深入解析这个数据结构,让大家能在用的时候知其然,也知其所以然. 一.Map 首先,从最基本的讲起,我们先来认识一下map ...

  4. AI-Info-Micron:人如其食:人工智能和人类微生物组

    ylbtech-AI-Info-Micron:人如其食:人工智能和人类微生物组 1.返回顶部 1. 人如其食:人工智能和人类微生物组 “相信你身体发出的信号”,的确是一个很好的建议.研究人员在不遗余力 ...

  5. 1305 Pairwise Sum and Divide(数学 ,规律)

    HackerRank   1305 Pairwise Sum and Divide   有这样一段程序,fun会对整数数组A进行求值,其中Floor表示向下取整:   fun(A)     sum = ...

  6. KVM性能优化学习笔记

    本学习笔记系列都是采用CentOS6.x操作系统,KVM虚拟机的管理也是采用virsh方式,网上的很多的文章都基于ubuntu高版本内核下,KVM的一些新的特性支持更好,本文只是记录了CentOS6. ...

  7. Java中Io类-File类的构造方法

    package com.hxzy.IOSer;import java.io.*;public class Demo02 { public static void main(String[] args) ...

  8. isset()、empty()、is_NULL()的区别

    1,isset():变量不存在,或变量为null,返回false,否则返回true: 2,empty():变量不存在,或变量为null,返回true,另外"".0."0& ...

  9. robot framework学习笔记之三—Scalar变量

    一.变量赋值 1)Set赋值 通常使用Set Variable关键字对变量进行赋值,其他Set相关的带Variable的关键字也可以进行赋值 赋值的时候,变量后面写不写『=』都可以,如下: 如果${v ...

  10. CentOS6.5下openssh服务

    00×0 介绍 OpenSSH是使用SSH通过计算机网络加密通讯的实现.它是取代由SSH Communications Security所提供的商用版本的开放源代码方案.目前OpenSSH是OpenB ...