// 组合查询
public List<ListBookDTO> listSetDSL(PublishingHouse publishingHouse,Integer minDiscount, Integer maxDiscount, Integer minStocks, Integer maxStocks, Integer page, Integer pageSize) {
CriteriaBuilder builder = em.getCriteriaBuilder();
// 指明返回类型
CriteriaQuery<ListBookDTO> criteriaQuery = builder.createQuery(ListBookDTO.class);
Root<Book> root = criteriaQuery.from(Book.class);
// 动态条件
List<Predicate> pList = new ArrayList<>();
if (publishingHouse != null) {
pList.add(builder.isNotNull(root.get("publishingHouse")));
pList.add(builder.equal(root.get("publishingHouse").as(PublishingHouse.class), publishingHouse));
}
if (minDiscount != null) {
pList.add(builder.isNotNull(root.get("discount")));
pList.add(builder.greaterThan(root.get("discount"), minDiscount));
}
if (minDiscount == null && maxDiscount != null) {
pList.add(builder.isNotNull(root.get("discount")));
pList.add(builder.lessThan(root.get("discount"), maxDiscount));
}
if (minStocks != null) {
pList.add(builder.isNotNull(root.get("stocks")));
pList.add(builder.greaterThan(root.get("stocks"), minStocks));
}
if (maxStocks != null) {
pList.add(builder.isNotNull(root.get("stocks")));
pList.add(builder.lessThan(root.get("stocks"), maxStocks));
}
Predicate[] predicates = new Predicate[pList.size()];
criteriaQuery.where(builder.and(pList.toArray(predicates))); // 条件
criteriaQuery.orderBy(builder.desc(root.get("id"))); // 排序
criteriaQuery.select(builder.construct(ListBookDTO.class,root.get("id"), root.get("name"), root.get("publishingHouse")));
TypedQuery<ListBookDTO> query = em.createQuery(criteriaQuery);
query.setFirstResult(page - 1).setMaxResults(pageSize); // 分页
return query.getResultList();
}

Java : Hibernate 动态+分页+自定义字段+自定义实体类查询的更多相关文章

  1. hibernate映射实体类查询时数据库空字段赋值给实体类报错的问题

    因为一直报实体类空异常,去网上查了资料只查到了并没有查到数据库空值时不给实体类赋值的属性 异常 org.hibernate.InvalidMappingException: Could not par ...

  2. Jackson解析自定义json到实体类

    json文本 { "status": 0, "result": { "final": true, "hypotheses" ...

  3. Hibernate框架学习之注解映射实体类

         前面的相关文章中,我们已经介绍了使用XML配置文件映射实体类及其各种类型的属性的相关知识.然而不论是时代的潮流还是臃肿繁杂的配置代码告诉我们,注解配置才是更人性化的设计,于是学习了基本的映射 ...

  4. hibernate通过数据库表反向生成实体类

      步骤一: window-->open Perspective-->MyEclipse Java Persistence 进行了上面的 操作后会出现一个视图DB Brower:MyEcl ...

  5. OrmLite动态创建表,一个实体类创建多张表的的偏招

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/LonelyRoamer/article/details/26299355 在做一个Android的项 ...

  6. Mybatis动态构建Sql(无实体类)

    MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑. 例如,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询 ...

  7. EF时,数据库字段和实体类不一致问题

    场景:由于一些原因,实体中属性比数据库中字段多了一个startPage属性.PS:controllers中用实体类去接收参数,但是传入的参数比数据库中实体表多了一个字段, 这种情况下,应该建一个vie ...

  8. java 使用反射在dto和entity 实体类之间进行转换

    package com.example.demo.utils; import java.lang.reflect.Method; import java.util.List; import com.e ...

  9. Java课程设计---项目数据库设计(含实体类)

    1.表设计 (1)新建表tb_student(学生表) (2)新建表tb_admin(管理员表) (3)新建表tb_teacher(教师表) (4)新建表tb_course(课程表) (5)新建表tb ...

随机推荐

  1. python如何通过windows命令行运行一个python程序文件?

    python如何通过windows命令行运行一个python程序文件? cmd 进入到py文件对应目录下或者直接在上面的文件地址栏输入cmd,敲入回车 定位到对应的目录下 输入python xxx.p ...

  2. Mysql EF Core 快速构建 Web Api

    (1)首先创建一个.net core web api web项目; (2)因为我们使用的是ef连接mysql数据库,通过NuGet安装MySql.Data.EntityFrameworkCore,以来 ...

  3. Android源码分析(六)-----蓝牙Bluetooth源码目录分析

    一 :Bluetooth 的设置应用 packages\apps\Settings\src\com\android\settings\bluetooth* 蓝牙设置应用及设置参数,蓝牙状态,蓝牙设备等 ...

  4. 百度云部署SSL证书

    查找中间证书 为了确保兼容到所有浏览器,我们必须在阿里云上部署中间证书,如果不部署证书,虽然安装过程可以完全也不会报错,但可能导致Android系统,Chrome 和 Firefox等浏览器无法识别. ...

  5. linux命令提示符解析

    linux命令提示符 命令窗口中[root@chengfeng ~]# 表示什么意思?       root        当前登录终端的用户      chengfeng     主机名(/etc/ ...

  6. 过滤身份证号和grep复习

    一.把身份证号过滤出来 我们还是从一道面试题说起. 请从test.txt文件当中过滤出正确的的身份证号码 [root@localhost test.dir]# cat test.txt 赵 37083 ...

  7. sed练习2

    [root@node2 ~]# cp /etc/passwd /server/scprits/ [root@node2 ~]# cd /server/scprits/ [root@node2 scpr ...

  8. socket_http

    socket_http import socket from urllib.parse import urlparse import time def get_url(url): # 通过socket ...

  9. scp、rsync、xsync

    scp. 拷贝完全相同 scp -r etc/hadoop/dfs.hosts root@192.168.121.134:/usr/local/hadoop/hadoop-2.7.6/etc/hado ...

  10. 系统监控工具glances

      glances是一款由python开发的系统监控工具,可以实时查看CPU.内存.网络.IO.进程.磁盘空间使用率的使用情况,并且支持三种运行模式,个人感觉比top命令使用更便捷: 安装glance ...