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

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

目录

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

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

q6.png

对象

SmbmsProvider.java

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

q5.png

SmbmsBill.java

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

q4.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>

q3.png

orderMapper.xml

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

q2.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());
            }

q1.png

萌狼工作室@萌狼蓝天

相关文章
|
2月前
|
Java 数据库连接 数据库
mybatis查询数据,返回的对象少了一个字段
mybatis查询数据,返回的对象少了一个字段
186 8
|
23天前
|
SQL 安全 Java
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
14 1
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
|
28天前
|
SQL Java 数据库连接
mybatis如何仅仅查询某个表的几个字段
【10月更文挑战第19天】mybatis如何仅仅查询某个表的几个字段
32 1
|
2月前
|
SQL XML Java
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
1月前
|
SQL XML Java
Mybatis中一对一和一对多的处理
这篇文章讲解了在Mybatis中如何处理一对一和一对多的关系映射,包括使用association和collection标签的具体方法。
21 1
|
1月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
114 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
1月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
56 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
325 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
1月前
|
SQL Java 数据库连接
mybatis使用二:springboot 整合 mybatis,创建开发环境
这篇文章介绍了如何在SpringBoot项目中整合Mybatis和MybatisGenerator,包括添加依赖、配置数据源、修改启动主类、编写Java代码,以及使用Postman进行接口测试。
17 0
mybatis使用二:springboot 整合 mybatis,创建开发环境
|
1月前
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。