ibatits中动态查询sql问题,请大家帮忙看看,谢谢非常~

在ibatis配置文件中采用如下形式实现:


<![CDATA[ $sql$ ]]>


sql是动态拼装的,根据配置,需要循环查询数据,且查询的sql语句不一样;
现在老是报“列名无效”的错误,请哪位帮忙看看啊,太感谢了~

配置remapResults="true"这个属性可以解决该问题,
配置如下:


<![CDATA[ $sql$ ]]>

当设置remapResults为"true" 时:
iBATIS会在每次查询的时候内省查询结果来设置元数据,来保证返回恰当的结果。这个属性会造成一定的性能损失,所以要谨慎使用,只在你需要的时候使用--查询列发生变化,直接的,如第一个例子一样,或者隐含的,如第二个例子,检索的表发生变化。

看上去没有语法错误

在log4j.properties(如果你是log4j的话),配置
[code="xml"]

log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.SQL Map.engine.impl.SQL MapClientDelegate=DEBUG

log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
[/code]

然后把执行的sql语句放到数据库里面执行看看语法哪儿错了


[quote] [/quote]

修改为
[code="java"] [/code]

建议检查:
1、传到SQL的类型是String吗?一个参数还是多个参数?如果是多个参数的话,parameterClass不能用String,建议用HashMap
2、查询的结果是HashMap还是SQL结果集?如果是结果集的话,最好先定义一个resultMap,比如:结果集中包含name,age,则resultMap定义为




返回的类型为resultMap="result"

还是使用 beneo (资深程序员) 所说的,先用debug模式,然后在你要执行查询的那一句java代码打断点,执行到此名时,清空控制台,在Eclipse执行下一步或按F6,然后复制控制台的sql代码,拿到数据库中执行一次就很清楚了

在ibatis配置文件中 一般报“列名无效”的错误 都是你的实体和你配置的 column 没有对应上的原因
从你的这个贴出来的上看 根本看不到有关“列名无效”的问题
应该是你写的sql上有字段没有对应好 或者写错了 把sql语句放到mysql工具跑一下看看 sql语句正确不正确