【MyBatis】学习笔记15:通过分步查询解决一对多或多对多问题
1.【Mybatis】学习笔记01:连接数据库,实现增删改2.【Mybatis】学习笔记02:实现简单的查3.【MyBatis】学习笔记03:配置文件进一步解读(非常重要)4.【MyBatis】学习笔记04:配置文件模板5.【MyBatis】学习笔记05:获取参数值的两种方式6.【MyBatis】学习笔记06:各种查询所返回数据的数据类型7.【MyBatis】学习笔记07:模糊查询8.【MyBatis】学习笔记08:批量删除9.【MyBatis】学习笔记09:动态设置表名10.【MyBatis】学习笔记10:添加功能获取自增的主键11.【MyBatis】学习笔记11:解决字段名和属性的映射关系12.【MyBatis】学习笔记12:通过级联属性赋值解决多对一的映射关系13.【MyBatis】学习笔记13:延迟加载(懒加载)14.【MyBatis】学习笔记14:通过collection解决一对多的映射关系
15.【MyBatis】学习笔记15:通过分步查询解决一对多或多对多问题
16.【MyBatis】多关键字的模糊查询17.【SpringMVC】框架搭建18.【Javaweb】在项目中添加MyBatis依赖等19.【Spring】作业记录:spring项目从创建、配置到功能实现、测试20.【Spring】【MyBatis】Spring整合MyBatis0121.【转载】【尚硅谷】【MyBatis】2022版Mybatis配套MD文档目录
一个部门有多个员工,通过部门名称,模糊查询部门,并得到部门相应的员工信息
同样的,一个公司(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());
}
萌狼工作室@萌狼蓝天
版 权 声 明
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步