在Mybatis中使用连表查询的一次实际应用

简介: 在Mybatis中使用连表查询的一次实际应用

以前在工作中很少使用多表关联查询,对连表查询的具体作用和使用场景也没有很直观的认识,通过这次在项目中的实际应用,对此有了一定的认识,特记录如下。

关联表介绍:

分别是属性表attr_info、属性值表attr_val_info、商品sku信息表sku_info、商品sku所属的属性信息表sku_attr_info。

attr_info表:存储属性大类信息,如颜色、配置、网络

attr_val_info表:存储属性的具体值,如颜色-黄色、配置-128G、网络-移动、联通

sku_info表:存储sku的基础信息

sku_attr_info:存储sku对应的属性及属性值信息

业务场景一:

查询出每个sku所对应的属性名称及属性值名称

SELECT DISTINCT
  sai.product_id AS product_id,
  sai.attr_id AS attr_id,
  ai. attr_name,
  sai.attr_val_id AS attr_val_id,
  sai.attr_val_name AS attr_val_name
FROM
  attr_info ai
JOIN attr_val_info avi ON ai.attr_id = avi.attr_id
JOIN sku_attr_info sai ON (
  sai.product_id = avi.product_id
  AND sai.attr_val_id = avi.attr_val_id
)

将这三张表中的记录在业务代码中全部查询出来,然后在代码中编写拆装拼接逻辑到一个model中,这样费时费力不好把握各个表之间的关联关系而且逻辑不清晰,很容易出错。

连表查询就相当于将表记录之间的关联逻辑由代码层面,迁移至数据库层面,在数据库中通过关联查询语句查找到满足关联条件的数据集合,在业务代码中只需要对此查询集合进行where条件查询即可。

业务场景二:

在原有的sku_attr_info表中,一个sku的属性信息对应一行记录,每个sku包含多个属性,即多行记录,现在想查询出sku所对应的颜色id和配置id以及其他的sku的属性,用一行显示。

SELECT
  si.product_id,
  si.sku_id,
  si.sku_url,
  sai.color_id,
  sai.spec_id
FROM
  sku_info si
JOIN (
  SELECT
    sku_id,
    MAX(
      CASE attr_id
      WHEN 1 THEN
        attr_val_id
      ELSE
        0
      END
    ) color_id,
    MAX(
      CASE attr_id
      WHEN 2 THEN
        attr_val_id
      ELSE
        0
      END
    ) spec_id
  FROM
    sku_attr_info
  GROUP BY
    sku_id
) sai ON (
  si.sku_id = sai.sku_id
);
目录
相关文章
|
5天前
|
XML Java 数据库连接
mybatis中在xml文件中通用查询结果列如何使用
mybatis中在xml文件中通用查询结果列如何使用
42 0
|
5天前
|
Java 数据库连接 mybatis
Mybatis 多级分类查询
Mybatis 多级分类查询
19 0
|
5天前
|
SQL Java 关系型数据库
Mybatis多表关联查询与动态SQL(下)
Mybatis多表关联查询与动态SQL
18 0
|
5天前
|
SQL Java 数据库连接
Mybatis多表关联查询与动态SQL(上)
Mybatis多表关联查询与动态SQL
10 0
|
5天前
|
SQL 缓存 Java
mybatis 一对多查询
mybatis 一对多查询
23 0
|
5天前
|
SQL
MyBatis-Plus-Join关联查询
MyBatis-Plus-Join关联查询
|
5天前
|
SQL XML Java
MyBatis-Plus多表关联查询
MyBatis-Plus多表关联查询
|
5天前
|
SQL XML API
Mybatis-Plus实现查询操作
Mybatis-Plus实现查询操作
20 0
Mybatis-Plus实现查询操作
|
5天前
|
Java 数据库连接 mybatis
MyBatis-Plus查询工具类
MyBatis-Plus是一个MyBatis的增强工具类库,提供了许多实用的查询工具类。
10 0
|
5天前
|
SQL Java 数据库连接
Javaweb之Mybatis的基础操作之查询操作的详细解析
Javaweb之Mybatis的基础操作之查询操作的详细解析
22 0