多表查询封装

1,253 阅读2分钟

表1

表2

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

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

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

然后就是在mapper.xml里面做对应的封装

得到最后要的结果

============================================================

2019.4.15更新

  • 这次项目查询需要联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;

查询结果

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

因为另外表的字段不多而且是基于商品表(pms_product)加上的,所以要在商品表的实体类上加上对应的字段,上面就是在商品类里面直接加了,这样等于修改原来的实体类,个人感觉不是很好,于是就另外写了一个类继继承商品表的实体类

这样就可以在PmsProductDetails类里面写其他表对应的字段也不会对原来的商品表做修改

mapper.xml

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

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

  • 出现这个问题后,一直想是不是查询方法不合适造成的,就想着用子查询,由于没写出来子查询就没弄
  • 周一上班发现可以用别名区分啊,哈哈

  • 来看最后的结果