Spring Data Jpa 获取没有实体表示的数据
Spring Data Jpa to get data which doesn't have entity representation
我正在尝试找到将我的数据映射到 ORM 上的最佳方法。我有一个查询,它从 MySQL 数据库中获取数据,看起来像
SELECT d.ID AS Id,
equipment.EQUIP_ID,
equipment.EQUIP_REFERENCE
FROM
tbl_devices d
INNER JOIN
tbl_equipment equipment ON equipment.EQUIP_ID = d.DEV_ID
使用 Spring 引导和 Spring 数据获取这些数据的最佳方法是什么?
我应该使用 @Query 注释并执行此操作还是以某种方式为设备和设备表创建实体,然后使用 JPQL/HQL 在查询中连接表,但我应该如何映射结果??
提前致谢。
您可以使用 JdbcTemplate
(从 org.springframework.jdbc.core.JdbcTemplate
导入)到 运行 您上面写的 SQL 语句。在您可以创建一个 pojo 以通过 BeanPropertyRowMapper
将结果映射到其中之后。例如:
final String sql = "SELECT d.ID AS Id, equipment.EQUIP_ID, equipment.EQUIP_REFERENCE FROM tbl_devices d INNER JOIN tbl_equipment equipment ON equipment.EQUIP_ID = d.DEV_ID";
YourPojo result = jdbcTemplate.query(
sql,
new BeanPropertyRowMapper<>(YourPojo.class)
);
Pojo class 可能喜欢以下内容:
@Data
public class YourPojo {
private Long id;
private Long equipId;
private Your_type equip_reference_name;
}
一个快速而肮脏的解决方案是使用投影。
首先,您创建一个投影界面:
public interface DeviceDetails {
Long getId();
Long getEquipId();
String getEquipReference();
}
然后修改查询以将列别名与投影属性相匹配:
SELECT d.ID AS id,
equipment.EQUIP_ID as equipId
equipment.EQUIP_REFERENCE As equipReference
...
最后,您将查询方法放入您选择的存储库中:
@Query(value =..., nativeQuery = true)
List<DeviceDetails> findDeviceDetails();
我正在尝试找到将我的数据映射到 ORM 上的最佳方法。我有一个查询,它从 MySQL 数据库中获取数据,看起来像
SELECT d.ID AS Id,
equipment.EQUIP_ID,
equipment.EQUIP_REFERENCE
FROM
tbl_devices d
INNER JOIN
tbl_equipment equipment ON equipment.EQUIP_ID = d.DEV_ID
使用 Spring 引导和 Spring 数据获取这些数据的最佳方法是什么?
我应该使用 @Query 注释并执行此操作还是以某种方式为设备和设备表创建实体,然后使用 JPQL/HQL 在查询中连接表,但我应该如何映射结果??
提前致谢。
您可以使用 JdbcTemplate
(从 org.springframework.jdbc.core.JdbcTemplate
导入)到 运行 您上面写的 SQL 语句。在您可以创建一个 pojo 以通过 BeanPropertyRowMapper
将结果映射到其中之后。例如:
final String sql = "SELECT d.ID AS Id, equipment.EQUIP_ID, equipment.EQUIP_REFERENCE FROM tbl_devices d INNER JOIN tbl_equipment equipment ON equipment.EQUIP_ID = d.DEV_ID";
YourPojo result = jdbcTemplate.query(
sql,
new BeanPropertyRowMapper<>(YourPojo.class)
);
Pojo class 可能喜欢以下内容:
@Data
public class YourPojo {
private Long id;
private Long equipId;
private Your_type equip_reference_name;
}
一个快速而肮脏的解决方案是使用投影。
首先,您创建一个投影界面:
public interface DeviceDetails {
Long getId();
Long getEquipId();
String getEquipReference();
}
然后修改查询以将列别名与投影属性相匹配:
SELECT d.ID AS id,
equipment.EQUIP_ID as equipId
equipment.EQUIP_REFERENCE As equipReference
...
最后,您将查询方法放入您选择的存储库中:
@Query(value =..., nativeQuery = true)
List<DeviceDetails> findDeviceDetails();