多表查询封装

表1前端

表2

表1中的"category_id"对应表2中的主键id

前端要求根据表1中的"category_id"查询出表2中的"name"并返回到页面sql

  • 第一次写的时候是作了两次查询,查了两个表封装对象放到一个List里面,这样写很不合理并且很丑,返回的是两个表的全部数据
  • 发现不合理以后,就用了左链接查询,查询结果
    这样就要在表1的实体类里面加一个字段"name"并查询后封装进去

而后就是在mapper.xml里面作对应的封装

获得最后要的结果

============================================================bash

2019.4.15更新app

  • 此次项目查询须要联4张表查询 查询的sql很快就写出来了,使用内链接
SELECT
	p1.id,p1.brand_id,p1.name "商品名称",
	p2.NAME "商品分类二级",
	p4.NAME "商品分类一级",
	p3.vertify_man "审核人",
	p3.STATUS "审核状态",
	p3.detail "审核详情"
FROM
	pms_product p1,
	pms_product_category p2,
	pms_product_vertify_record p3,
	pms_product_category p4 
WHERE
	p1.product_category_id = p2.id 
	AND p1.id = p3.id 
	AND p2.parent_id = p4.id
	AND p1.id = 1;
复制代码

查询结果 spa

在MyBatis中用resultMap自定义结果集,封装这四个表的查询结果

由于另外表的字段很少并且是基于商品表(pms_product)加上的,因此要在商品表的实体类上加上对应的字段,上面就是在商品类里面直接加了,这样等于修改原来的实体类,我的感受不是很好,因而就另外写了一个类继继承商品表的实体类code

这样就能够在PmsProductDetails类里面写其余表对应的字段也不会对原来的商品表作修改

mapper.xmlcdn

  • 不过这个仍是今天才解决的,上周六一天都没搞定,仍是本身太笨了 开始是这样写的

  • 而后这样查出来的都是以第一个name查出的值封装的

  • 出现这个问题后,一直想是否是查询方法不合适形成的,就想着用子查询,因为没写出来子查询就没弄
  • 周一上班发现能够用别名区分啊,哈哈

  • 来看最后的结果

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息