示例代码:

public static Specification<GoodsType> where(final GoodsType goodsType){

        return new Specification<GoodsType>() {

            @Override
public Predicate toPredicate(Root<GoodsType> root, CriteriaQuery<?> query, CriteriaBuilder cb) { List<Predicate> predicates = new ArrayList<Predicate>();
//名字+拼音
String name = goodsType.getName();
if(StringUtils.isNotBlank(name)){
Predicate like1 = cb.like(root.<String>get("name"), "%" + name +"%");
Predicate like2 = cb.like(root.<String>get("pyAll"), "%" + PingYinUtil.getPingYin(name) +"%");
Predicate like3 = cb.like(root.<String>get("pyHead"), "%" + PingYinUtil.getPinYinHeadChar(name) +"%");
predicates.add(cb.or(like1,like2,like3));
} //uid
String uid = goodsType.getUid();
if(StringUtils.isNotBlank(uid)){
predicates.add(cb.equal(root.<String>get("uid"),uid));
} //parentUid
String parentUid = goodsType.getParentUid();
if(StringUtils.isNotBlank(parentUid)){
predicates.add(cb.equal(root.<String>get("parentUid"),parentUid)); }
//启用 状态
Integer enabledFlag = goodsType.getEnabledFlag();
if (enabledFlag != null){
predicates.add(cb.equal(root.get("enabledFlag"),enabledFlag));
} //层级
Integer floor = goodsType.getFloor();
if (floor != null){
predicates.add(cb.equal(root.get("floor"),floor));
} //对外编码
String outerCode = goodsType.getOuterCode();
if(StringUtils.isNotBlank(outerCode)){ predicates.add(cb.equal(root.<String>get("outerCode"),outerCode));
}
//对外id
String outerId = goodsType.getOuterId();
if(StringUtils.isNotBlank(outerId)){
predicates.add(cb.equal(root.<String>get("outerId"),outerId));
} //租户ID
String tid = goodsType.getTenementId();
if(StringUtils.isNotBlank(tid)){
predicates.add(cb.equal(root.<String>get("tenementId"),tid));
} String typeUidArrStr = goodsType.getTypeUidArrStr();
if (StringUtils.isNotBlank(typeUidArrStr)) {
In<String> in = cb.in(root.<String>get("parentUid"));
String[] split = typeUidArrStr.split(",");
for (String string : split) {
in.value(string);
}
predicates.add(in);
}
//未被删除 且 启用状态无视
predicates.add(cb.equal(root.get("delFlag"),GoodsType.DEL_FLAG_EXIST)); return query.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction();
}
}; }

【spring data jpa】jpa中criteria拼接in查询的更多相关文章

  1. Spring Data MongoDB 三:基本文档查询(Query、BasicQuery

    一.简介 spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...

  2. Spring Data MongoDB 五:进阶文档查询(分页、Morphia)(二)

    Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 六: MongoDB查询(游标操作.游标信息)(三) 一.简单介绍 Spring ...

  3. Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)

    一.简单介绍 Spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一 ...

  4. [Spring Data MongoDB]学习笔记--MongoTemplate查询操作

    查询操作主要用到两个类:Query, Criteria 所有的find方法都需要一个query的object. 1. 直接通过json来查找,不过这种方式在代码中是不推荐的. BasicQuery q ...

  5. Spring data mongodb ObjectId ,根据id日期条件查询,省略@CreatedDate注解

    先看看ObjectId 的json 结构,非常丰富,这里有唯一机器码,日期,时间戳等等,所以强烈建议ID 使用 ObjectId 类型,并且自带索引 Spring data mongodb 注解 @C ...

  6. mysql 中字符串拼接,查询sql语句总结

    DELIMITER $$ USE `ld_wpfmgl_sys`$$ DROP PROCEDURE IF EXISTS `code_query`$$ CREATE DEFINER=`root`@`%` ...

  7. 干货|一文读懂 Spring Data Jpa!

    有很多读者留言希望松哥能好好聊聊 Spring Data Jpa!其实这个话题松哥以前零零散散的介绍过,在我的书里也有介绍过,但是在公众号中还没和大伙聊过,因此本文就和大家来仔细聊聊 Spring D ...

  8. Spring Data - Spring Data JPA 提供的各种Repository接口

    Spring Data Jpa 最近博主越来越懒了,深知这样不行.还是决定努力奋斗,如此一来,就有了一下一波复习 演示代码都基于Spring Boot + Spring Data JPA 传送门: 博 ...

  9. Spring Boot2 系列教程(二十三)理解 Spring Data Jpa

    有很多读者留言希望松哥能好好聊聊 Spring Data Jpa! 其实这个话题松哥以前零零散散的介绍过,在我的书里也有介绍过,但是在公众号中还没和大伙聊过,因此本文就和大家来仔细聊聊 Spring ...

随机推荐

  1. Linux命令之dig命令挖出DNS的秘密

    === [初次见面] 我相信使用nslookup的同学一定比使用dig的同学多,所以还是有必要花些时间给大家介绍一下dig的. dig,和nslookup作用有些类似,都是DNS查询工具. dig,其 ...

  2. Spring MVC数据绑定(二)

    之前学习了SpringMVC数据绑定的基本知识和简单数据绑定以及POJO类型数据的绑定.接下来总结剩下的一些数据类型的绑定 1. 绑定包装POJO 所谓的包装POJO,就是在一个POJO中包含另一个简 ...

  3. GUC-2 原子性

    import java.util.concurrent.atomic.AtomicInteger; /* * 一.i++ 的原子性问题:i++ 的操作实际上分为三个步骤“读-改-写” * int i ...

  4. 【LOJ】#2017. 「SCOI2016」围棋

    题解 考虑到状态数比较复杂,其实我们需要轮廓线dp-- 我们设置\(f[x][y][S][h][k]\)为考虑到第(x,y)个格子,S是轮廓线上的匹配状态,是二进制,如果一位是1表示这一位匹配第一行匹 ...

  5. Python全栈开发之4、内置函数、文件操作和递归

    转载请注明出处http://www.cnblogs.com/Wxtrkbc/p/5476760.html 一.内置函数 Python的内置函数有许多,下面的这张图全部列举出来了,然后我会把一些常用的拿 ...

  6. ZOJ 3954 Seven-Segment Display

    二分图匹配. 先检查每个数字$1$的个数是否满足条件,不满足直接就是无解.剩下的情况可以建立二分图,如果现在的某一列可以对应于原图的某一列,那么建边.如果二分图的最大匹配是$7$,则有解,否则误解. ...

  7. SQL1:基础

    1.SQL命令类型: 1)DDL:CREATE TABLE/INDEX/VIEW ; ALTER TABLE/INDEX/VIEW ; DROP TABLE/INDEX 2)DML:INSERT,UP ...

  8. Django+Nginx+uwsgi搭建自己的博客(五)

    在上一篇博文中,向大家介绍了Users App和Index的前端部分的实现,以及前端与Django的通信部分.至此,我们的博客已经具备一个简单的雏形,可以将其部署在本地的服务器上了.目前较为流行的we ...

  9. python每天定时发送短信脚本

    最近业务上需要每天解析txt文本或者excel文件,读取内容发送短信,发送的时间段可控,用python实现 安装pip依赖 pip install -r requirement.txt xlrd Py ...

  10. 在Azure中创建asp.net core 应用

    0.前言 在玩转Azure之前首先大家要有Azure账号,或者可以先申请一下微软的账号,然后进行与Azure的关联(azure账号是免费的).但是关联的步骤还是很有意思的,他需要VISA国际信用卡(我 ...