公司里需要用Specification的pattern写一个比较通用的查询,之前对于JPA的了解仅限于继承JPARepository接口,就能实现基本的查询,又或者加上@Query标签@Modify标签基本能实现所有的增删改查了。
之前看资料的时候也有看到一些对于Specification的描述和实践,那个时候一眼看过去,哎呀妈呀,整啥玩意呢,这么复杂看到。果然人对于未知的事物总是有抵触心理的,不到万不得已不会去了解他。
这次我就来好好了解他。
----------------------------------------------------------------------------------------------邪恶的分割线---------------------------------------------
了解了他其实还是很简单的呢。
要实现的功能是把表里面某个field符合prefix的都找出来,并且prefix-XXXX里面XXXXX必须是数字,不能是字母,里面最大的一条取出来。
一说到是数字,不能是字母,大家一定第一个反应就是用正则表达式吧。
话不多说,附上代码先。
@SuppressWarnings("unchecked")
@Transactional
public <T extends DoClass> T getMaxStringFieldValue(final String field, final String prefix, final Class<T> doClass){
Repository<T> rep = (Repository<T>) metadata.getRepository(doClass);
Specification<T> s = new Specification<T>(){
@Overrid