# 宏变量

  • 宏变量使用大括号进行包裹( { }),中间为变量名,变量名仅可使用字母、数字

# 系统变量

  • 引用当前系统中的变量,可用于sql中的任意位置。

  • 可用系统变量:

    #{user.id}  当前登录用户id
    #{user.name}  当前登录用户名
    #{user.account} 当前登录用户登录账号
    #{user.phone} 当前登录用户手机号
    #{user.email} 当前登录用户邮箱
    #{user.groupName} 当前登录用户组名称
    
  • 示例

    • sql:
     select * from tdp_sys_account where phone = #{user.phone}
    
    • 代码执行时会把当前sql替换为:
      select * from tdp_sys_account where phone = "当前登录用户手机号"
    

    提示:

    注: 如使用的系统变量为用户组

    • = #{user.groupName} ,执行时,替换为 = '用户组1,用户组2'
    • in (#{user.groupName}),执行时,替换为 in ('用户组1','用户组2')

# 查询参数变量

  • 变量名标记, 如 #{selectYear}。 用于where筛选语句中,查询参数通过页面交互进行传递 。如果无值,会移除该条查询条件

  • 示例

    • 存在参数name,当前值为 "名称"

    • sql:

        SELECT *
        FROM HT_ALARM_CONCAT_GROUP
        WHERE GROUP_NAME = #{name}
      
    • 代码执行时会把当前sql替换为:

        SELECT *
        FROM HT_ALARM_CONCAT_GROUP
        WHERE GROUP_NAME = '名称'
      
  • 其它使用场景

     存在参数param,当前值为"测试"
     查询参数条件为 LIKE 模糊查询:
     模糊查询可指定匹配方式,例如:
     like #{%param} 左模糊查询 ,执行时,替换为 like '%测试'
     like #{param%} 右模糊查询,执行时,替换为 like '测试%'
     like #{%param%} 全模糊查询,执行时,替换为 like '%测试%'
    
     存在参数list,当前值为"测试1,测试2"
     查询参数条件为IN、NOT IN:字符串数组的数据通过半角逗号(,)分隔拼接为字符串
     例如:
     in (#{list}),执行时,替换为 in(测试1,测试2)
    

# sql片段

  • 引用已保存的sql数据资源, 中间为已保存sq数据资源l的名称,如,可在from 或join关联语句中引用已保存的sql。

  • 示例

    • 存在名称为 "数据资源"的sql数据资源,数据资源内容为:"select * from tdp_sys_account"。
    • 如下sql:
      select * from {{数据资源}} a
    
    • 代码执行时会把当前sql替换为:

       select a.*
       from (select * from tdp_sys_account) a
      

# 示例

  • sql语句

    SELECT
     A.*
    from
     {{area}} A
    JOIN TDP_SYS_AREA B ON A.ID = B.PARENT_ID
    WHERE
     A.AREA_LEVEL in (#{areaLevel})
     and A.AREA_NAME LIKE #{%areaName%}
     and A.AREA_TYPE = #{areaType}
     and A.ID =  #{user.id}
    
  • 存在以下参数: areaName = 北京,areaType=省,areaLevel=3,2,1。

  • 存在sql数据资源名称为“area”的资源。资源内容为“SELECT * FROM TDP_SYS_AREA”。

  • 变量替换后:

    SELECT
    A.*
    FROM
      (SELECT * FROM TDP_SYS_AREA) AS A
      INNER JOIN TDP_SYS_AREA AS B ON A.ID = B.PARENT_ID
    WHERE
      A.AREA_LEVEL IN ('3', '2', '1')
      AND A.AREA_NAME LIKE '%北京%'
      AND A.AREA_TYPE = '省'
      AND A.ID = 'UJc9f3cc83c77b430dbd35b1867bc85d'
    
Last Updated: 7/11/2024, 5:37:40 PM