public interface HarmBehavorHardwareParaMapper extends CommonMapper<HarmBehavorHardwarePara> {
@Select("select distinct rc.vehicle_id,rc.node_id,rc.project_id,hi.hardware_id,hi.hardware_id as 'hardware_ids',hi.hardware_name,hi.hardware_code,ef.function_id, ef.function_id as 'func_id',ef.function_code,ef.function_description,hi.id as 'hardware_info_id' ,ef.id as 'element_function_id', "+
"ep2.dict_name as 'hardware_location',ep3.dict_name as 'hardware_type' "+
"from relational_component rc,element_function ef,hardware_info hi "+
"left join element_parameter ep2 on hi.hardware_location = ep2.parameter_id and ep2.delete_flag = '0' "+
"Left join element_parameter ep3 on hi.hardware_type = ep3.parameter_id and ep3.delete_flag = '0' "+
"where rc.vehicle_id = #{vehicleId} and rc.relational_type = 'HW' " +
"and rc.element_id = hi.hardware_id and hi.hardware_id = ef.element_id "+
"and rc.delete_flag = '0' and hi.delete_flag = '0' and ef.delete_flag = '0' and rc.element_id is not null "+
"order by hi.id asc,ef.id asc"
)
@Results({
@Result(property = "params", column = "hardware_ids",
many = @Many(select = "com.saimo.sotif.fmea.harmBehavor.mapper.HarmBehavorHardwareParaMapper.findHardwareParam")),
@Result(property = "leads", column = "{vehicleId = vehicle_id,hardwareId=hardware_ids,funcId=func_id}",
many = @Many(select = "com.saimo.sotif.fmea.harmBehavor.mapper.HarmBehavorHardwareParaMapper.findLeadType"))
})
public IPage<Map<String, Object>> findHarmBehavorHardwarePara(Page page, String vehicleId);
@Select("SELECT indicator_name as 'parameterName',indicator_unit as 'unit',indicator_value as 'parameterValue' FROM hardware_indicator_parameters WHERE hardware_id = #{hardwareId} and delete_flag = '0' ")
List<HardwareParaVO> findHardwareParam(String hardwareId);
@Select("select hbd.business_id as 'onlyId',hbi.only_id as 'dictId',hbi.description as 'dictValue',hbi.code as 'dictCode',hbd.lead_type as 'leadType' "+
"from harm_behavor_hardware_para hbsf left join harm_behavor_detail hbd "+
"on hbsf.only_id = hbd.business_id and hbd.delete_flag = 0 "+
"left join harm_behavor_info hbi on hbd.harm_behavor_id = hbi.only_id and hbi.delete_flag = 0 "+
"where hbsf.vehicle_id = #{vehicleId} and hbsf.hardware_id = #{hardwareId} and hbsf.func_id = #{funcId} and hbsf.delete_flag = 0 and hbd.business_type ='2' "
)
List<HarmBehavorVO> findLeadType(String vehicleId,String hardwareId, String funcId);
}
在 MyBatis Plus 中進行一對多映射查詢,你可以通過使用注解 `@TableField` 和 `@TableId` 來建立實體類之間的關(guān)聯(lián)關(guān)系。
下面是一對多映射查詢的一般步驟:
1. 創(chuàng)建實體類:
- 創(chuàng)建主實體類(一的一方)和關(guān)聯(lián)實體類(多的一方)。
- 在主實體類中,使用 `@TableId` 注解標記主鍵字段,使用 `@TableField` 注解標記關(guān)聯(lián)字段。
- 在關(guān)聯(lián)實體類中,使用 `@TableField` 注解標記關(guān)聯(lián)字段。
2. 創(chuàng)建Mapper接口:
- 創(chuàng)建主實體類對應的Mapper接口,繼承 `BaseMapper` 接口。
- 定義方法用于查詢一對多關(guān)聯(lián)數(shù)據(jù),可以使用 `@Select` 注解或者 XML 配置來編寫查詢語句。
3. 編寫查詢邏輯:
- 在查詢方法中,通過 MyBatis Plus 的查詢構(gòu)造器 `QueryWrapper` 來構(gòu)建查詢條件。
- 使用 `selectList` 方法進行查詢,并指定要關(guān)聯(lián)的關(guān)聯(lián)字段。
以下是一個簡單的示例:
主實體類 User:
```java
public class User {
@TableId
private Long id;
private String username;
@TableField(exist = false)
private List<Order> orders;
// 省略 getter 和 setter 方法
}
```
關(guān)聯(lián)實體類 Order:
```java
public class Order {
@TableId
private Long id;
private String orderNo;
private Long userId;
// 省略 getter 和 setter 方法
}
```
UserMapper 接口:
```java
public interface UserMapper extends BaseMapper<User> {
@Select("SELECT * FROM user")
@Results({
@Result(property = "orders", column = "id",
many = @Many(select = "com.example.mapper.OrderMapper.findByUserId"))
})
List<User> findAllWithOrders();
}
```
OrderMapper 接口:
```java
public interface OrderMapper extends BaseMapper<Order> {
@Select("SELECT * FROM orders WHERE user_id = #{userId}")
List<Order> findByUserId(Long userId);
}
```
在上述示例中,通過 `@Results` 注解和 `@Many` 注解建立了主實體類 User 和關(guān)聯(lián)實體類 Order 之間的關(guān)系,指定了關(guān)聯(lián)查詢方法 `findByUserId`。在 UserMapper 接口的 `findAllWithOrders` 方法中,使用了 `@Select` 注解來編寫 SQL 查詢語句,并通過 `@Results` 注解將查詢結(jié)果關(guān)聯(lián)到 User 實體類的 orders 字段。
通過以上步驟,你可以實現(xiàn)一對多關(guān)聯(lián)查詢。調(diào)用 `findAllWithOrders` 方法即可查詢出包含關(guān)聯(lián)數(shù)據(jù)的 User 對象列表。