mybatis 关联查询实现一对多
场景:最近接到一个项目是查询管理人集合 同时每一个管理人还存在多个出资人 要查询一个管理人列表 每个管理人又包含了出资人列表 采用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>
mybatis 关联查询实现一对多的更多相关文章
- MyBatis关联查询,一对多关联查询
实体关系图,一个国家对应多个城市 一对多关联查询可用三种方式实现: 单步查询,利用collection标签为级联属性赋值: 分步查询: 利用association标签进行分步查询: 利用collect ...
- MyBatis基础:MyBatis关联查询(4)
1. MyBatis关联查询简介 MyBatis中级联分为3中:association.collection及discriminator. ◊ association:一对一关联 ◊ collecti ...
- MyBatis关联查询、多条件查询
MyBatis关联查询.多条件查询 1.一对一查询 任务需求; 根据班级的信息查询出教师的相关信息 1.数据库表的设计 班级表: 教师表: 2.实体类的设计 班级表: public class Cla ...
- Mybatis关联查询之一
MyBatis的关联查询之一对多,多对一 在关系型数据库中,我们经常要处理一对多,多对一和多对多的关系. 一对多,多对一 一.entity 实体类 public class SmbmsRole { p ...
- mybatis关联查询基础----高级映射
本文链接地址:mybatis关联查询基础----高级映射(一对一,一对多,多对多) 前言: 今日在工作中遇到了一个一对多分页查询的问题,主表一条记录对应关联表四条记录,关联分页查询后每页只显示三条记录 ...
- Mybatis关联查询和数据库不一致问题分析与解决
Mybatis关联查询和数据库不一致问题分析与解决 本文的前提是,确定sql语句没有问题,确定在数据库中使用sql和项目中结果不一致. 在使用SpringMVC+Mybatis做多表关联时候,发现也不 ...
- Mybatis关联查询之二
Mybatis关联查询之多对多 多对多 一.entity实体类 public class Student { private Integer stuid; private String stuname ...
- MyBatis关联查询和懒加载错误
MyBatis关联查询和懒加载错误 今天在写项目时遇到了个BUG.先说一下背景,前端请求更新生产订单状态,后端从前端接收到生产订单ID进行查询,然后就有问题了. 先看控制台报错: org.apache ...
- MyBatis 关联查询的实现:一对多
有2个实体:用户.订单,一个用户可以拥有多个订单,同时这多个订单属于一个用户,即一对多. user_tb: order_tb: 在“多”的一方(order)添加“一”的一方(user)的主键(user ...
随机推荐
- Spark Streaming与Kafka集成
Spark Streaming与Kafka集成 1.介绍 kafka是一个发布订阅消息系统,具有分布式.分区化.多副本提交日志特点.kafka项目在0.8和0.10之间引入了一种新型消费者API,注意 ...
- HCNA配置telnet远程管理
1.拓扑图 说明:通过配置最终能通过R5 用telnet协议登陆到R4上并将R4改名为R44 2.R4配置 <Huawei>sys Enter system view, return us ...
- 笨办法学Python(二十五)
习题 25: 更多更多的练习 我们将做一些关于函数和变量的练习,以确认你真正掌握了这些知识.这节练习对你来说可以说是一本道:写程序,逐行研究,弄懂它. 不过这节练习还是有些不同,你不需要运行它,取而代 ...
- "COM Surrogate 已停止工作"解决方案(windows7 64位及32位)
根据图示步骤,将以下文件添加至“数据执行保护”的例外列表中. 64位:C:Windows\SysWOW64\dllhost.exe 32位:C:\Windows\System32\dllhost.ex ...
- Invalid MyEclipse License - Discontinuing this MyEclipse operation. 出现这个错误怎么改正?
Invalid MyEclipse License - Discontinuing this MyEclipse operation这句话的意思是无效的许可证-停用此MyEclipse操作入门就是你的 ...
- 【LOJ6513】「雅礼集训 2018 Day10」足球大战(数学题)
点此看题面 大致题意: 已知主队每秒进球概率为\(p\),客队每秒进球概率为\(q\),求主队进球数大于客队的概率. 推式子 考虑枚举主队进球数\(i\),则客队进球数必然小于\(i\),因此可再枚举 ...
- G711格式语音采集/编码/转码/解码/播放
2019-05-01 语音g711格式和AMR格式类似,应用很简单,很多人已经整理过了,收录于此,以备不时之需,用别人现成的足矣,我们的时间应该用来干更有意义的事. 1.PCM to G711 Fas ...
- python_2_变量的使用2
''' 多行注释(三个单引号,或者双引号) gf_of_oldboy="Chen rong hua"#变量的表示办法1,用下划线(老男孩的女朋友) GfOfOldboy=" ...
- 【转】css行高line-height的一些深入理解及应用
一.前言 前两天在腾讯ISD团队博客上看到一篇翻译的文章“深入理解css 行高”,是个不错的文章,学到了不少东西,建议您看看. 这里,我也要讲讲我对line-height的一些理解,所讲解的东西绝大多 ...
- mysql题目(二学年)
1.哪些命令可以知道mysql安装的版本 mysqladmin --version mysql --version 2.关于mysql密码说法正确的是 初始化安装完毕后密码为空 3.进入或者打开数据库 ...