当前位置: 首页 > news >正文

spring data jpa使用流式查询

思路

调用org.hibernate.query.Query.stream方法查询数据

代码样例

import static org.hibernate.annotations.QueryHints.READ_ONLY;
import static org.hibernate.jpa.QueryHints.HINT_FETCH_SIZE;
import org.hibernate.query.Query;
  1. 使用HQL查询
Query<MyEntity> q = entityManager.createQuery("select e from MyEntity e where field1 = :field1",MyEntity.class
)
.setParameter("field1", "test")
.setHint(HINT_FETCH_SIZE, Integer.MIN_VALUE) // 根据数据库实现设置,这里是MYSQL
.setHint(READ_ONLY, true)
.unwrap(Query.class);
Stream<MyEntity> stream= q.stream();
stream.close(); // 释放
  1. 使用动态查询
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<MyEntity> query = builder.createQuery(MyEntity.class);
Root<MyEntity> root = query.from(MyEntity.class);
query.where(builder .equal(root.get("field1"), "test"));
query.select(root);
Query<MyEntity> q = entityManager.createQuery(query).setHint(HINT_FETCH_SIZE, Integer.MIN_VALUE).setHint(READ_ONLY, true).unwrap(Query.class);  
Stream<MyEntity> stream= q.stream();
stream.close(); // 释放

直接使用jdbc

jdbcTemplate.query(con -> {String sql = "select * from t_my_entity where fd_field1 = ?";PreparedStatement preparedStatement = this.createPreparedStatement(con, sql, context);statement.setString(1, "test");statement.setFetchSize(Integer.MIN_VALUE);statement.setFetchDirection(ResultSet.FETCH_FORWARD);return preparedStatement;
}, resultSet -> {// 遍历处理结果
});
http://www.lryc.cn/news/23326.html

相关文章:

  • Golang实现RabbitMQ中死信队列各个情况
  • react源码分析:组件的创建和更新
  • Android Lmkd 低内存终止守护程序
  • 快速掌握 Flutter 图片开发核心技能
  • 复习使用git(二)
  • 魔兽世界335服务端架设对外网开放的步骤
  • 华为OD机试模拟题 用 C++ 实现 - 通信误码(2023.Q1)
  • Vue 核心
  • Kylin V10桌面版arm3568 源码安装redis
  • 【ICCV2022】 CAPAO:一种高效的单阶段人体姿态估计模型
  • ROS1学习笔记:ROS中的坐标管理系统(ubuntu20.04)
  • requests---(2)session简介与自动写博客
  • 基于 HAProxy + Keepalived 搭建 RabbitMQ 高可用集群
  • 基于51单片机和proteus的智能调速风扇设计
  • SQL Server开启CDC的完整操作过程
  • 【Spring Cloud Alibaba】008-Sentinel
  • 解读CRC校验计算
  • 深入理解Spring MVC下
  • 【Linux】ssh-keygen不需要回车,自动生成密钥,批量免密操作!
  • C/C++开发,无可避免的内存管理(篇四)-智能指针备选
  • VMware ESXi给虚拟机扩容
  • 认识STM32和如何构建STM32工程
  • RabbitMQ延迟队列
  • Java中常用的七种队列你了解多少?
  • <Java获取时间日期工具类>常见八种场景(一)
  • 接上一篇 对多个模型环形旋转进行优化 指定旋转位置
  • Unity中获取地形的法线
  • 模型解释性:PFI、PDP、ICE等包的用法
  • spring常见面试题(2023最新)
  • 华为OD机试题,用 Java 解【压缩报文还原】问题