分享

spring data jpa 自定义接口实现

 aaie_ 2016-11-23

没错,spring data jpa很优秀,但有一些东西,我们就想自己来,我除了想用你的,还想用我自己的

首先,我要spring data jpa的接口,为什么,因为很方便啊

public interface TaskDao extends JpaRepository<Task,Long>{

}
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

然后我想自己定义一些接口,咋办呢,那我就再定义个接口bean吧,然后再定义一些接口方法

public interface TaskDaoCustom<T,ID>{

    void method();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

那这里,我想要spring data jpa的,也想要我自己的,那我就继承吧

public interface TaskDao extends JpaRepository<Task,Long>,TaskDaoCustom<Task,Long>{

}
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

这时候,你在service应该就可以用method()方法了,但是这时候,method是空的,我们得自己来实现它,那实现吧

public class TaskDaoImpl implements TaskDaoCustom{

    @Override
    public void method() {
        // TODO Auto-generated method stub
        System.out.println("who are you !!");
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

有心的朋友应该有注意到,为什么我实现TaskDaoCustom的bean不应该是TaskDaoCustomImpl吗?如果你这样子做的话,编译器就报错了

 No property method found for type Task!
  • 1
  • 1

那为什么呢,因为任何继承了Repository(JpaRepository最终也是继承于Repository)spring都会为他生成一个实现类,因为TaskDao 继承于TaskDaoCustom,而TaskDaoCustom中的method不是spring data jpa规范查询方法的规则,如果就报找不到找不到属性了。

或许你会问,TaskDaoCustom不会有TaskDaoCustomImpl的实现类吗,按照spring文档说的,只要配置好实现的后缀名,就会用他来实现方法么,是的,我们是这样子配置后缀的,确实也有Impl。

    <jpa:repositories base-package="com.liuxg.**.dao"
        repository-impl-postfix="Impl" 
        query-lookup-strategy = "create-if-not-found"
        entity-manager-factory-ref="entityManagerFactory"
        transaction-manager-ref="transactionManager" >
    </jpa:repositories>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里要纠正一下,这里的实现spring data jpa规定命名方法是继承于spring data jpa Repository的那个命名 + Impl,例如我们是TaskDao继承于JpaRepository,如果实现类应该是TaskDaoImpl,而不是TaskDaoCustomImpl。

spring data jpa 秉承约定大于实现,只要按照规定和约定来,就能省很多麻烦事。

到这里,你应该就能自己自定义接口了,但这个对于模块是起到了作用,如果我在搭建项目,我想直接,定义 一个BaseDao,然后自定义一些常用的公共方法,然后再利用spring data jpa的优点,只要子模块,继承于BaseDao,就能同时拥有自定义的公用方法和spring data jpa的优点,该怎么做??下一篇再看看??

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多