# 案例一:查询列表数据

    

    <resultMap id="baseMap01" type="TimeWalletVo">
        <id column="id" property="id"/>
        <result column="mch_id" property="mchId"/>
        <result column="avail_time" property="availTime"/>
        <result column="company_id" property="companyId"/>
        <result column="company_name" property="companyName"/>
        <result column="status" property="status"/>
        <result column="create_time" property="createTime"/>
        <result column="name" property="name"/>
        <result column="branch_name" property="branchName"/>
    </resultMap>


	<select id="listByCompanyId" resultType="java.util.List" resultMap="baseMap01">
        select
            tw.id,
            tw.mch_id,
            tw.avail_time,
            tw.company_id,
            tw.company_name,
            tw.status,
            tw.create_time,
            mch.name,
            mch.branch_name
        from time_wallet tw
        inner join merchant mch
        on tw.mch_id = mch.id
        <where>
            <if test="companyId != null">
                and tw.company_id = #{companyId}
            </if>
            <if test="mchId != null">
                and tw.mch_id = #{mchId}
            </if>
            <if test="keyword != null and keyword != ''">
                <choose>
                    <when test="companyId != null">
                        and mch.name like concat("%", #{keyword}, "%")
                    </when>
                    <when test="mchId == null and companyId == null">
                        and CONCAT_WS(",", tw.company_name, mch.name) like concat("%", #{keyword}, "%")
                    </when>
                </choose>
            </if>
        </where>
        order by tw.create_time desc
    </select>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

# 业务场景描述

现在有:时间钱包表【time_wallet】,商家表【merchant】

        tw.id, --时间钱包id
        tw.mch_id, -- 商家id
        tw.avail_time,  -- 有效的时间
        tw.company_id,  --  公司id
        tw.company_name,  -- 公司的名字
        tw.status,     -- 时间钱包的状态  0  关闭  1 开起
        tw.create_time,   -- 时间钱包创建的时间
        mch.name,     -- 商户的名字
        mch.branch_name   -- 商家分店的名字
1
2
3
4
5
6
7
8
9

由于没有原型图加上,只能用字段来说明要查询展示的字段。可以看出一定有二个表进行关联查询。

# 关系分析

  1. 一个时间钱包 =》 对应一个商家 一对一

  2. 一个商家 =》 只有一个分店名称。 【可能是一对一,或 一对多。】

# 第一步:查询结果映射

    <resultMap id="baseMap01" 			type="wallet.TimeWalletVo">
        <id column="id" property="id"/>
        <result column="mch_id" property="mchId"/>
        <result column="avail_time" property="availTime"/>
        <result column="company_id" property="companyId"/>
        <result column="company_name" property="companyName"/>
        <result column="status" property="status"/>
        <result column="create_time" property="createTime"/>
        <result column="name" property="name"/>
        <result column="branch_name" property="branchName"/>
    </resultMap>
1
2
3
4
5
6
7
8
9
10
11

TIP

resultMap:结果映射·标签

  • type属性:数据表数据映射具体的java实体类的全路径名。

result:具体映射属性标签,属性如下:

  • column:要与表中的字段名对应。
  • property:要与java的实体对象类的成员属性变量名对应

# 第二步:编写查询语句

此处没有具体的筛选条件。先看看sql语句的编写吧!

	<select id="listByCompanyId" resultType="java.util.List" resultMap="baseMap01">
        select
            tw.id,
            tw.mch_id,
            tw.avail_time,
            tw.company_id,
            tw.company_name,
            tw.status,
            tw.create_time,
            mch.name,
            mch.branch_name
        from time_wallet tw
        inner join merchant mch
        on tw.mch_id = mch.id
    </select>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 第三步:查询条件

    <where>
        -- 公司id不是空,就拼接sql语句
        <if test="companyId != null">
            and tw.company_id = #{companyId}
        </if>
        
        
        -- 商家id 不是空,拼接。
        <if test="mchId != null">
            and tw.mch_id = #{mchId}
        </if>
        
        
        
        <if test="keyword != null and keyword != ''">
            <choose>
                -- 前端传递了 公司id查询,说明是:门户
                -- 门户通过 搜索条件查询
                <when test="companyId != null">
                    and mch.name like concat("%", #{keyword}, "%")
                </when>
                
                --  这个上面二个字段没有拼接sql语句,
                --  说明:客户是通过搜索条件进行查询的。查询什么呢?如下分解!
                <when test="mchId == null and companyId == null">
                    and CONCAT_WS(",", tw.company_name, mch.name) like concat("%", #{keyword}, "%")
                </when>
            </choose>
        </if>
    </where>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
  • 通过搜索框进行模糊查询
                --  这个上面二个字段没有拼接sql语句,
                --  说明:客户是通过搜索条件进行查询的。查询什么呢?如下分解!
                <when test="mchId == null and companyId == null">
                    and CONCAT_WS(",", tw.company_name, mch.name) like concat("%", #{keyword}, "%")
                </when>
1
2
3
4
5

CONCAT_WS( )函数怎么用呢?

案例:A,B like %B%

返回为 1

Last Updated: 8/4/2024, 10:30:21 AM