詳解mybatis collection標(biāo)簽一對多的使用
查詢, 結(jié)果集為AssociatedInfo:
<select id="queryReportAssociatedAcp" resultMap="AssociatedInfo">
SELECT
r.requisition_number AS business_code,
r.id AS header_id,
r.document_type_id AS reportTypeId,
r.applicant_id as employeeId
FROM
fec_expense.exp_report_payment_schedule b,fec_expense.exp_report_header r
WHERE
b.exp_report_header_id=r.id and r.`status`=1004
and
b.frozen_flag ="Y"
and r.applicant_id=#{applicationId}
<if test="reportNumber!=null and reportNumber != ''">
AND r.requisition_number LIKE concat(
'%',
concat(#{reportNumber,jdbcType=VARCHAR}, '%'))
</if>
<if test="documentTypeId !=null and reportNumber != ''">
AND r.document_type_id = #{documentTypeId}
</if>
<if test="formTypes != null and formTypes.size > 0">
AND r.document_type_id IN
<foreach collection="formTypes" item="formId" open="(" separator="," close=")">
#{formId}
</foreach>
</if>
AND (
b.amount - ( SELECT
COALESCE(sum( c.write_off_amount ), 0) AS write_off_amount
FROM
csh_write_off c
WHERE
c.document_header_id = b.exp_report_header_id
AND c.document_line_id = b.id
AND ( c.STATUS = 'Y' OR ( c.STATUS = 'P' AND c.operation_type = 'WRITE_OFF' ) )
) - (
SELECT
COALESCE(sum( a.amount ), 0) AS commit_amount
FROM
csh_data_relation_acp a
WHERE
a.report_head_id = b.exp_report_header_id
AND a.report_line_id = b.id
AND a.document_type = 'ACP_REQUISITION'
) > 0
)
GROUP BY
r.requisition_number,
b.exp_report_header_id,
r.document_type_id,
b.applicant_id
ORDER BY
r.requisition_number
</select>
結(jié)果集 AssociatedInfo: 使用collection 實(shí)現(xiàn)1對多的場景, CashDataPublicReportHeaderDTO實(shí)體里包含一個行的集合List<CashDataPublicReportLineDTO> lines:
<resultMap id="AssociatedInfo" type="com.hand.hcf.app.payment.web.dto.CashDataPublicReportHeaderDTO">
<result column="header_id" property="reportHeadId"/>
<result column="business_code" property="reportNumber"/>
<result column="form_name" property="reportTypeName"/>
<collection property="lineList" column="{headerId=header_id}"
ofType="ArrayList" select="getPaymentInfo"/>
</resultMap>
<select id="getPaymentInfo" resultType="com.hand.hcf.app.payment.web.dto.CashDataPublicReportLineDTO">
SELECT
temp.id scheduleLineId,
"" AS cshTransactionId,
temp.amount,
temp.associated_amount associatedAmount,
(
temp.amount - temp.associated_amount - (
SELECT COALESCE
( sum( c.write_off_amount ), 0 ) AS write_off_amount
FROM
csh_write_off c
WHERE
c.document_header_id = temp.exp_report_header_id
AND c.document_line_id = temp.id
AND c.document_type = "PUBLIC_REPORT"
AND ( c.STATUS = 'Y' OR ( c.STATUS = 'P' AND c.operation_type = 'WRITE_OFF' ) )
)
) AS availableAmount,
temp.exp_report_header_id expReportHeaderId,
0 AS scheduleLineNumber,
temp.company_id companyId,
temp.currency_code currency,
temp.description description,
temp.exchange_rate exchangeRate,
temp.payment_schedule_date schedulePaymentDate,
temp.payment_method paymentMethod,
temp.payment_type,
temp.prop_flag prop_flag,
temp.csh_transaction_class_id cshTransactionClassId,
( SELECT ctc.description FROM csh_transaction_class ctc WHERE ctc.id = temp.csh_transaction_class_id ) AS cshTransactionClassName,
temp.cash_flow_item_id cashFlowItemId,
temp.payee_category payeeCategory,
temp.payee_id payeeId,
temp.account_number accountNumber,
temp.account_name accountName,
temp.bank_code bankCode,
temp.bank_name bankName,
temp.bank_code bankLocationCode,
temp.bank_name bankLocationName,
"" provinceCode,
"" provinceName,
""cityCode,
"" cityName,
(select c.type_code from csh_transaction_class c where c.id=temp.csh_transaction_class_id ) cshTransactionTypeCode,
""contractHeaderId
FROM
(
SELECT
b.*,
(
SELECT COALESCE
( sum( a.amount ), 0 ) AS associated_amount
FROM
csh_data_relation_acp a
WHERE
a.report_head_id = b.exp_report_header_id
AND a.report_line_id = b.id
AND a.document_type = 'ACP_REQUISITION'
) AS associated_amount
FROM
fec_expense.exp_report_payment_schedule b ,fec_expense.exp_report_header r
WHERE
b.frozen_flag = "Y"
and b.exp_report_header_id=r.id
AND b.exp_report_header_id = #{headerId}
) temp
</select>
包含列表的實(shí)體類 CashDataPublicReportHeaderDTO :
package com.hand.hcf.app.payment.web.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.time.ZonedDateTime;
import java.util.List;
@Data
public class CashDataPublicReportHeaderDTO {
@JsonSerialize(using = ToStringSerializer.class)
private Long reportHeadId;//報賬單頭ID
private String reportNumber;//報賬單編號
private String reportTypeName;//報賬單類型
@JsonSerialize(using = ToStringSerializer.class)
private Long reportTypeId;// 報賬單類型ID
private List<CashDataPublicReportLineDTO> lineList;//報賬單計劃付款行
@JsonSerialize(using = ToStringSerializer.class)
private Long employeeId;//員工ID
private String employeeName;//員工名稱
private ZonedDateTime requisitionDate; // 申請日期
}
總結(jié)
到此這篇關(guān)于mybatis collection標(biāo)簽一對多的使用的文章就介紹到這了,更多相關(guān)mybatis collection標(biāo)簽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- mybatis collection 多條件查詢的實(shí)現(xiàn)方法
- Mybatis中collection和association的使用區(qū)別詳解
- Mybatis中Collection集合標(biāo)簽的使用詳解
- 詳解mybatis foreach collection示例
- mybatis 中 foreach collection的用法小結(jié)(三種)
- 解決mybatis 中collection嵌套collection引發(fā)的bug
- mybatis使用collection嵌套查詢的實(shí)現(xiàn)
- Mybatis之a(chǎn)ssociation和collection用法
- MyBatis中的collection兩種使用方法及效率比較
相關(guān)文章
關(guān)于Java父類沒有無參構(gòu)造方法子類處理方法
父類無參構(gòu)造方法,子類不寫,其實(shí)會默認(rèn)調(diào)用父類的無參構(gòu)造方法也就是用super(),編譯運(yùn)行后,會打印出"子類會調(diào)用Father的第一個構(gòu)造方法,這篇文章給大家介紹關(guān)于Java父類沒有無參構(gòu)造方法子類處理方法,感興趣的朋友一起看看吧2024-01-01
Spring中使用copyProperties方法進(jìn)行對象之間的屬性賦值詳解
這篇文章主要介紹了Spring中使用copyProperties方法進(jìn)行對象之間的屬性賦值詳解,使用org.springframework.beans.BeanUtils.copyProperties方法進(jìn)行對象之間屬性的賦值,避免通過get、set方法一個一個屬性的賦值,需要的朋友可以參考下2023-12-12
Java中的CyclicBarrier循環(huán)柵欄深入解析
這篇文章主要介紹了Java中的CyclicBarrier循環(huán)柵欄深入解析,CycleBarrier 它就相當(dāng)于是一個柵欄,所有線程在到達(dá)柵欄后都需要等待其他線程,等所有線程都到達(dá)后,再一起通過,需要的朋友可以參考下2023-12-12
java中functional interface的分類和使用詳解
這篇文章主要介紹了java中functional interface的分類和使用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04

