ibatis2.3.4.726问题一


<select id="selectAccount" parameterClass="Account" resultMap="AccountResult">
select
ACC_ID ,
ACC_FIRST_NAME ,
ACC_LAST_NAME ,
ACC_EMAIL
from ACCOUNT
<dynamic prepend="where">
<isEqual property="id" prepend="and">ACC_ID = #id#</isEqual>
<isEqual property="firstName" prepend="and">ACC_FIRST_NAME = #firstName#</isEqual>
</dynamic>
</select>

上面这段代码会带来sql错误,如果要正确,必须这样写,注意下面的空格:

<select id="selectAccount" parameterClass="Account" resultMap="AccountResult">
select
ACC_ID ,
ACC_FIRST_NAME ,
ACC_LAST_NAME ,
ACC_EMAIL
from ACCOUNT
<dynamic prepend="where">
<isEqual property="id" prepend="and"> ACC_ID = #id#</isEqual>
<isEqual property="firstName" prepend="and"> ACC_FIRST_NAME = #firstName#</isEqual>
</dynamic>
</select>


why?
com.ibatis.sqlmap.engine.mapping.sql.dynamic.DynamicSql这个类中的方法:


private void processBodyChildren(StatementScope statementScope, SqlTagContext ctx, Object parameterObject, Iterator localChildren, PrintWriter out) {
while (localChildren.hasNext()) {
SqlChild child = (SqlChild) localChildren.next();
if (child instanceof SqlText) {
SqlText sqlText = (SqlText) child;

String sqlStatement = sqlText.getText();
//注意此处sqlStatement应该多加一个空格才能避免以上问题,
//下面一行代码是我个人添加
sqlStatement = " " + sqlStatement;
if (sqlText.isWhiteSpace()) {
out.print(sqlStatement);
} else if (!sqlText.isPostParseRequired()) {

// BODY OUT
out.print(sqlStatement);
//....
}
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值