欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-25 08:43:21
目录spring data jpa 自定义方法的实现自己的接口主接口我新建一个类来实现我自己的接口spring data jpa自定义方法关键字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
and findbynameandage where name = ? and age = ?
or findbynameorage where name = ? or age = ?
is findbynameis where name = ?
equals findbynameequals where name = ?
between findbyagebetween where age between ? and ?
lessthan findbyagelessthan where age < ?
lessthanequals findbyagelessthanequal where age <= ?
greatorthan findbyagegreaterthan where age > ?
greatorthanequals findbyagegreaterthanequal where age >= ?
after findbyageafter where age > ?
before findbyagebefore where age < ?
isnull findbynameisnull where name is null
isnotnull,notnull findbynameisnotnull,findbynamenotnull where name is not null
not findbynamenot where name <>?
in findbyagein where age in (?)
notin findbyagenotin where age not in (?)
notlike findbynamenotlike where name not like ?
like findbynamelike where name like ?
startingwith findbynamestartingwith where name like ‘?%'
endingwith findbynameendingwith where name like ‘%?'
containing,contains findbynamecontaining,findbynamecontains where name like ‘%?%'
orderby findbyorderbyagedesc order by age desc
true findbybosstrue where boss = true
false findbybossfalse where boss = false
ignorecase findbynameignorecase where upper(name) = upper(?)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。