mysql中一对多查询方式总结

在实际项目中我们经常会遇到一个实体中包含一个或多个List子对象,当进行查询时,可以采用以下两种方式:

1、一次查询

 比如该对象中有以下三个List需要查询

如果项目能够支持一次查询,最好用一次查询,省事,效率也高 

 

 直接使用<collection/>标签,其中property为要查询的list名称,ofType为List里存放的类型。

<result column="position" property="position"/>

把查询到的字段放<result/>标签中即可。

查询语句使用left join关联查询

 这样就可以一次完成子表查询,即可查询到VO中的所有字段。

2、分步查询

分步查询有两种处理方式:一是通过mapper.xml直接分步查询;另外一种是分别在不同mapper.xml中查询子对象,再通过java遍历封装到实体中。这两种方式的选择,需要看项目的支持程度。

2.1、通过mapper.xml直接分步查询

比如该对象中有以下两个List需要查询

 

 现在通过mapper.xml直接分步查询,看以下写法:

可以看到也是使用<collection/>标签,其中property为List对象的名字,重点解释下column这个用法

column="{expenseId=id}" 可以简写为 column="id"

id为要关联主表中的id字段,expenseId为子表中与主表关联的字段。相当于 主表left join 子表 on 主表字段=子表字段。这个column在子表中用法见下图

select="com.hnlrkj.office.mapper.expenses.ExpensesDetailMapper.getExpensesDetail"/>

select 字段则关联子表中查询语句的id名,这里需要写全名。以下是子表中的查询id名。

主表查询语句,只需要通过主表的条件,查询主表中想要的字段,再通过刚才的分步子查询,即可查询到VO中的所有字段。

2.2 、分别在不同mapper.xml中查询子对象,再通过java封装到实体中

这种方式的原理就是先分别调用sql查询子对象,再把查询到的子对象通过java存放到VO中

  • 4
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值