java - 将原始 sql 查询映射到 DTO 对象 Spring
问题描述
弹簧启动,Java 11,POSTGRES
我有一个很大的 SQL 查询:
select c.id,c.image_url,c.status,c.name, cat.id,cat.name
from client_organization o join organization c
on o.organization_id = c.id
join client w on o.client_id = w.id
join org_category cat on c.category_id = cat.id
where w.id = ?
所以我需要将给定的结果转换为数据传输对象列表(DTO)。如果它很重要,这是我的 DTO(不包括构造函数、getter 和 setter):
public class OrganizationListDto {
Long id;
String image;
Boolean status;
String name;
Long categoryId;
String categoryName;
}
几天来我一直在寻找解决方案,发现这个操作可以通过不同的方式实现(jdbc、hibernate 等)所以请解释一下我需要什么以及何时需要使用它们?如何实现这个操作?
解决方案
Follow the below approach have used spingJpa
@Service 公共类 OrganizationServiceImpl
{
@Autowired
OrganizationListRepository organizationListRepository;
public OrganizationListDto fetch(usrId)
{
OrganizationListDto orgListData = new OrganizationListDto();
List<OrganizationListMapping> orgData = organizationListRepository.fetchData(usrId);
BeanUtils.copy(orgData,orgListData)
return orgData;
}
}
@Repository 公共接口 OrganizationListRepository 扩展 JpaRepository{
@Query(native="true",value="select cat.id as id,cat.name as name
from client_organization o join organization c
on o.organization_id = c.id
join client w on o.client_id = w.id
join org_category cat on c.category_id = cat.id
where w.id = usrId"
OrganizationListMapping fetchData(@Param ("usrId") Integer usrId);
}
public interface OrganizationListMapping {
public Long getId();
public String getName();
}
public class OrganizationListDto {
Long id;
String name;
}
推荐阅读
- python - 使用根记录器禁用来自导入模块的日志
- python - 'Line 2D' 对象没有属性 'kind' -- pyplot.plot() 和 .plot() 不同吗?
- android - 用谷歌地图规划路线
- c++ - 在数字右侧使用左移运算符
- java - 使用 Gradle 将目录压缩到多个目的地
- api - 如何将 API 输出数据保存到 Azure 数据工厂中的数据集
- c - 我在 scanf 中的输入不起作用,返回进程并且我没有得到任何输出
- admob - Admob 上的应用打开广告 - 测试广告上没有广告配置
- python - 对数组的每个元素执行相同操作的最快方法
- ios - 自定义 XCFramework 的消费者如何访问标头文档?