浏览 4383 次
锁定老帖子 主题:Ibatis 3 获取运行期sql和参数
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-20
在其它框架的dao实现,如hibernate或jdbc,可以把sql(hql)集中交给ibatis处理。基于动态sql,使得你的sql(hql)不再在代码中使用String拼接,且获得ibatis动态支持. 用于保存结果 public class IbatisSql { private String sql;//运行期的sql,带? private Object[] parameters;//;//运行期的参数,与?相匹配 private Class resultClass;//<select id="XXX" resultType="ZZZ">中的resultType public Class getResultClass() { return resultClass; } public void setResultClass(Class resultClass) { this.resultClass = resultClass; } public void setSql(String sql) { this.sql = sql; } public String getSql() { return sql; } public void setParameters(Object[] parameters) { this.parameters = parameters; } public Object[] getParameters() { return parameters; } } 获取 /** * * @param id xml 中sql的id ,如 <select id="XXX">中的"XXX" * @param parameterObject 传给这条sql的参数 * @return */ public IbatisSql getIbatisSql(String id, Object parameterObject) { IbatisSql ibatisSql = new IbatisSql(); SqlSessionFactory sqlSessionFactory = ...//参考官方例子 MappedStatement ms = sqlSessionFactory.getConfiguration().getMappedStatement(id); BoundSql boundSql = ms.getBoundSql(parameterObject); List<ResultMap> ResultMaps=ms.getResultMaps(); if(ResultMaps!=null&&ResultMaps.size()>0){ ResultMap ResultMap = ms.getResultMaps().get(0); ibatisSql.setResultClass(ResultMap.getType()); } ibatisSql.setSql(boundSql.getSql()); List<ParameterMapping> parameterMappings = boundSql.getParameterMappings(); if (parameterMappings != null) { Object[] parameterArray = new Object[parameterMappings.size()]; MetaObject metaObject = parameterObject == null ? null : MetaObject.forObject(parameterObject); for (int i = 0; i < parameterMappings.size(); i++) { ParameterMapping parameterMapping = parameterMappings.get(i); if (parameterMapping.getMode() != ParameterMode.OUT) { Object value; String propertyName = parameterMapping.getProperty(); PropertyTokenizer prop = new PropertyTokenizer(propertyName); if (parameterObject == null) { value = null; } else if (ms.getConfiguration().getTypeHandlerRegistry().hasTypeHandler(parameterObject.getClass())) { value = parameterObject; } else if (boundSql.hasAdditionalParameter(propertyName)) { value = boundSql.getAdditionalParameter(propertyName); } else if (propertyName.startsWith(ForEachSqlNode.ITEM_PREFIX) && boundSql.hasAdditionalParameter(prop.getName())) { value = boundSql.getAdditionalParameter(prop.getName()); if (value != null) { value = MetaObject.forObject(value).getValue(propertyName.substring(prop.getName().length())); } } else { value = metaObject == null ? null : metaObject.getValue(propertyName); } parameterArray[i] = value; } } ibatisSql.setParameters(parameterArray); } return ibatisSql; } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |