Java : Hibernate 动态+分页+自定义字段+自定义实体类查询
// 组合查询
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 动态+分页+自定义字段+自定义实体类查询的更多相关文章
- hibernate映射实体类查询时数据库空字段赋值给实体类报错的问题
因为一直报实体类空异常,去网上查了资料只查到了并没有查到数据库空值时不给实体类赋值的属性 异常 org.hibernate.InvalidMappingException: Could not par ...
- Jackson解析自定义json到实体类
json文本 { "status": 0, "result": { "final": true, "hypotheses" ...
- Hibernate框架学习之注解映射实体类
前面的相关文章中,我们已经介绍了使用XML配置文件映射实体类及其各种类型的属性的相关知识.然而不论是时代的潮流还是臃肿繁杂的配置代码告诉我们,注解配置才是更人性化的设计,于是学习了基本的映射 ...
- hibernate通过数据库表反向生成实体类
步骤一: window-->open Perspective-->MyEclipse Java Persistence 进行了上面的 操作后会出现一个视图DB Brower:MyEcl ...
- OrmLite动态创建表,一个实体类创建多张表的的偏招
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/LonelyRoamer/article/details/26299355 在做一个Android的项 ...
- Mybatis动态构建Sql(无实体类)
MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑. 例如,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询 ...
- EF时,数据库字段和实体类不一致问题
场景:由于一些原因,实体中属性比数据库中字段多了一个startPage属性.PS:controllers中用实体类去接收参数,但是传入的参数比数据库中实体表多了一个字段, 这种情况下,应该建一个vie ...
- java 使用反射在dto和entity 实体类之间进行转换
package com.example.demo.utils; import java.lang.reflect.Method; import java.util.List; import com.e ...
- Java课程设计---项目数据库设计(含实体类)
1.表设计 (1)新建表tb_student(学生表) (2)新建表tb_admin(管理员表) (3)新建表tb_teacher(教师表) (4)新建表tb_course(课程表) (5)新建表tb ...
随机推荐
- PHP MySQLi 参考手册
PHP MySQLi函数 PHP MySQLi是MySQL的增强版本,PHP7 已经废弃了MySQL扩展,全面推荐使用MySQLi或者PDO. MySQLi安装>>>>> ...
- Electron使用时拦截HTTP请求的解决方案
背景 最近在做一个Web和Electron共用一份代码的工程,由于使用到了第三方的库(我们是在线地图),该库的认证方式是请求时加key,并且它在后台会校验referer. 于是问题就来了,Electr ...
- Kibana插件开发
当前开发环境 Kibana版本:7.2 elasticsearch版本:7.2 开发环境安装可参考:https://github.com/elastic/kibana/blob/master/CONT ...
- updataStateByKey算子的使用
updataStateByKeyApp.scala import org.apache.spark.SparkConf import org.apache.spark.streaming.{Secon ...
- linux 进程通信之 守护进程
守护进程(Daemon) Daemon(精灵)进程,是linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的时间.一般采用以d结尾的名字.从下面的进程信息可以看出, ...
- http异步通信
get 请求1)创建一个XMLHttpRequest对象2)调用该对象的open方法3)如果是get请求,设置回调函数onreadystatechange = callback4)Send如果是pos ...
- datagrid editor动态的改变不同行修改列的editor属性
onBeforeEdit: function (row) { let options = $(this).treegrid('options'); options.tempeditor = optio ...
- Python获取帮助的3种方式(转载)
我们可以很容易的通过Python解释器获取帮助.如果想知道一个对象(object)更多的信息,那么可以调用help(object)!另外还有一些有用的方法,dir(object)会显示该对象的大部分相 ...
- uiautomator手动调试与快速高度设置
创建java工程:Demo1包名:com.bing.cn类名:Test测试用例:testDemo android create uitest-project -n Demo1 -t 7 -p E:\e ...
- 【使用篇二】SpringBoot单元测试(10)
SpringCloud单元测试:https://www.cnblogs.com/myitnews/p/11796321.html 1. 创建项目Maven Project,修改pom.xml < ...