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


目录
  • 对象
    • SmbmsProvider.java
    • SmbmsBill.java
  • 接口
    • providerMapper.java
    • orderMapper.java
  • 映射文件
    • providerMapper.xml
    • orderMapper.xml
  • 测试

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

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

对象

SmbmsProvider.java

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

SmbmsBill.java

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

接口

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

providerMapper.java

public List getOrderByProviderNameStepOne(@Param("cname") String cname);

orderMapper.java

public List getOrderByProviderNameStepTwo(@Param("pid") String pid);

映射文件

providerMapper.xml


    
        
        
        
    
    

orderMapper.xml

    

测试

 @Test
    public void getBillsByProviderName(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        providerMapper mapper = sqlSession.getMapper(providerMapper.class);
        List 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());
            }

萌狼工作室@萌狼蓝天