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语句,简单易懂,方便查询,初学者宝典
生成数据库表结构: 根据解析得到的SQL语句中的表名、字段名、数据类型等信息,动态地生成相应的数据库表结构。这可以通过编程语言与数据库操作的API来实现,比如Java中的JDBC或者MyBatis/iBatis提供的API。 执行SQL...
压缩包里包括Mygeneration_1309_2008100代码生成软件,自带IBatisObject模板,可根据数据库字段生成实体类和SQLMapping映射文件。
前段时间学习Ibatis,没事整理出来的demo,大家可以参考一下,程序中数据库名是SSH,表名是Test,字段是id主键自增 name address 数据库自己建哦
测试抓取ibatis日志生成的sql会有很多问号,参数填充太麻烦,所以写了一个窗口sql参数自动填充工具
iBATIS是以SQL为中心的持久化层框架。能支持懒加载、关联查询、继承等特性。 iBATIS不同于一般的OR映射框架。OR映射框架,将数据库表、字段等映射到类、属性,那是一种元数据(meta-data)映射。iBATIS则是将SQL查询的...
在java的控制台中看到的sql日志通常是如下的样子, Preparing: SELECT in (0,1) ORDER BY i.UPDATE_DATE_TIME DESC 2019-01-18 10:12:52,566 [DEBUG](org.apache.ibatis.logging.log4j.Log4jImpl.debug(Log4jImpl....
体现了Ibatis的作用及优点: 1.Ibatis的优点 (1) Ibatis更容易进行数据库优化。从配置文件中优化sql语句。 (2) ibatis可以进行细度优化。可以针对一个表中一个或几个字段进行更新等操作。Hibernate会更新所有的...
1.每个实体类需要配置各自的“SqlMap.config”在“config/SysConfig.xml”中,SqlMap,db1.Db1SqlMap就是“ibatis/db1/Db1SqlMap.config”,不同的db将分配不同的mapper类。 2.数据库链接统一放在“config/ibatis/...
iBatis的最简单的Helloworld工程,解压后可以直接在eclipse中使用。 需要你自己在SQL Server中创建表:UserVo,字段:id、name、sex、age。
maven3+struts2+spring+ibatis,本来是用maven3+struts2+spring+hibernate但考虑到hibernate在多表级联查询的时候执行效率不高,所以改用性能更好不过sql比较麻烦的的ibatis,本项目只有登录和插入数据,仅供参考: ...
一个映射层,在对象和数据库间传递数据,并保持两者与映射层本身相独立 iBATIS则与之不同,它不是直接在类与数据表或字段与列之间进行关联,而是把SQL语句的参数(parameter)和返回结果(result)映射至类。...
也就是说,ibatis 并不会为程序员在运行期自动生成SQL 执行。具体的SQL 需要程序员编写,然后通过映 射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。 使用ibatis 提供的ORM机制,对业务...
也就是说,ibatis 并不会为程序员在运行期自动生成SQL 执行。具体的SQL 需要程序员编写,然后通过映 射配置文件,将SQL 所需的参数,以及返回的结果字段映射到指定POJO 。 使用ibatis 提供的ORM 机制,对...
一个映射层,在对象和数据库间传递数据,并保持两者与映射层本身相独立 iBATIS则与之不同,它不是直接在类与数据表或字段与列之间进行关联,而是把SQL语句的参数(parameter)和返回结果(result)映射至类。...
程序员甚至不需要对 SQL 的熟练掌握, Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的 SQL 并调用 JDBC 接口加以执行。 系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL...
5分绝对不会让你失望,数据库没有上传,我用的sqlserver,有个student数据库,student表,3个字段。 自己建一个,另外不要忘了改数据库连接。
精简了jar包,只导入必要jar包 更改其他数据库需要导入数据库jar包,以及利用ABATOR生成代码 建立一个sqlserver的数据库 为test test表,字段ID,name两个字段
1.1 引言 约有90%的企业信息化管理系统基于数据库实现,这类系统中又有超过30%的代码集中在数据访问层负责业务数据存取。除了实现数据的增删改查,数据访问层还要提供一些与业务无关功能,例如面向对象的持久化与...
工具的使用,我写了一个说明。 功能: 能节省写SqlMap的时间,和创建实体的时间。 而且快捷准确,不必担心sql语句会写错,或者字段对应不上