JAVA SQL 查询结果映射之构造函数映射
这是 SQL 结果集映射系列的第三篇。在本系列的第一篇文章中,我们查看了查询结果和单个实体之间的一些映射定义。第二篇文章中的映射定义则更为复杂,因为我们将查询结果映射到了多个实体并处理了额外的字段。本文中,我们将查看 JPA 2.1 中引入的构造函数结果映射。该特性允许你使用查询结果调用值对象的构造函数,类似于 JPQL 构造函数表达式。如果我们想向客户端提...
JAVA SQL 查询结果映射之复杂映射
这是 SQL 查询结果映射的第二篇。我们在结果集映射的第一篇文章《基础篇》中了解了一些基本的结果类型映射。本文中,我们将定义更复杂的映射,这些映射可以将查询结果映射到多个实体,并处理无法映射到特定实体的其他字段。示例在我们深入研究更复杂的映射之前,让我们先看看将用于示例的实体模型。我们在本系列的第一篇文章中使用了 Author 实体,该实体具有 id、版本、...
JAVA SQL 查询结果映射之基础篇
通常,JPQL的功能不足以执行我们在现实项目中需要的查询。一般来说,这不是一个问题,因为 JPA 被设计为一个有漏洞的抽象,我们可以通过使用原生查询或调用存储过程来充分利用 SQL 的潜力。唯一的缺点是,这些查询返回的是 Object[] 的 List,而不是我们习惯使用的映射实体和值对象。每个 Object[] 都包含一条由数据库返回的记录。然后,我们需要...
如何使用 JPA 和 Hibernate 调用原生 SQL 查询
Java 持久化查询语言(JPQL)是使用 JPA 从数据库中查询数据的最常见方法。它使你能够重用映射定义,并且比 SQL 更易于使用。但它只支持 SQL 标准的一小部分,而且也不支持数据库特定的功能。那么,如果要使用特定于数据库的查询功能,或者 DBA 为你提供了一个无法转换为 JPQL 的高度优化的查询,该怎么办呢?忽略它并在 Java 代码...
Hibernate: 如何原生查询的控制缓存无效
问题描述:“有人告诉我,原生查询会从我的二级缓存中删除所有实体。但你仍然在推荐他们。它们不会对性能产生负面影响吗?”方案:是的,有些原生查询会使二级缓存失效。但是不用担心,如果你做得正确,它不会对性能产生任何负面影响,也不会改变我对于使用原生查询的建议。我们首先需要讨论哪种原生查询会使二级缓存失效。哪些原生查...
Java ExecutorService 指南
ExecutorService 是一个 JDK API,它简化了在异步模式下运行任务。一般来说,ExecutorService 自动提供一个线程池和一个 API,用于向其分配任务。创建 ExecutorService 最简单的方法是使用 Executors 类的工...
Java 并发面试题及答案
Java 中的并发是在技术面试中提出的最复杂和最高级的主题之一。这篇文章提供了你可能遇到的一些面试问题的答案。Q1. 进程和线程的区别进程和线程都是并发单元,但它们有一个根本的区别:进程不共享公共内存,而线程共享。从操作系统的角度来看,进程是在自己的虚拟内存空间中运行的独立软件。任何多任务操作系统(几乎所有现代操作系统)都必须在内存中分离进程,这样...
OpenJDK 的 Loom 项目
本文中,我们将快速了解 Loom 项目。从本质上讲,Loom 项目的主要目标是支持 Java 中的高吞吐量、轻量级并发模型。Loom 项目是 OpenJDK 社区为 Java 引入轻量级并发结构的一次尝试。到目前为止,Loom 的原型已经在 JVM 和 Java 库中引入了一次更改。虽然 Loom 还没有计划发布,但我们可以在 ...
推荐的 Spring Boot 项目的包结构
在构建一个新的 Spring Boot 项目时,我们可以高度灵活地组织我们的类。不过,还是有一些建议需要我们牢记。鉴于像 @ComponentScan、@EntityScan、@ConfigurationPropertiesScan 和 @SpringBootApplication 这样的 Spring Boot 注解使用包来定义扫描位置,...
JAVA 阻塞队列 java.util.concurrent.BlockingQueue 指南
本文中,我们将研究解决并发生产者-消费者问题的最有用的构造之一 java.util.concurrent。我们将研究 BlockingQueue 接口的 API,以及来自该接口的方法如何使编写并发程序变得更容易。在本文的后面,我们将展示一个简单程序的示例,该程序具有多个生产者线程和多个消费者线程。我们可以区分两...