SQL文的管理和解析(二)PrepareSQL----SQL参数替换的简单语法及对应的数据结构

来源:互联网 发布:linux 网络唤醒 编辑:程序博客网 时间:2024/05/29 16:51
在可配置的SQL中,必须是可以配置参数的。为了实现参数的配置,我们定义了两个语法。

1.":参数"语法
    ":参数"语法是SQL的基本语法,在实际的应用中,我们可以把冒号后的参数替换成需要的数值,这是SQL的基本语法。
例一:
SELECT T1.ACTIONID
      
FROM ACTIONINFO T1, FRAMEINFO T2, ACTIONAUTHORITY T3
     
WHERE T3.ROLEID = :roleID
       
AND T3.ACTIONID = T1.ACTIONID
       
AND T1.FRAMEID = T2.FRAMEID
如上,在实际的运行中,可以把":roleID"替换成输入的数值。

2.{:参数0 表达式 :参数1 表达式 :参数2 .......}语法
    该语法的核心是{}。其中参数0是控制{}内能否执行的参数。如果参数0不存在,则{}内的所有语句都不执行,否则执行。参数1、参数2实际上是在参数0内部的,比如说参数0是一个Map,而参数1和2是Map中的对象。
例二:

          
FROM Certificate T1
         
WHERE 1 = 2
           {:hashMap
OR T1.hash =:hash AND T1.id=:id}

3.数据结构对应
    (1)对语法1的数据结构
           语法1的数据结构很简单,就是一个Map,里面有一个参数名和参数值,比如对例一中的参数,可以用以下方法放入参数:

        HashMap 
<String, Object> params = new HashMap <String, Object>();
        params.put(
":roleid""123456");

针对以上数据,SQL文会变成

    
SELECT T1.ACTIONID
      
FROM ACTIONINFO T1, FRAMEINFO T2, ACTIONAUTHORITY T3
     
WHERE T3.ROLEID = '123456'
       
AND T3.ACTIONID = T1.ACTIONID
       
AND T1.FRAMEID = T2.FRAMEID


    (2)对语法2的数据结构
           语法2的数据结构也是一个Map,不过稍微有点复杂,Map的key仍然是参数名,但是value会是Map或者是Map数组。对例二中的参数,可以用以下方法放入参数:

        HashMap 
<String, Object> params = new HashMap <String, Object>();
        HashMap 
<String, Object> params2 = new HashMap <String, Object>();
        params2.put(
":hash""123");
        params2.put(
":id""456");
        params.put(
":hashMap", param2);
SQL会转换成

          
FROM Certificate T1
         
WHERE 1 = 1
           
AND T1.hash ='123' AND T1.id='456'
如果放的是Map数组,则{}内的语句会重复,比如

          
FROM Certificate T1
         
WHERE 1 = 2
          
OR T1.hash ='123' AND T1.id='456'
          
OR T1.hash ='789' AND T1.id='ABC'
原创粉丝点击