【MyBatis】学习笔记15:通过分步查询解决一对多或多对多问题
一个部门有多个员工,通过部门名称,模糊查询部门,并得到部门相应的员工信息
同样的,一个公司(Provider)有多个订单(Bill),根据公司名称模糊查询,得到符合条件的公司,和公司相应的所有订单
对象
SmbmsProvider.java
下图蓝色框框圈起来的部分是我们要用到的关键部分

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

接口
这里展示的是一个多对多的关系(因为是模糊查询)
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>

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

测试
@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());
}

萌狼工作室@萌狼蓝天
【MyBatis】学习笔记15:通过分步查询解决一对多或多对多问题的更多相关文章
- Mybatis学习笔记之---多表查询(1)
Mybatis多表查询(1) (一)举例(用户和账户) 一个用户可以有多个账户 一个账户只能属于一个用户(多个账户也可以属于同一个用户) (二)步骤 1.建立两张表:用户表,账户表,让用户表和账户表之 ...
- Mybatis学习笔记之---多表查询(2)
Mybatis多表查询(2) (一)举例 用户和角色 一个用户可以有多个角色,一个角色可以赋予多个用户 (二)步骤 1.建立两张表:用户表,角色表,让用户表和角色表具有多对多的关系.需要使用中间表,中 ...
- Mybatis学习笔记15 - 两个内置参数_parameter和_databaseId
两个内置参数:除了方法传递过来的参数可以被用来判断,取值外,mybatis默认还有两个内置参数: _parameter:代表整个参数 单个参数:_parameter就代表这个单个参数 多个参数:参数会 ...
- mybatis学习笔记(10)-一对一查询
mybatis学习笔记(10)-一对一查询 标签: mybatis mybatis学习笔记10-一对一查询 resultType实现 resultMap实现 resultType和resultMap实 ...
- Mybatis学习笔记汇总(包括源码和jar包)
博客整理 Mybatis学习笔记(一)--对原生jdbc中问题的总结 Mybatis学习笔记(二)--Mybatis框架 Mybatis学习笔记(三)--入门程序 MyBatis学习笔记(四)--入门 ...
- SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题
目标:减少SQL查询数据,避免使用一条SQL语句解决复杂问题 反模式:视图使用一步操作,单个SQL语句解决复杂问题 使用一个查询来获得所有结果的最常见后果就是产生了一个笛卡尔积.导致查询性能降低. 如 ...
- MyBatis:学习笔记(3)——关联查询
MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统, ...
- mybatis学习笔记(14)-查询缓存之中的一个级缓存
mybatis学习笔记(14)-查询缓存之中的一个级缓存 标签: mybatis mybatis学习笔记14-查询缓存之中的一个级缓存 查询缓存 一级缓存 一级缓存工作原理 一级缓存測试 一级缓存应用 ...
- MyBatis:学习笔记(1)——基础知识
MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...
- Mybatis学习笔记二
本篇内容,紧接上一篇内容Mybatis学习笔记一 输入映射和输出映射 传递简单类型和pojo类型上篇已介绍过,下面介绍一下包装类型. 传递pojo包装对象 开发中通过可以使用pojo传递查询条件.查询 ...
随机推荐
- ide 安装eval reset插件 Pycharm 永久破解
ide 安装eval reset插件 Pycharm 永久破解 1.安装eval reset的目的 Jetbrains家的产品有一个很良心的地方,他会允许你试用30天(这个数字写死在代码里了)以评估是 ...
- 王树森Attention与Self-Attention学习笔记
目录 Seq2Seq + Attention Attention的原理 方法一(Used in the original paper) 方法二(more popular,the same to Tra ...
- prometheus+grafana配置流程
prometheus+grafana配置流程 首先,安装对应的exporter 查看prometheus支持的所有exporters https://prometheus.io/docs/instru ...
- 五、Spring Boot集成Spring Security之认证流程2
二.概要说明 上文已详细介绍了四.Spring Boot集成Spring Security之认证流程 本文则着重介绍用户名密码认证过滤器UsernamePasswordAuthenticationFi ...
- Oracle中查看隐含参数的sql
select a.ksppinm "Parameter", a.ksppdesc "Description", b.ksppstvl "Session ...
- Windows Server 2012 R2安装JDK7报错:内部错误61003
按顺序安装 1)KB2919442补丁(https://www.microsoft.com/zh-cn/download/details.aspx?id=42153) 2)KB2919355补丁(ht ...
- Web渗透04_密码破解
账号密码是任何一个系统都必备的要素. 弱密码 123456 654321 112233 admin 等等 默认密码 Tomcat控制台: tomcat/tomcat 明文传输 http的明文传输,可以 ...
- Ubuntu 22.04 LTS 在线/离线安装 Docker
Docker 安装方式 时间:2024-10 准备环境 root@ubuntu2204:~# hostnamectl Static hostname: ubuntu2204 Icon name: co ...
- 使用 FastGPT 工作流搭建 GitHub Issues 自动总结机器人
如今任何项目开发节奏都很快,及时掌握项目动态是很重要滴,GitHub Issues 一般都是开发者和用户反馈问题的主要渠道. 然而,随着 Issue 数量的增加,及时跟进每一个问题会变得越来越困难. ...
- 从0.1开始学java(2)
string串池 现在都在堆中 "=="号的比较 字符串比较一般调用equals或者equalsignoreCase API来比较(后者忽略大小写) StringBuilder 可 ...
