3.3.2 查询——Criteria
来源:互联网 发布:鬼子来了被禁 知乎 编辑:程序博客网 时间:2024/06/06 10:44
Criteria查询是一种可编程的、类型安全的方式来表示查询。Criteria 查询采用面向对象方式封装查询条件,又称为对象查询;就是对SQL 语句进行封装,采用对象的方式来组合各种查询条件。由Hibernate 自动产生SQL 查询语句
条件生成器,负责构建整个查询条件,得到Criteria对象。
动态查询的步骤:
1.CriteriaBuilder
CriteriaBuilder builder = super.entityManager.getCriteriaBuilder();
2.CriteriaQueryCriteriaQuery<Order> query = builder.createQuery(Order.class);
3.Root表示要查询的数据类型的抽象,通过Root可以得到属性的各种表达式
Root<Order> root = query.from(Order.class);
4.ExpressionPredicate predicate = builder.between(root.get("orderTime"), start, end);
query.where(predicate);query.orderBy(builder.desc(root.get("id")));
5.TypedQueryTypedQuery<Order> orderQuery = super.entityManager.createQuery(query);
6.查询结果
orderQuery.getResultList();
例子:
(1)
(2)分页查询
User user = new User();user.setId(1L);// 查出对应用户所有订单CriteriaBuilder builder = super.entityManager.getCriteriaBuilder();CriteriaQuery<Order> criteria = builder.createQuery(Order.class);Root<Order> root = criteria.from(Order.class);criteria.select(root);criteria.where(builder.equal(root.get("user"), user));// 查出对应用户所有订单数量CriteriaQuery<Long> numQuery = builder.createQuery(Long.class);Root<Order> numRoot = numQuery.from(Order.class);Expression<Long> expr = builder.count(numRoot.get("id"));numQuery.select(expr);numQuery.where(builder.equal(numRoot.get("user"), user));Long count = super.entityManager.createQuery(numQuery).getSingleResult();// 进行分页// 设置当前页面int pageSize = 20;int currentPage = 4;// 计算总页数int totalPages = (int) (count / pageSize == 0 ? count / pageSize: count / pageSize + 1);if (currentPage > totalPages) {currentPage = totalPages;}TypedQuery<Order> resQuery = super.entityManager.createQuery(criteria);int firstResult = (currentPage - 1) * pageSize; resQuery.setFirstResult(firstResult);//设置第一条返回结果的位置 resQuery.setMaxResults(pageSize);//设置返回结果最大条数// 计算查询所用时间long before = System.currentTimeMillis();List<Order> resList = resQuery.getResultList();long useTime = System.currentTimeMillis() - before;System.out.println("所用时间" + useTime);System.out.println(resList.size());System.out.println(resList.get(0).getId());
阅读全文
0 0
- 3.3.2 查询——Criteria
- hibernate查询——criteria查询
- Hibernate查询—利用Criteria完成表的查询操作
- Hibernate入门实例——条件查询(Criteria queries)
- NHibernate说探——Criteria条件查询
- Hibernate学习总结(6)——Criteria查询
- Criteria——Hibernate的面向对象查询
- SSH与SSM学习之hibernate14——Criteria查询
- Criteria查询
- Criteria查询
- Criteria查询
- Criteria查询
- Criteria查询
- Criteria查询
- Criteria查询
- Criteria查询
- Criteria查询
- Criteria查询
- LintCode 第366题 斐波纳契数列 【枚举法】
- HibernateSessionFactory==session工厂类
- jwplayer 初始化设置项
- servlet的四种响应
- java 获取本月最后一天,明天,昨天
- 3.3.2 查询——Criteria
- linux中shell,awk,sed截取字符串方法总结 Shell 第一种: ${parameter%word} 最小限度从后面截掉word ${parameter%%word} 最大限度从后面
- 数据库中date类型
- Django 时间比本地实际时间慢8小时
- WebView加载H5
- Android Studio:Intent、Bundle、RecyclerView、ListView的使用
- python中pandas库学习笔记
- JAVA 实现 验证最完全的单例设计模式
- 性能测试:一个完整的性能测试过程