【MyBatis】学习笔记15:通过分步查询解决一对多或多对多问题

一个部门有多个员工,通过部门名称,模糊查询部门,并得到部门相应的员工信息

同样的,一个公司(Provider)有多个订单(Bill),根据公司名称模糊查询,得到符合条件的公司,和公司相应的所有订单

image.png

对象

SmbmsProvider.java

下图蓝色框框圈起来的部分是我们要用到的关键部分

image.png

SmbmsBill.java

这个对象正常根据字段生成getter and setter就可以了,然后正常的重新toString()

image.png

接口

这里展示的是一个多对多的关系(因为是模糊查询)

providerMapper.java
public List<SmbmsProvider> getOrderByProviderNameStepOne(@Param("cname") String cname);
orderMapper.java
public List<SmbmsBill> getOrderByProviderNameStepTwo(@Param("pid") String pid);

映射文件

providerMapper.xml
<!--    public SmbmsProvider getOrderByProviderNameStepOne(@Param("cname") String cname);-->
    <resultMap id="getOrderByProviderName" type="SmbmsProvider">
        <id property="proCode" column="proCode"/>
        <result property="proName" column="proName"/>
        <collection  property="smbmsBills" select="cc.mllt.jdbc.utils.orderMapper.getOrderByProviderNameStepTwo" column="id" fetchType="eager"/>
    </resultMap>
    <select id="getOrderByProviderNameStepOne" resultMap="getOrderByProviderName">
        select * from smbms_provider where proName like concat('%',#{cname},'%')
    </select>

image.png

orderMapper.xml
<select id="getOrderByProviderNameStepTwo" resultType="SmbmsBill">
        select * from smbms_bill where providerId=#{pid}
    </select>

image.png

测试

@Test
    public void getBillsByProviderName(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        providerMapper mapper = sqlSession.getMapper(providerMapper.class);
        List<SmbmsProvider> result = mapper.getOrderByProviderNameStepOne("公司");
        System.out.println(result);
        for(SmbmsProvider provider:result){
            System.out.print("公司名字:"+provider.getProName()+"\n");
            try {
                for(SmbmsBill bill:provider.getSmbmsBills()){
                    System.out.print(" | 订单号:"+bill.getBillCode());
                    System.out.print(" | 商品名称:"+ bill.getProductName());
                    System.out.print(" | 商品价格:"+bill.getTotalPrice());
                    String st=(bill.getIsPayment()==2)?"已付款":"未付款";
                    System.out.println(" | 付款状态:"+ st);
                }
            }catch (Exception e){
                System.out.println("未获取到该公司订单数据!");
//                System.out.println(e.getCause()+" "+e.getMessage());
            }

image.png

萌狼工作室@萌狼蓝天

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌狼蓝天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值