場景:最近接到一個項目是查詢管理人集合 同時每一個管理人還存在多個出資人 要查詢一個管理人列表 每個管理人又包含了出資人列表 采用mybatis關聯查詢實現返回數據。
實現方式:
1 .在實體中定義包含出資人集合 並創建get set 方法
public class FundManager extends BaseEntity implements Serializable { /** 默認字段,禁止更改 **/ @Fieldmeta(name = "主鍵", logflag = 0) private String id; @Fieldmeta(name = "管理人名稱", logflag = 0) private String name; @Fieldmeta(name = "管理人注冊地址", logflag = 0) private String reginAdress; @Fieldmeta(name = "法定代表人(委派代表)", logflag = 0) private String legalName; @Fieldmeta(name = "法人是否取得基金從業資格證", logflag = 0) private Integer legalFq; @Fieldmeta(name = "風控負責人", logflag = 0) private String riskName; @Fieldmeta(name = "風控負責人是否取得基金從業資格證", logflag = 0) private Integer riskFq; @Fieldmeta(name = "核心團隊", logflag = 0) private String keyman; @Fieldmeta(name = "駐青島人員", logflag = 0) private String qdman; @Fieldmeta(name = "是否在中基協備案", logflag = 0) private Integer record; @Fieldmeta(name = "累計管理基金數量", logflag = 0) private Integer fundNum; @Fieldmeta(name = "累計管理基金總規模", logflag = 0) private BigDecimal totalFundMoney; @Fieldmeta(name = "累計投資項目數量", logflag = 0) private Integer investProjectNum; @Fieldmeta(name = "累計投資項目總金額", logflag = 0) private BigDecimal totalProjectMoney; @Fieldmeta(name = "累計退出項目數量", logflag = 0) private Integer exitProjectNum; @Fieldmeta(name = "實現上市退出及收益率的項目數量", logflag = 0) private Integer listProjectNum; @Fieldmeta(name = "退出項目的投資總金額", logflag = 0) private BigDecimal exitProjectMoney; @Fieldmeta(name = "退出項目的總金額", logflag = 0) private BigDecimal totalExitMoney; @Fieldmeta(name = "曾經投資青島項目數量", logflag = 0) private Integer investQdNum; @Fieldmeta(name = "投資青島項目總金額", logflag = 0) private BigDecimal totalQdMoney; @Fieldmeta(name = "成功項目1", logflag = 0) private String aprojectName; @Fieldmeta(name = "回報倍數1", logflag = 0) private BigDecimal amultiplier; @Fieldmeta(name = "成功項目2", logflag = 0) private String bprojectName; @Fieldmeta(name = "回報倍數2", logflag = 0) private BigDecimal bmultiplier; @Fieldmeta(name = "成功項目3", logflag = 0) private String cprojectName; @Fieldmeta(name = "回報倍數3", logflag = 0) private BigDecimal cmultiplier; @Fieldmeta(name = "社會信用代碼", logflag = 0) private String unifiedNumber; @Fieldmeta(name = "成立時間", logflag = 0) private Date setupDate; @Fieldmeta(name = "聯系人", logflag = 0) private String contacts; @Fieldmeta(name = "聯系電話", logflag = 0) private String contactTel; @Fieldmeta(name = "管理人AMAC登記號", logflag = 0) private String amacNumber; @Fieldmeta(name = "管理人登記時間", logflag = 0) private Date recordDate; @Fieldmeta(name = "管理公司認繳注冊資本", logflag = 0) private BigDecimal planAmount; @Fieldmeta(name = "管理公司實繳資本", logflag = 0) private BigDecimal amount; @Fieldmeta(name = "管理員是否新設", logflag = 0) private Integer isNew; @Fieldmeta(name = "詳細介紹", logflag = 0) private String information; @Fieldmeta(name = "GP是否同基金管理人(是or否)", logflag = 0) private Integer managerIsGp; @Fieldmeta(name = "是否gp", logflag = 0) private Integer gpFlage; @Fieldmeta(name="申報id",logflag = 0) private String gpNotifyId; /** 以下是公共擴展屬性(若有較多非共性擴展屬性,需定義在子類中) **/ private List<Investorinfo> investorinfos; /** 以下是默認get/set方法,一般情況下禁止更改 **/ /** 注意: **/ /** 1,若使用數據字典翻譯,建議增加getXXXXValue方法,頁面調用使用xXXXXValue **/ /** 2,若字段用於顯示時,存在一些特殊處理邏輯,建議增加getXXXXForView方法,頁面調用使用xXXXXForView **/ public void setId(String id){ this.id = id; } public String getId( ){ return this.id; } public void setName(String name){ this.name = name; } public String getName( ){ return this.name; } public void setReginAdress(String reginAdress){ this.reginAdress = reginAdress; } public String getReginAdress( ){ return this.reginAdress; } public void setLegalName(String legalName){ this.legalName = legalName; } public String getLegalName( ){ return this.legalName; } public void setLegalFq(Integer legalFq){ this.legalFq = legalFq; } public Integer getLegalFq( ){ return this.legalFq; } public void setRiskName(String riskName){ this.riskName = riskName; } public String getRiskName( ){ return this.riskName; } public void setRiskFq(Integer riskFq){ this.riskFq = riskFq; } public Integer getRiskFq( ){ return this.riskFq; } public void setKeyman(String keyman){ this.keyman = keyman; } public String getKeyman( ){ return this.keyman; } public void setQdman(String qdman){ this.qdman = qdman; } public String getQdman( ){ return this.qdman; } public void setRecord(Integer record){ this.record = record; } public Integer getRecord( ){ return this.record; } public void setFundNum(Integer fundNum){ this.fundNum = fundNum; } public Integer getFundNum( ){ return this.fundNum; } public void setTotalFundMoney(BigDecimal totalFundMoney){ this.totalFundMoney = totalFundMoney; } public BigDecimal getTotalFundMoney( ){ return this.totalFundMoney; } public void setInvestProjectNum(Integer investProjectNum){ this.investProjectNum = investProjectNum; } public Integer getInvestProjectNum( ){ return this.investProjectNum; } public void setTotalProjectMoney(BigDecimal totalProjectMoney){ this.totalProjectMoney = totalProjectMoney; } public BigDecimal getTotalProjectMoney( ){ return this.totalProjectMoney; } public void setExitProjectNum(Integer exitProjectNum){ this.exitProjectNum = exitProjectNum; } public Integer getExitProjectNum( ){ return this.exitProjectNum; } public void setListProjectNum(Integer listProjectNum){ this.listProjectNum = listProjectNum; } public Integer getListProjectNum( ){ return this.listProjectNum; } public void setExitProjectMoney(BigDecimal exitProjectMoney){ this.exitProjectMoney = exitProjectMoney; } public BigDecimal getExitProjectMoney( ){ return this.exitProjectMoney; } public void setTotalExitMoney(BigDecimal totalExitMoney){ this.totalExitMoney = totalExitMoney; } public BigDecimal getTotalExitMoney( ){ return this.totalExitMoney; } public void setInvestQdNum(Integer investQdNum){ this.investQdNum = investQdNum; } public Integer getInvestQdNum( ){ return this.investQdNum; } public void setTotalQdMoney(BigDecimal totalQdMoney){ this.totalQdMoney = totalQdMoney; } public BigDecimal getTotalQdMoney( ){ return this.totalQdMoney; } public void setAprojectName(String aprojectName){ this.aprojectName = aprojectName; } public String getAprojectName( ){ return this.aprojectName; } public void setAmultiplier(BigDecimal amultiplier){ this.amultiplier = amultiplier; } public BigDecimal getAmultiplier( ){ return this.amultiplier; } public void setBprojectName(String bprojectName){ this.bprojectName = bprojectName; } public String getBprojectName( ){ return this.bprojectName; } public void setBmultiplier(BigDecimal bmultiplier){ this.bmultiplier = bmultiplier; } public BigDecimal getBmultiplier( ){ return this.bmultiplier; } public void setCprojectName(String cprojectName){ this.cprojectName = cprojectName; } public String getCprojectName( ){ return this.cprojectName; } public void setCmultiplier(BigDecimal cmultiplier){ this.cmultiplier = cmultiplier; } public BigDecimal getCmultiplier( ){ return this.cmultiplier; } public void setUnifiedNumber(String unifiedNumber){ this.unifiedNumber = unifiedNumber; } public String getUnifiedNumber( ){ return this.unifiedNumber; } public void setSetupDate(Date setupDate){ this.setupDate = setupDate; } public Date getSetupDate( ){ return this.setupDate; } public void setContacts(String contacts){ this.contacts = contacts; } public String getContacts( ){ return this.contacts; } public void setContactTel(String contactTel){ this.contactTel = contactTel; } public String getContactTel( ){ return this.contactTel; } public void setAmacNumber(String amacNumber){ this.amacNumber = amacNumber; } public String getAmacNumber( ){ return this.amacNumber; } public void setRecordDate(Date recordDate){ this.recordDate = recordDate; } public Date getRecordDate( ){ return this.recordDate; } public void setPlanAmount(BigDecimal planAmount){ this.planAmount = planAmount; } public BigDecimal getPlanAmount( ){ return this.planAmount; } public void setAmount(BigDecimal amount){ this.amount = amount; } public BigDecimal getAmount( ){ return this.amount; } public void setIsNew(Integer isNew){ this.isNew = isNew; } public Integer getIsNew( ){ return this.isNew; } public void setInformation(String information){ this.information = information; } public String getInformation( ){ return this.information; } public void setManagerIsGp(Integer managerIsGp){ this.managerIsGp = managerIsGp; } public Integer getManagerIsGp( ){ return this.managerIsGp; } public void setGpFlage(Integer gpFlage){ this.gpFlage = gpFlage; } public Integer getGpFlage( ){ return this.gpFlage; } public String getGpNotifyId() { return gpNotifyId; } public void setGpNotifyId(String gpNotifyId) { this.gpNotifyId = gpNotifyId; } /** 擴展get/set方法 **/ public List<Investorinfo> getInvestorinfos() { return investorinfos; } public void setInvestorinfos(List<Investorinfo> investorinfos) { this.investorinfos = investorinfos; } }
2. mybatis.xml文件中實現 定義基本查詢語句查詢管理人集合 返回resultMap 結果集 在resultMap返回結果中進行關聯關系映射查詢,collection實現一對多查詢
其中<id>標簽為查詢fundManager 的id 在管理時候的別名與關聯字短 比如 on t.id=s.id 在collection 標簽中通過select 屬性來指定關聯的查詢語句 但是本次我關聯的兩個
查詢分別屬於不同的xml文件這時候如何實現在一個mapper.xml 文件中引用另外一個mapper.xml文件的查詢語句那 ,采用命名空間加.id屬性對應的名方式
fundManagerMapper.xml
<!-- #######【開始】擴展代碼區,可自由改動。####### --> <resultMap id="ResultMapWithInvestor" type="com.qk.gpportal.core.fundmanager.entity.FundManager" extends="BaseResultMap"> <id property="id" column="id"/> <collection property="investorinfos" ofType="com.qk.gpportal.core.investorinfo.entity.Investorinfo" column="id" select="com.qk.gpportal.core.investorinfo.dao.InvestorinfoMapper.getInvestors"> </collection> </resultMap> <select id="getFundManagerBygpNotifyId" parameterType="java.lang.String" resultMap="ResultMapWithInvestor"> select <include refid="Columns"/> FROM g_fund_manager WHERE gp_notify_id= #{gpNotifyId,jdbcType=VARCHAR} </select> <!-- #######【結束】擴展代碼區,可自由改動。####### -->
investorinfoMapper.xml id的名字通過在fundmanagerMapper.xml文件中表空間方式.id名稱方式引用 可以實現不同.xml方法之間的引用
<select id="getInvestors" resultMap="BaseResultMap" parameterType="java.lang.String"> select <include refid="Columns"/> from g_investorinfo where fund_manager_id = #{id} </select>
