Spring Data Jpa 自定义方法实现问题

来源:互联网 发布:秦始皇活着吗 知乎 编辑:程序博客网 时间:2024/05/16 00:59
转自:http://blog.csdn.net/qq_23660243/article/details/43194465 
  最近项目中用到了spring Data JPA,在里面我继承了一个PagingAndSortingRepository的接口,期望的是利用Spring Data JPA提供的便利。同时我也希望自己有一个能定义自己方法的接口,因为单纯靠Spring Data JPA中提供的功能还是有很多业务逻辑实现不了,我必须自己实现。那么问题来了:Spring Data JPA好处就是让我们省去了实现接口的过程,按照他们给的命名规范他们会自动实现我们的业务逻辑,那我们自己实现的接口要怎么注入到其中呢? 

   上网查找了好多资料,都没有说的太详细,更多的是照搬胡抄,这里是我亲自写的,可能很多人会用到,不多说上代码:

    自己的接口:

 

[java] view plain copy
 print?
  1. package com.mhc.dao;  
  2.   
  3. import org.springframework.stereotype.Repository;  
  4.   
  5. import com.mhc.entity.Person;  
  6.   
  7. @Repository  
  8. public interface DeviceCategoryDaoCustom {  
  9.     public Person getsFather(Person person);  
  10.   
  11. }  

   主接口:

[java] view plain copy
 print?
  1. public interface DeviceCategoryDao extends  
  2.         PagingAndSortingRepository<Person, String>, DeviceCategoryDaoCustom {  
  3.       
  4.   
  5. }  
  上面是我的接口继承PagingAndSortingRepository、DeviceCategoryDaoCustom(我自己方法的接口)。然后我新建一个类来实现我自己的接口:
[java] view plain copy
 print?
  1. package com.mhc.dao;  
  2.   
  3. import javax.persistence.PersistenceContext;  
  4. import javax.transaction.Transactional;  
  5.   
  6. import org.springframework.beans.factory.annotation.Autowired;  
  7. import org.springframework.data.repository.CrudRepository;  
  8. import org.springframework.data.repository.NoRepositoryBean;  
  9. import org.springframework.stereotype.Component;  
  10. import org.springframework.stereotype.Repository;  
  11. import org.springframework.stereotype.Service;  
  12.   
  13. import com.mhc.entity.Person;  
  14.   
  15. @Repository("crudRepositoryDaoCustom")  
  16. class DeviceCategoryDaoImpl implements DeviceCategoryDaoCustom {  
  17.   
  18.     @Transactional  
  19.     public Person getsFather(Person person) {  
  20.         // TODO Auto-generated method stub  
  21.         Person father = new Person();  
  22.         father = person.getParentPerson();  
  23.         return father;  
  24.     }  
  25. }  

在这里有个需要注意的地方,就是用不用implements的问题,如果用的话,他就会调用编译器的实现功能去实现我们自定义的接口也就是:DevicecategoryCustom。如果去掉的话,他会去实现DeviceCategoryDao,那么会有人问,他怎么去自己找的呢。事实上他是根据后面的Impl来寻找的。他不会提示@override,不过你写相同的方法他还是会覆盖(覆盖主接口中的同名方法,如果有的话)DeviceCategoryDao中的同名方法。你可以去尝试一下。

同时加上@Repository把他加入到Bean里面,这样下次用这个方法的时候Repository会自动找到他的(话说Spring团队真心NB)。然后我们交给spring托管、测试。。。。。Ok  真心赞

0 0
原创粉丝点击