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);
}
分享到:
相关推荐
标题与描述概述的知识点主要集中在iBATIS框架的SQL映射技术上,特别是针对不同类型的输入参数如何在iBATIS中构建SQL语句。以下是对这些知识点的详细展开: ### iBATIS SQL映射技术概览 iBATIS是早期流行的Java持久...
在iBatis中,参数名称可以是虚拟的,非数据库字段的名称。例如,在上面的代码中,我们使用了`_img_size_ge`和`_img_size_lt`作为参数名称,这些名称不是数据库字段的名称,而是我们自己定义的虚拟参数名称。 动态...
生成数据库表结构: 根据解析得到的SQL语句中的表名、字段名、数据类型等信息,动态地生成相应的数据库表结构。这可以通过编程语言与数据库操作的API来实现,比如Java中的JDBC或者MyBatis/iBatis提供的API。 执行SQL...
通过设置 `remapResults="true"`,可以强制IBatis每次执行此查询时都重新生成字段映射信息,而不是使用缓存的字段信息。 Java层调用DAO的方法如下: ```java public void getResDataByCondition(Page page) { // ...
在执行这些操作时,Ibatis会根据Java代码中的参数自动填充SQL语句,实现动态SQL。 MSSQL数据库提供了强大的存储过程功能,可以在数据库端预先编译和优化SQL逻辑。Ibatis支持调用存储过程,只需在映射文件中定义一个...
在实际使用中,开发者可以通过输入必要的参数,如表名、字段名等,快速生成对应的Ibatis SQL映射文件和Java Dao层代码。这些自动生成的代码遵循最佳实践,减少了手动编写带来的错误风险,同时也降低了开发成本。例如...
在Java Web开发中,iBatis(现在称为MyBatis)是一个流行的持久层框架,它提供了灵活的SQL映射机制,使得数据库操作更加便捷。在iBatis中,`<iterate>`标签是一个非常实用的功能,它允许我们处理集合数据,如数组、...
根据提供的文件信息,本文将对ibatis常用的SQL语句进行详细的解析与说明。这些SQL语句主要用于Oracle数据库中,涉及到了删除、插入以及查询等基本操作,并且在ibatis框架中实现了参数化处理。 ### 一、删除操作 ...
在IT行业中,数据库操作是开发工作中的重要环节,而Ibatis作为一款优秀的持久层框架,为Java开发者提供了灵活的SQL映射功能,减轻了手动编写SQL和操作结果集的负担。SQLServer则是一款广泛使用的商业关系型数据库...
SQLServer Ibatis XML自动生成工具是一款实用的开发辅助软件,主要针对Java开发人员,特别是那些在项目中使用Ibatis作为持久层框架的开发者。这款工具能够显著提高开发效率,通过自动化的方式生成Ibatis所需的XML...
根据给定的文件信息,以下是对“Ibatis常用SQL语句”的详细解析,涵盖了一系列Ibatis在数据操作中的应用实例。 ### Ibatis简介 Ibatis是一个支持普通SQL查询、存储过程以及高级映射的优秀持久层框架。Ibatis可以让...
实体类是业务对象的.NET类表示,包含了数据库表中的字段,而SQLMapping映射文件则定义了如何在数据库与实体类之间进行数据交互的规则。 1. **Mygeneration**:Mygeneration的核心功能在于它的模板引擎,它可以解析...
在这个项目中,开发者使用了ASP.NET MVC框架作为后端控制层,iBatis作为数据访问层,以及SQL作为数据库查询语言。下面将详细阐述这三个主要组件以及它们之间的交互。 **ASP.NET MVC(Model-View-Controller)** ASP...
在本教程"08_传智播客ibatis教程_sql主键生成方式"中,你将会深入学习到如何在Ibatis中配置和使用上述各种主键生成策略,通过实例和代码讲解,帮助你更好地理解和掌握Ibatis在处理SQL主键生成方面的技巧和最佳实践。...
在实际应用中,iBATIS SQL Maps常与其他Java框架(如Spring)集成,以实现更强大的功能,如AOP(面向切面编程)和依赖注入。同时,随着技术的发展,iBATIS已被MyBatis所取代,但其设计理念和核心思想在MyBatis中得以...
2. 细粒度优化:iBATIS允许对SQL进行更细致的优化,如直接指定更新单个字段的语句,或选择性地获取表的部分内容。 3. 可维护性:由于SQL保存在单独的文件中,iBATIS的可维护性优于Hibernate,后者有时会在Java代码中...
但当涉及数据库字段的修改,Hibernate的改动通常较少,iBATIS则需要修改SQL Mapping。 3. 细粒度优化:iBATIS允许开发者进行更细致的SQL优化,例如针对特定场景编写高效的更新或查询语句。 4. 维护性:由于iBATIS的...
MyBatis/iBatis 是两个流行的数据访问框架,它们简化了Java开发中的数据库操作。iBatis 是早期的版本,而 MyBatis 是其后继者,提供了更加强大和灵活的功能。本教程将深入探讨如何使用MyBatis/iBatis自动生成SQL...
在`org.apache.ibatis.executor.resultset.ResultSetHandler`中,ResultMap被用来定义字段与Java对象属性的映射关系。ResultMap不仅支持简单的列名映射,还能处理复杂的一对多、一对一关系映射。 六、...
在IT行业中,数据库操作是不可或缺的一部分,而Ibatis作为一个轻量级的持久层框架,它在处理SQL方面具有很高的灵活性。本教程“08_ibatis教程_sql主键生成方式”聚焦于Ibatis如何处理数据库主键的生成策略,这对于...