概述
引言
使用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.
最后
以上就是冷傲酒窝为你收集整理的Spring Data自定义接口实现的全部内容,希望文章能够帮你解决Spring Data自定义接口实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复