论坛首页 入门技术论坛

我如何取得配置文件中<select/>标签中的sql呢?我如果取出来就能封装分页了

浏览 2650 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-12-10  
我怎么取得呢?难道非得自己去写程序解析他的配置文件么?我想用来分页,oracle的。如果取出来就可以封装了。谢谢。。谁有点思路
   发表时间:2007-12-10  
呵呵,和你有一样的想法,正在尝试中.
0 请登录后投票
   发表时间:2007-12-11  
昨天跟了一下代码,从getSqlMapClientTemplate一路跟到ibatis的源代码,
找到了几处关键性代码,因此提出出来,试验了一下,发现可行,所以和大家分享一
下.

import com.ibatis.sqlmap.engine.impl.ExtendedSqlMapClient;
import com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate;
import com.ibatis.sqlmap.engine.mapping.sql.Sql;
import com.ibatis.sqlmap.engine.mapping.statement.MappedStatement;




//SqlMapExecutorDelegate是一个相当核心的类,他存放了配置文件所有信息和java连接对象,有一个会话池和一个请求池,还有sql解析其,以及一个具体sql语句的执行者,大家可以看看
SqlMapExecutorDelegate delegate=((ExtendedSqlMapClient)(getSqlMapClientTemplate().getSqlMapClient())).getDelegate();  
//这个类用来存放某个id名的Statement信息,如这个当中的getProduct就是一条语句的配置id名
MappedStatement ms = delegate.getMappedStatement("getProduct");
//sql类就是某一类型	Statement的对应sql拼装解析类
Sql sql=ms.getSql();
//然后调用getSql方法,把参数值数组传进去,如下面只有一个参数productId,便可以生成 形如 select * from xxx where xx=?的sql语句了,代理类的sql执行者便可以根据这个sql和参数值数组进行参数查询了,前面那个参数的类型是com.ibatis.sqlmap.engine.scope.RequestScope,这个要从上面提到的代理类里面获取,但是因为是保护成员,而且发现拼凑sql的时候并没有多大作用,所以传了个null进去,结果居然通过了,不过这部分我还要确认一下.个人感觉RequestScope还是很重要的,可以会影响其他类型的Statement
System.out.println(sql.getSql(null,productId) );


0 请登录后投票
论坛首页 入门技术版

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