`

Ibatis中获得执行的SQL及字段信息

    博客分类:
  • ORM
阅读更多
import com.ibatis.sqlmap.engine.mapping.result.ResultMapping;

/**
 * @description Ibatis Sql 实体类
 * @author 杨惠
 * @version 1.0
 * @date 2010-8-13
 */

public class IbatisSql {

	// SQL语句
	private String sql = "";
	// SQL字段信息
	private ResultMapping[] resultMappings = null;

	/**
	 * 获得:SQL语句
	 * 
	 * @return the sql
	 */

	public final String getSql() {
		return sql;
	}

	/**
	 * 设置:SQL语句
	 * 
	 * @param sql
	 *            the sql to set
	 */

	public final void setSql(String sql) {
		if (sql != null) {
			this.sql = sql;
		}
	}

	/**
	 * 获得:SQL字段信息
	 * 
	 * @return the resultMappings
	 */

	public final ResultMapping[] getResultMappings() {
		return resultMappings;
	}

	/**
	 * 设置:SQL字段信息
	 * 
	 * @param resultMappings
	 *            the resultMappings to set
	 */

	public final void setResultMappings(ResultMapping[] resultMappings) {
		if (resultMappings != null) {
			this.resultMappings = resultMappings;
		}
	}

}


import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.engine.mapping.result.ResultMapping;
import com.ibatis.sqlmap.engine.mapping.sql.Sql;
import com.ibatis.sqlmap.engine.mapping.statement.MappedStatement;
import com.ibatis.sqlmap.engine.scope.SessionScope;
import com.ibatis.sqlmap.engine.scope.StatementScope;

/**
 * @description Ibatis SQL公共类
 * @author 杨惠
 * @version 1.0
 * @date 2010-8-13
 */

public class IbatisUtil {


	/**
	 * 获得Ibatis 执行参数,并转成实体类IbatisSql
	 * 
	 * @param id
	 *            SQL的ID
	 * @param sqlMapClient
	 *            com.ibatis.sqlmap.client.SqlMapClient;
	 * @param parameterObject
	 *            参数对象
	 * @return IbatisSql
	 */
	public static final IbatisSql getIbatisSql(String id,
			SqlMapClient sqlMapClient, Object parameterObject) {
		IbatisSql ibatisSql = new IbatisSql();
		MappedStatement mappedStatement = sqlMapClient.getDelegate()
				.getMappedStatement(id);
		Sql sql = mappedStatement.getSql();
		SessionScope sessionScope = new SessionScope();
		sessionScope.incrementRequestStackDepth();
		StatementScope statementScope = new StatementScope(sessionScope);
		mappedStatement.initRequest(statementScope);
		String strSql = sql.getSql(statementScope, parameterObject);
		strSql = strSql != null ? strSql.trim().toLowerCase() : strSql;
		ibatisSql.setSql(strSql);// 设置SQL语句
		ResultMapping[] resultMappingsArray = statementScope.getResultMap().getResultMappings();//获得字段信息
		ibatisSql.setResultMappings(resultMappingsArray);
		sql.cleanup(statementScope);
		sessionScope.cleanup();
		mappedStatement = null;
		sql = null;
		sessionScope = null;
		statementScope = null;
		id = null;
		parameterObject = null;
		return ibatisSql;
	}

}
修改Ibatis源码:
在SqlMapExecutor接口中增加如下代码:
  public abstract SqlMapExecutorDelegate getDelegate();

调用示例:
XML:返回一个List<HashMap>类型
	<select id="queryBusiTypeBySettleDateAsList" parameterClass="spBalance"
		resultClass="java.util.HashMap">
		select s.applicationtypeid as applicationtypeid,d.pname as
		busitypename from (select ApplicationTypeID from tb_spbalance
		where settledate=#settleDate# group by ApplicationTypeID)
		s,tb_datadict_collection d where d.spbusitype='Mobile' and
		d.property='BusiType' and s.ApplicationTypeID=d.pvalue order by d.seq asc
	</select>
代码:
	@SuppressWarnings("unchecked")
	public List<List<String>> queryBusiTypeBySettleDateAsList(
			SPBalance spBalance) {
               //必须先执行查询方法
		List<Map<?, ?>> listMap = sqlClient.queryForList( "queryBusiTypeBySettleDateAsList", spBalance);
               //然后调用此方法才能获得SQL及字段信息
		IbatisSql ibatisSql = IbatisUtil.getIbatisSql("queryBusiTypeBySettleDateAsList", this
				.getSqlMapClient(), spBalance);
		return CommonCovert.listMapToList(listMap, ibatisSql);
	}
0
0
分享到:
评论
4 楼 huiy 2010-08-17  
List<Map>的数据是无序的,只有自己在规定字段顺序的情况,才能显示有序结果集。但是有些时候你根本无法知道字段的数目及具体名称。
3 楼 huiy 2010-08-17  
1.版本是2.3.4
2.有些情况是需要这些信息的,只是你没有遇到罢了
2 楼 abear 2010-08-17  
多此一举,
1 楼 qq123zhz 2010-08-17  
ibatis2?

相关推荐

    ibatis常用sql语句

    标题与描述概述的知识点主要集中在iBATIS框架的SQL映射技术上,特别是针对不同类型的输入参数如何在iBATIS中构建SQL语句。以下是对这些知识点的详细展开: ### iBATIS SQL映射技术概览 iBATIS是早期流行的Java持久...

    ibatis动态SQL标签用法

    在iBatis中,参数名称可以是虚拟的,非数据库字段的名称。例如,在上面的代码中,我们使用了`_img_size_ge`和`_img_size_lt`作为参数名称,这些名称不是数据库字段的名称,而是我们自己定义的虚拟参数名称。 动态...

    根据MyBatis或iBatis的SQLMapper文件反向生成数据库表

    生成数据库表结构: 根据解析得到的SQL语句中的表名、字段名、数据类型等信息,动态地生成相应的数据库表结构。这可以通过编程语言与数据库操作的API来实现,比如Java中的JDBC或者MyBatis/iBatis提供的API。 执行SQL...

    解决IBatis缓存动态字段问题

    通过设置 `remapResults="true"`,可以强制IBatis每次执行此查询时都重新生成字段映射信息,而不是使用缓存的字段信息。 Java层调用DAO的方法如下: ```java public void getResDataByCondition(Page page) { // ...

    ibatis +mssql 执行增删改查 +存储过程

    在执行这些操作时,Ibatis会根据Java代码中的参数自动填充SQL语句,实现动态SQL。 MSSQL数据库提供了强大的存储过程功能,可以在数据库端预先编译和优化SQL逻辑。Ibatis支持调用存储过程,只需在映射文件中定义一个...

    ibatis sql生成工具

    在实际使用中,开发者可以通过输入必要的参数,如表名、字段名等,快速生成对应的Ibatis SQL映射文件和Java Dao层代码。这些自动生成的代码遵循最佳实践,减少了手动编写带来的错误风险,同时也降低了开发成本。例如...

    ibatis中iterate的例子

    在Java Web开发中,iBatis(现在称为MyBatis)是一个流行的持久层框架,它提供了灵活的SQL映射机制,使得数据库操作更加便捷。在iBatis中,`&lt;iterate&gt;`标签是一个非常实用的功能,它允许我们处理集合数据,如数组、...

    ibatis常用的sql

    根据提供的文件信息,本文将对ibatis常用的SQL语句进行详细的解析与说明。这些SQL语句主要用于Oracle数据库中,涉及到了删除、插入以及查询等基本操作,并且在ibatis框架中实现了参数化处理。 ### 一、删除操作 ...

    ibatis sqlserver代码自动生成

    在IT行业中,数据库操作是开发工作中的重要环节,而Ibatis作为一款优秀的持久层框架,为Java开发者提供了灵活的SQL映射功能,减轻了手动编写SQL和操作结果集的负担。SQLServer则是一款广泛使用的商业关系型数据库...

    sqlserver Ibatis XML自动生成工具

    SQLServer Ibatis XML自动生成工具是一款实用的开发辅助软件,主要针对Java开发人员,特别是那些在项目中使用Ibatis作为持久层框架的开发者。这款工具能够显著提高开发效率,通过自动化的方式生成Ibatis所需的XML...

    Ibatis常用sql语句

    根据给定的文件信息,以下是对“Ibatis常用SQL语句”的详细解析,涵盖了一系列Ibatis在数据操作中的应用实例。 ### Ibatis简介 Ibatis是一个支持普通SQL查询、存储过程以及高级映射的优秀持久层框架。Ibatis可以让...

    Mygeneration_1309_20081006—IBatis_SQL映射+实体模板

    实体类是业务对象的.NET类表示,包含了数据库表中的字段,而SQLMapping映射文件则定义了如何在数据库与实体类之间进行数据交互的规则。 1. **Mygeneration**:Mygeneration的核心功能在于它的模板引擎,它可以解析...

    ASP.NET MVC+iBatis+SQL

    在这个项目中,开发者使用了ASP.NET MVC框架作为后端控制层,iBatis作为数据访问层,以及SQL作为数据库查询语言。下面将详细阐述这三个主要组件以及它们之间的交互。 **ASP.NET MVC(Model-View-Controller)** ASP...

    08_ibatis教程_sql主键生成方式.zip

    在本教程"08_传智播客ibatis教程_sql主键生成方式"中,你将会深入学习到如何在Ibatis中配置和使用上述各种主键生成策略,通过实例和代码讲解,帮助你更好地理解和掌握Ibatis在处理SQL主键生成方面的技巧和最佳实践。...

    iBATIS-SqlMaps-2_cn.pdf

    在实际应用中,iBATIS SQL Maps常与其他Java框架(如Spring)集成,以实现更强大的功能,如AOP(面向切面编程)和依赖注入。同时,随着技术的发展,iBATIS已被MyBatis所取代,但其设计理念和核心思想在MyBatis中得以...

    ibatis基础教学文档

    2. 细粒度优化:iBATIS允许对SQL进行更细致的优化,如直接指定更新单个字段的语句,或选择性地获取表的部分内容。 3. 可维护性:由于SQL保存在单独的文件中,iBATIS的可维护性优于Hibernate,后者有时会在Java代码中...

    ibatis教程,ibatis帮助文档

    但当涉及数据库字段的修改,Hibernate的改动通常较少,iBATIS则需要修改SQL Mapping。 3. 细粒度优化:iBATIS允许开发者进行更细致的SQL优化,例如针对特定场景编写高效的更新或查询语句。 4. 维护性:由于iBATIS的...

    mybatis/ibatis自动生成SQLMapper脚本

    MyBatis/iBatis 是两个流行的数据访问框架,它们简化了Java开发中的数据库操作。iBatis 是早期的版本,而 MyBatis 是其后继者,提供了更加强大和灵活的功能。本教程将深入探讨如何使用MyBatis/iBatis自动生成SQL...

    ibatis源码,ibatis源码 ibatis源码 ibatis源码

    在`org.apache.ibatis.executor.resultset.ResultSetHandler`中,ResultMap被用来定义字段与Java对象属性的映射关系。ResultMap不仅支持简单的列名映射,还能处理复杂的一对多、一对一关系映射。 六、...

    08_ibatis教程_sql主键生成方式.rar

    在IT行业中,数据库操作是不可或缺的一部分,而Ibatis作为一个轻量级的持久层框架,它在处理SQL方面具有很高的灵活性。本教程“08_ibatis教程_sql主键生成方式”聚焦于Ibatis如何处理数据库主键的生成策略,这对于...

Global site tag (gtag.js) - Google Analytics