尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Mybatis 使用 resultMap + association 将sql查询结果映射到嵌套对象

Mybatis 使用 resultMap + association 将sql查询结果映射到嵌套对象 DTOsrc/main/java/com/weiyu/dto/CapitalUseQueryResult.javapackage com.weiyu.dto; import com.weiyu.model.ActivityInstanceRequest; import lombok.Data; import lombok.NoArgsConstructor; import java.math.BigDecimal; /** * 资金使用查询结果 */ Data NoArgsConstructor public class CapitalUseQueryResult { /** * id编号 */ private Integer id; /** * 资金序号 */ private String capitalNo; /** * 资金名称 */ private String capitalName; /** * 资金类别 */ private String capitalType; /** * 资金来源 */ private String capitalSource; /** * 指标来源 */ private String capitalIndexSource; /** * 指标类别 */ private String capitalIndexType; /** * 使用部门名称 */ private String deptName; /** * 支出分类 */ private String payType; /** * 支出方式 */ private String payMode; /** * 可用金额 */ private BigDecimal validTotal; /** * 申请原因 */ private String applyReason; /** * 申请金额 */ private BigDecimal applyTotal; /** * 余额 */ private BigDecimal balance; /** * 回调金额 */ private BigDecimal backTotal; /** * 收款单位 */ private String payee; /** * 账号 */ private String accountNum; /** * 开户银行 */ private String bank; /** * 使用状态 */ private Integer useState; /** * 活动实例信息组合方式 */ private ActivityInstanceRequest activityInstance; }src/main/java/com/weiyu/model/ActivityInstanceRequest.javapackage com.weiyu.model; import com.weiyu.enumeration.WorkflowInstanceNode; import lombok.Data; import lombok.NoArgsConstructor; /** * 活动实例请求对象 */ Data NoArgsConstructor public class ActivityInstanceRequest { /** * 工作流程id */ Integer workflowId; /** * 流程版本id */ Integer concretWorkflowId; /** * 流程实例id */ Integer workflowInstanceId; /** * 活动实例id */ Integer activityInstanceId; /** * 当前活动id */ Integer activityId; /** * 当前活动允许执行人 */ String allowAuditor; /** * 业务主键 */ String businessKey; /** * 流程实例状态 */ Integer workflowInstanceState; /** * 流程实例节点首活动/启动活动、中间活动、末活动/最后活动 */ WorkflowInstanceNode workflowInstanceNode; }枚举package com.weiyu.model; import com.weiyu.enumeration.WorkflowInstanceNode; import lombok.Data; import lombok.NoArgsConstructor; /** * 活动实例请求对象 */ Data NoArgsConstructor public class ActivityInstanceRequest { /** * 工作流程id */ private Integer workflowId; /** * 流程版本id */ private Integer concretWorkflowId; /** * 流程实例id */ private Integer workflowInstanceId; /** * 活动实例id */ private Integer activityInstanceId; /** * 当前活动id */ private Integer activityId; /** * 当前活动允许执行人 */ private String allowAuditor; /** * 业务主键 */ private String businessKey; /** * 流程实例状态 */ private Integer workflowInstanceState; /** * 流程实例节点首活动/启动活动、中间活动、末活动/最后活动 */ private WorkflowInstanceNode workflowInstanceNode; }src/main/java/com/weiyu/enumeration/WorkflowInstanceNode.javapackage com.weiyu.enumeration; import lombok.Getter; /** * 流程实例节点枚举用于描述当前办理的活动实例处于流程实例中的哪个环节 * p * FIRST首活动/启动活动、MIDDLE中间活动、LAST末活动/最后活动 */ Getter public enum WorkflowInstanceNode { /** * 首活动/启动活动 */ FIRST(FIRST), /** * 中间活动 */ MIDDLE(MIDDLE), /** * 末活动/最后活动 */ LAST(LAST), /** * 异常情况 */ UNKNOWN(UNKNOWN); private final String value; WorkflowInstanceNode(String value) { this.value value; } }XMLsrc/main/resources/com/weiyu/mapper/CapitalUseMapper.xml?xml version1.0 encodingUTF-8 ? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.weiyu.mapper.CapitalUseMapper !-- mssql -- !-- 资金使用列表查询字段 -- sql idcapitalUseSelectFields cu_ID as id, cim_CapitalNo as capitalNo, cim_CapitalName as capitalName, cim_CapitalType as capitalType, cim_CapitalSource as capitalSource, cim_CapitalIndexSource as capitalIndexSource, cim_CapitalIndexType as capitalIndexType, dep_Name as deptName, cad_CapitalPayType as payType, cad_CapitalPayMode as payMode, cad_CapitalIndexValidTotal as validTotal, cu_ApplyReason as applyReason, cu_CapitalIndexApplyTotal as applyTotal, cu_Balance as balance, cu_CapitalIndexBackTotal as backTotal, cu_SKDWName as payee, cu_Account as accountNum, cu_Bank as bank, StateFlag as useState, WorkflowID as workflowId, ConcretWorkflowID as concretWorkflowId, WorkflowInstanceID as workflowInstanceId, ActivityInstanceID as activityInstanceId, ActivityID as activityId, Actor as allowAuditor, BizPKValue as businessKey, StateFlag as workflowInstanceState /sql !-- 定义 resultMap将查询结果映射到 CapitalUseQueryResult 对象 -- resultMap idcapitalUseQueryResultMap typecom.weiyu.dto.CapitalUseQueryResult !-- 业务字段映射 -- id propertyid columnid/ result propertycapitalNo columncapitalNo/ result propertycapitalName columncapitalName/ result propertycapitalType columncapitalType/ result propertycapitalSource columncapitalSource/ result propertycapitalIndexSource columncapitalIndexSource/ result propertycapitalIndexType columncapitalIndexType/ result propertydeptName columndeptName/ result propertypayType columnpayType/ result propertypayMode columnpayMode/ result propertyvalidTotal columnvalidTotal/ result propertyapplyReason columnapplyReason/ result propertyapplyTotal columnapplyTotal/ result propertybalance columnbalance/ result propertybackTotal columnbackTotal/ result propertypayee columnpayee/ result propertyaccountNum columnaccountNum/ result propertybank columnbank/ result propertyuseState columnuseState/ !-- 工作流信息映射到 activityInstance 属性组合方式 -- association propertyactivityInstance javaTypecom.weiyu.model.ActivityInstanceRequest result propertyworkflowId columnworkflowId/ result propertyconcretWorkflowId columnconcretWorkflowId/ result propertyworkflowInstanceId columnworkflowInstanceId/ result propertyactivityInstanceId columnactivityInstanceId/ result propertyactivityId columnactivityId/ result propertyallowAuditor columnallowAuditor/ result propertybusinessKey columnbusinessKey/ result propertyworkflowInstanceState columnworkflowInstanceState/ !-- workflowInstanceNode 未从数据库直接获取需在 Service 层通过工作流服务填充 -- /association /resultMap !-- 查询资金使用列表通过关键字搜索 -- select idselectListByKeyword resultMapcapitalUseQueryResultMap select include refidcapitalUseSelectFields/ from CapitalUse inner join CapitalAllocateDetail on cad_ID cu_MasterID inner join CapitalAllocateMaster on cam_ID cad_MasterID inner join CapitalInfoManage on cim_ID cam_MasterID inner join Department on dep_ID cad_CapitalIndexDept inner join vw_BizPKValueList on cu_ID cast(BizPKValue as int) and Actor #{userName} where WorkflowID 26 and StateFlag 0 and (cim_CapitalNo like % #{keyword} % or cim_CapitalName like % #{keyword} %) order by cu_ID desc /select !-- 查询资金使用列表通过自定义查询 -- select idselectListByCustom resultMapcapitalUseQueryResultMap select include refidcapitalUseSelectFields/ from CapitalUse inner join CapitalAllocateDetail on cad_ID cu_MasterID inner join CapitalAllocateMaster on cam_ID cad_MasterID inner join CapitalInfoManage on cim_ID cam_MasterID inner join Department on dep_ID cad_CapitalIndexDept inner join vw_BizPKValueList on cu_ID cast(BizPKValue as int) and Actor #{userName} where WorkflowID 26 if testqueryRequest.useStates ! null and queryRequest.useStates.size() 0 and StateFlag in foreach collectionqueryRequest.useStates itemitem separator, open( close) #{item} /foreach /if if testqueryRequest.capitalNo ! null and queryRequest.capitalNo ! and cim_CapitalNo like % #{queryRequest.capitalNo} % /if if testqueryRequest.capitalName ! null and queryRequest.capitalName ! and cim_CapitalName like % #{queryRequest.capitalName} % /if if testqueryRequest.capitalType ! null and queryRequest.capitalType ! and cim_CapitalType like % #{queryRequest.capitalType} % /if if testqueryRequest.capitalSource ! null and queryRequest.capitalSource ! and cim_CapitalSource like % #{queryRequest.capitalSource} % /if if testqueryRequest.applyReason ! null and queryRequest.applyReason ! and cu_ApplyReason like % #{queryRequest.applyReason} % /if if testqueryRequest.applyTotal ! null and cu_CapitalIndexApplyTotal #{queryRequest.applyTotal} /if if testqueryRequest.payee ! null and queryRequest.payee ! and cu_SKDWName like % #{queryRequest.payee} % /if !-- 开始日期条件将字符串转为日期并取当天开始时间 -- if testqueryRequest.createDateRange ! null and queryRequest.createDateRange.beginDate ! null and queryRequest.createDateRange.beginDate ! and cu_CreateDate CONVERT(datetime, #{queryRequest.createDateRange.beginDate}, 120) /if !-- 结束日期条件取当天结束时间即第二天开始时间的前一毫秒 -- if testqueryRequest.createDateRange ! null and queryRequest.createDateRange.endDate ! null and queryRequest.createDateRange.endDate ! and cu_CreateDate lt; DATEADD(day, 1, CONVERT(datetime, #{queryRequest.createDateRange.endDate}, 120)) /if /where order by cu_ID desc /select /mapper
返回列表