在可配置的SQL中,必须是可以配置参数的。为了实现参数的配置,我们定义了两个语法。
1.":参数"语法
":参数"语法是SQL的基本语法,在实际的应用中,我们可以把冒号后的参数替换成需要的数值,这是SQL的基本语法。
例一:
如上,在实际的运行中,可以把":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 '
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
FROM ACTIONINFO T1, FRAMEINFO T2, ACTIONAUTHORITY T3
WHERE T3.ROLEID = :roleID
AND T3.ACTIONID = T1.ACTIONID
AND T1.FRAMEID = T2.FRAMEID
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);
FROM Certificate T1
WHERE 1 = 1
AND T1.hash = ' 123 ' AND T1.id = ' 456 '
FROM Certificate T1
WHERE 1 = 2
OR T1.hash = ' 123 ' AND T1.id = ' 456 '
OR T1.hash = ' 789 ' AND T1.id = ' ABC '