iBatis的SqlMap中,我写的这条动态SQL语句,将表名当做参数动态传递,报“表名无效”错误。

select*from<dynamic><isNotEmptyproperty="table">#table:VARCHAR#</isNotEmpty></dynamic... select * from
<dynamic>
<isNotEmpty property="table">
#table:VARCHAR#
</isNotEmpty>
</dynamic>
<dynamic prepend="where">
<isNotEmpty prepend="and" property="fpdm">
t.send_fpdm = #fpdm:VARCHAR#
</isNotEmpty>
<isNotEmpty prepend="and" property="begin">
to_number(t.send_begin_fphm)<![CDATA[ >= ]]>to_number(#begin:VARCHAR#)
</isNotEmpty>
<isNotEmpty prepend="and" property="end">
to_number(t.send_end_fphm)<![CDATA[ <= ]]>to_number(#end:VARCHAR#)
</isNotEmpty>
</dynamic>

<dynamic>属性难道只能用于where吗?为什么动态添加表就错呢?
在线等,谢谢!
展开
 我来答
百度网友50d1865ef
2013-04-21 · TA获得超过559个赞
知道小有建树答主
回答量:317
采纳率:0%
帮助的人:329万
展开全部
因为#value#这种形式的,转换为SQL中的?,而问号只有在赋值属性(字段)的时候才用,表名不能用这个方式写,而且更不要用$value$这种形式替换,因为ibatis编译的SQL会缓存。导致第二次传递进来的表名不会替换,在表可数的情况下,可以传递一个变量,来判断需要查询哪个表。
lihengju9112KK
2013-04-21 · TA获得超过510个赞
知道小有建树答主
回答量:311
采纳率:0%
帮助的人:60.7万
展开全部
表名称需要使用“$”而不是“#”
追问
谢谢,不过还没有实验。等验证正确了再给你满意答案。还有个问题:如果表可以通过用“$”动态组建SQL语句,那不是带来另一个问题:一旦这个表这个参数值为空,这条SQL语句岂不是错误了吗?iBatis有什么机制避免吗?
追答
为空的话,会报错的,具体怎么样避免,还没有用过
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式