论坛首页 Java企业应用论坛

『讨论』请问iBatis是否可以直接执行SQL语句

浏览 15785 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-08-24  
软件环境:
   在分页时,我想通过某一个配置好的查询,自己构造出一个诸如:
select count(*) from Table where <cond>的语句,其中cond必须和已经配置好并动态生成的Where一致,只是想把前面的部分替换成count(*)以便得到查询的总记录数,不知可否通过iBatis的API动态在程序中生成,并执行,而不要一个查询语句配置一个对应的获取总数的配置项。
配置文件:

错误提示信息:

你的分析:
   我个人觉得iBatis好象不能这么做,只得配置两个项,不知哪位高手用过,给我指点一下。不胜感激。
   发表时间:2006-08-24  
同问。
我以前看iBatis API and Sample的时候,也有这样的疑惑。楼主也遇到了这样的疑问。
从常识看,iBatis API应该不至于如此愚蠢,应该有直接使用SQL String的API。
0 请登录后投票
   发表时间:2006-08-24  
楼主说这个"$"符号吗?
select count(*) from Table where $cond$
不知道是否理解正确
0 请登录后投票
   发表时间:2006-08-24  
yfmine 写道
楼主说这个"$"符号吗?
select count(*) from Table where $cond$
不知道是否理解正确

  不是,我是说,假设有如下一个配置项:
  <select id="getAccountByUsername" resultMap="result">
    select
          signon.username as userid,
          account.email,
          profile.mylistopt,
          profile.banneropt,
          bannerdata.bannername
         from account, profile, signon, bannerdata
        where account.userid = #value#
        and signon.username = account.userid
        and profile.userid = account.userid
        and profile.favcategory = bannerdata.favcategory
  </select>

  如果我要获取该查询语句的结果集总行数,能否保持where后的条件不变(因为条件是运行期变化的),只将select 至from的部分替换成count(*)去查询,这样我就不用再配置一个获得结果总数的配置项了。
0 请登录后投票
   发表时间:2006-08-24  
唉,这个问题好象有比较多人问过,好象一直没有看到好的解决方法,难道真的要配置一个专门负责获取总记录数的配置项吗?
0 请登录后投票
   发表时间:2006-08-24  
以我对iBatis的了解,我确认没有。

其实要支持这个功能,其实有很多问题。

比如,按照楼主的意思,是想把Select子句换成Select Count( * )。那么你不妨写一个带有Group By子句的SQL试试,SQL的语义是错的。

还有一种稳妥的做法,是对整个SQL语句外面加Select Count( * ) From。但是这样的子查询对于有些数据库是不支持的,比如以前的MySQL4.0。

所以我想iBatis不支持这个功能可能也是基于上述的考虑吧。
0 请登录后投票
   发表时间:2006-08-31  
downpour 写道
以我对iBatis的了解,我确认没有。

其实要支持这个功能,其实有很多问题。

比如,按照楼主的意思,是想把Select子句换成Select Count( * )。那么你不妨写一个带有Group By子句的SQL试试,SQL的语义是错的。

还有一种稳妥的做法,是对整个SQL语句外面加Select Count( * ) From。但是这样的子查询对于有些数据库是不支持的,比如以前的MySQL4.0。

所以我想iBatis不支持这个功能可能也是基于上述的考虑吧。


其实group by 本生就是分组查询的,如果加count(*)语法肯定是错误的,但是group by的这种查询可以单独拿出来考虑,在实际应用中,有更多的需求是要自动加count(*)的吧。
0 请登录后投票
   发表时间:2006-09-06  
ibatis有个动态标签可以做判断的,我记得类似于if,我们这的人都这么些,楼主的问题没特明白但我觉得应该是拿if解决吧?-_-#
0 请登录后投票
   发表时间:2006-09-06  
建议还是重新定义一个statment吧,如果你需要动态的生成select 中查询项,哪你的返回结果就不确定了。就只能指明map为返回结果。

   对于调用端来说,还需要知道这个map究竟式返回的式对象的映射,还是查询的记录总数。
0 请登录后投票
   发表时间:2006-09-22  
#include<> ibatis2里面好象有了和这个功能类似的一个标签了。这个应该就可以满足你的要求了吧。不过不要把它放在[[CDATA里面了哦。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics