Spring Data Jpa如何实现自定义方法

发布时间:2021-12-08 17:09:07 作者:小新
来源:亿速云 阅读:365

这篇文章将为大家详细讲解有关Spring Data Jpa如何实现自定义方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

Spring Data Jpa 自定义方法的实现

最近项目中用到了Spring Data JPA,在里面我继承了一个PagingAndSortingRepository的接口,期望的是利用Spring Data JPA提供的便利。

同时我也希望自己有一个能定义自己方法的接口,因为单纯靠Spring Data JPA中提供的功能还是有很多业务逻辑实现不了,我必须自己实现。

那么问题来了:Spring Data JPA好处就是让我们省去了实现接口的过程,按照他们给的命名规范他们会自动实现我们的业务逻辑,那我们自己实现的接口要怎么注入到其中呢?

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

自己的接口

package com.mhc.dao; 
import org.springframework.stereotype.Repository; 
import com.mhc.entity.Person;
 
@Repository
public interface DeviceCategoryDaoCustom {
 public Person getsFather(Person person); 
}

主接口

public interface DeviceCategoryDao extends
  PagingAndSortingRepository<Person, String>, DeviceCategoryDaoCustom {  
}

上面是我的接口继承PagingAndSortingRepository、DeviceCategoryDaoCustom(我自己方法的接口)。

我新建一个类来实现我自己的接口

package com.mhc.dao; 
import javax.persistence.PersistenceContext;
import javax.transaction.Transactional; 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service; 
import com.mhc.entity.Person;
 
@Repository("crudRepositoryDaoCustom")
class DeviceCategoryDaoImpl implements DeviceCategoryDaoCustom {
 
 @Transactional
 public Person getsFather(Person person) {
  // TODO Auto-generated method stub
  Person father = new Person();
  father = person.getParentPerson();
  return father;
 }
}

在这里有个需要注意的地方,就是用不用implements的问题,如果用的话,他就会调用编译器的实现功能去实现我们自定义的接口也就是:DevicecategoryCustom。

如果去掉的话,他会去实现DeviceCategoryDao,那么会有人问,他怎么去自己找的呢。

事实上他是根据后面的Impl来寻找的。他不会提示@override,不过你写相同的方法他还是会覆盖(覆盖主接口中的同名方法,如果有的话)DeviceCategoryDao中的同名方法。你可以去尝试一下。

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

Spring Data Jpa自定义方法关键字

关键字方法名举例对应的SQL
AndfindByNameAndAgewhere name = ? and age = ?
OrfindByNameOrAgewhere name = ? or age = ?
IsfindByNameIswhere name = ?
EqualsfindByNameEqualswhere name = ?
BetweenfindByAgeBetweenwhere age between ? and ?
LessThanfindByAgeLessThanwhere age < ?
LessThanEqualsfindByAgeLessThanEqualwhere age <= ?
GreatorThanfindByAgeGreaterThanwhere age > ?
GreatorThanEqualsfindByAgeGreaterThanEqualwhere age >= ?
AfterfindByAgeAfterwhere age > ?
BeforefindByAgeBeforewhere age < ?
IsNullfindByNameIsNullwhere name is null
IsNotNull,NotNullfindByNameIsNotNull,findByNameNotNullwhere name is not null
NotfindByNameNotwhere name <>?
InfindByAgeInwhere age in (?)
NotInfindByAgeNotInwhere age not in (?)
NotLikefindByNameNotLikewhere name not like ?
LikefindByNameLikewhere name like ?
StartingWithfindByNameStartingWithwhere name like ‘?%'
EndingWithfindByNameEndingWithwhere name like ‘%?'
Containing,ContainsfindByNameContaining,findByNameContainswhere name like ‘%?%'
OrderByfindByOrderByAgeDescorder by age desc
TruefindByBossTruewhere boss = true
FalsefindByBossFalsewhere boss = false
IgnoreCasefindByNameIgnoreCasewhere UPPER(name) = UPPER(?)

关于“Spring Data Jpa如何实现自定义方法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

推荐阅读:
  1. Spring Data JPA 实例查询
  2. Spring Data JPA 简单查询

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

spring data jpa

上一篇:bitbucket如何搭建

下一篇:Vue的MVVM模板语法和数据绑定怎么使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》