2012-12-15 15:36题主

SQL语句能做到动态拼接吗?

比如类似ibatis中,对参数进行逻辑判断,并动态拼接
2012-12-15 19:02#1
在WebBuilder中有两种参数:
1、标准jdbc参数,语法{?type.paramName?}
2、使用字符串替换的参数,语法{#paramName#}
详细说明见文档
参数值取自request的attributes或parameters(request.getAttribute或request.getParameter),参数若同名则前者优先。
举例:
select * from {#tableParam#} where FIELD1={?integer.myParam?} order by {#orderField#} {#orderDesc#}
显然tableParam,orderField,orderDesc不能作为jdbc参数,因此使用字符串替换的方式,myParam则是标准的jdbc参数。
至于sql拼装的逻辑判断,可以在module的initScript中使用server script或使用java直接生成sql,然后应用于数据访问组件,如:
var mySql='where field1={?param1?} ' + ' and field2=123';
request.setAttribute('whereSql',mySql);
然后可以在query的sql属性中使用select * from table {#whereSql#}就可
注意:拼装的sql要防止sql注入

2012-12-18 17:43#2
可以使用request.setAttribute重设值来防止使用“拼SQL”被注入
最好还是用SQL参数,这样绝对保险
2012-12-18 17:44#3
参数也可以运行 {?integer.val?}+3>100

返回开发者社区