Spring Data自定义接口实现

引言

使用Spring Data自定义的Repository的实现方式最普遍的就是继承Spring的Repository

定义及使用方式一:

首先,因为Spring Data JPA的JpaRepository接口封装了一系列的增删改查,所以方便一般方式如下:

 public interface UserDao extends JpaRepository<User,Integer>{
}

然后,对于想使用自己定义的一些接口,那就再自行定义一些接口方法,如下:

 public interface UserDaoTask<T,ID>{
    void method();
}

当然,这里既要实现JpaRepository又要实现自定义的接口,采用多继承的方式

public interface UserDao extends JpaRepository<User,Integer>,UserDaoTask<User,Integer>{
}

这个时候,在自己的Service层中就可以使用了,但这时候是空方法,必须自行实现.

 public class UserDaoImpl implements UserDaoTask{
    public void method(){
        System.out.println("Hello!");
    }
}

PS:需要注意的是,因为要实现的是UserDaoTask接口里面的方法,但是命名却不能按照对应的写成UserDaoTaskImpl,如果要写成这个,回报以下错误:
No property method found for type Task!
那为什么呢,因为任何继承了Repository(JpaRepository最终也是继承于Repository)spring都会为他生成一个实现类,因为UserDao 继承于UserDaoTask,而UserDaoTask中的method不是spring data jpa规范查询方法的规则(具体规则下次再讲),如果就报找不到找不到属性了。
当然,你会问UserDaoTask不会有UserDaoTaskImpl实现类吗,按照spring的文档说的,只要配置好实现类的后缀名称就可以,也确实是这样.

    <jpa:repositories 
        base-package="cn.edu.sdut.softlab.Repository" 
        query-lookup-strategy="create-if-not-found" 
        transaction-manager-ref="transactionManager"  
        entity-manager-factory-ref="entityManagerFactory"/>

Spring的实现规范的命名方式应该是继承于Repository接口的哪个命名+Impl.正如上所说,真正应该写的是UserDaoImpl而不是UserDaoTaskImpl.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值