如何将 JQPL 查询转换为 DTO?
How to Convert a JQPL Query into a DTO?
我需要知道是否可以将我的 JQPL 查询结果转换为 DTO。
查询结果是这样的Array of Arrays Json:
[
[
ModuleID: number,
ModuleName: string,
ToolId: number,
ToolName: string,
Enabled: boolean
],
]
我想转换成这个 DTO:
public class ModuleDTO {
private Long ModuleID;
private String ModuleName;
private List<ToolsDTO> Tools;
}
public class ToolsDTO {
private Long ToolId;
private String ToolName;
private Boolean Enabled;
}
可以看到最后三个是模块的子模块,这意味着在搜索中可能会有重复的模块,但所有子模块必须在同一个列表中。
这是 Blaze-Persistence Entity Views 的完美用例。
Blaze-Persitence 是基于 JPA 的查询构建器,它支持基于 JPA 模型的许多高级 DBMS 功能。我在它之上创建了实体视图,以允许在 JPA 模型和自定义接口定义的模型之间轻松映射,类似于 Spring 类固醇数据投影。这个想法是您按照自己喜欢的方式定义目标结构,并通过 JPQL 表达式将属性(getter)映射到实体模型。由于属性名称用作默认映射,因此您大多不需要显式映射,因为 80% 的用例都具有作为实体模型子集的 DTO。
您没有指定实体模型,所以我将在这里假设一些事情。映射可能看起来像下面这样简单
@EntityView(Module.class)
interface ModuleDTO {
@IdMapping
Long getModuleId();
String getModuleName();
List<ToolsDTO> getTools();
}
@EntityView(Tools.class)
interface ToolsDTO {
@IdMapping
Long getToolId();
String getToolName();
Boolean getEnabled();
}
查询就是将实体视图应用于查询,最简单的就是通过 id 进行查询。
ModuleDTO dto = entityViewManager.find(entityManager, ModuleDTO.class, id);
但是 Spring 数据集成让您几乎可以像 Spring 数据投影一样使用它:https://persistence.blazebit.com/documentation/entity-view/manual/en_US/index.html#spring-data-features
它只会获取您告诉它获取的映射
我需要知道是否可以将我的 JQPL 查询结果转换为 DTO。
查询结果是这样的Array of Arrays Json:
[
[
ModuleID: number,
ModuleName: string,
ToolId: number,
ToolName: string,
Enabled: boolean
],
]
我想转换成这个 DTO:
public class ModuleDTO {
private Long ModuleID;
private String ModuleName;
private List<ToolsDTO> Tools;
}
public class ToolsDTO {
private Long ToolId;
private String ToolName;
private Boolean Enabled;
}
可以看到最后三个是模块的子模块,这意味着在搜索中可能会有重复的模块,但所有子模块必须在同一个列表中。
这是 Blaze-Persistence Entity Views 的完美用例。
Blaze-Persitence 是基于 JPA 的查询构建器,它支持基于 JPA 模型的许多高级 DBMS 功能。我在它之上创建了实体视图,以允许在 JPA 模型和自定义接口定义的模型之间轻松映射,类似于 Spring 类固醇数据投影。这个想法是您按照自己喜欢的方式定义目标结构,并通过 JPQL 表达式将属性(getter)映射到实体模型。由于属性名称用作默认映射,因此您大多不需要显式映射,因为 80% 的用例都具有作为实体模型子集的 DTO。
您没有指定实体模型,所以我将在这里假设一些事情。映射可能看起来像下面这样简单
@EntityView(Module.class)
interface ModuleDTO {
@IdMapping
Long getModuleId();
String getModuleName();
List<ToolsDTO> getTools();
}
@EntityView(Tools.class)
interface ToolsDTO {
@IdMapping
Long getToolId();
String getToolName();
Boolean getEnabled();
}
查询就是将实体视图应用于查询,最简单的就是通过 id 进行查询。
ModuleDTO dto = entityViewManager.find(entityManager, ModuleDTO.class, id);
但是 Spring 数据集成让您几乎可以像 Spring 数据投影一样使用它:https://persistence.blazebit.com/documentation/entity-view/manual/en_US/index.html#spring-data-features
它只会获取您告诉它获取的映射