关于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(?) |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
推荐阅读
-
Spring Data MongoDB中实现自定义级联的方法详解
-
spring-data-jpa实现增删改查以及分页操作方法
-
spring-data-jpa使用自定义repository来实现原生sql
-
关于Spring Data Jpa 自定义方法实现问题
-
Spring Data JPA实现查询结果返回map或自定义的实体类
-
SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法
-
spring data jpa如何使用自定义repository实现类
-
spring-data-jpa实现增删改查以及分页操作方法
-
排查spring data实现自定义Repository的一个问题
-
关于Spring Data JPA更新部分字段的问题