ibatis分页不怎么好用,不是数据库物理分页,数量大起来性能下降得厉害,所以有必要依托特定数据库做分页sql的包装,因此牵扯出这样的问题,即在代码中如何从指定id的select标签中获取被动态拼装好带参数占位符(?)并被实际执行的sql语句.
昨天跟了一下代码,从getSqlMapClientTemplate一路跟到ibatis的源代码,
找到了几处关键性代码,因此提取出来,在jpetstore上试验了一下,发现可行,
所以和大家分享一下.
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) );
以上例子代码是改自JPetstore,
建议大家自己重写一个继承自SqlMapClientDaoSupport的抽象类,把这个提取sql功能写成一个基类方法,好让具体的业务dao类使用.
分享到:
相关推荐
配置Generator通常在`generatorConfig.xml`文件中进行,其中包含数据库连接信息、目标输出目录、生成的实体类等配置。 2. **数据库连接**: 在`generatorConfig.xml`中,需要指定数据库驱动、URL、用户名和密码,...
7. **动态SQL**:iBATIS提供强大的动态SQL功能,例如`<if>`, `<choose>`, `<when>`, `<otherwise>`, `<where>`, `<set>`等标签,可以根据条件动态生成SQL。这使得你的映射文件更加灵活,减少了代码重复。 通过上述...
在这个文件中,你可以编写SQL查询、插入、更新和删除语句,并通过`<select>`, `<insert>`, `<update>`和`<delete>`标签进行配置。例如,一个简单的查询用户信息的映射文件可能如下所示: ```xml <mapper namespace=...
Oracle 和 iBatis 是两个在 Java 开发中广泛使用的数据库管理和持久层框架。iBatis 是一个优秀的 SQL 映射框架,它允许开发者将 SQL 查询直接写入 XML 文件,从而与 Java 代码分离,提高可维护性和灵活性。而 Oracle...
标题中的“ibatis<iterate>标签”指的是在iBATIS框架中用于动态SQL的一个关键功能。iBATIS是一个优秀的持久层框架,它允许将SQL语句直接嵌入到Java代码中,简化了数据库操作。而`<iterate>`标签是iBATIS提供的一个...
在这个配置文件中,你可以指定多个`<table>`元素,以生成对应多个表的实体类。 接下来,MBG的执行过程通常是通过Maven或者Gradle插件完成的。在构建脚本中添加相应的MBG插件,并调用生成命令,MBG就会根据配置文件...
最近想在最新的Spring5.0中集成ibatis(不是mybatis),发现已经不在支持SqlmapClientTemplate和SqlmapClientFactoryBean,于是搞了这个工具jar来进行支持如下配置 <bean id="sqlMapClient" class="org.spring...
在这个“IBatisDemo”压缩包中,可能包含了上述的所有文件,包括配置文件、SQL映射文件、Java源代码以及可能的测试类。通过这个实例,你可以学习到如何在Java应用中集成iBatis,以及如何使用它来执行基本的CRUD操作...
标题中的“Spring ibatis 的整合”指的是在Java开发中,将Spring框架与iBATIS(现在称为MyBatis)持久层框架集成的过程。这个过程旨在利用Spring的强大功能,如依赖注入和事务管理,以及iBATIS提供的灵活的SQL映射...
在Java开发中,Mybatis是一个流行的持久层框架,它简化了数据库操作,将SQL语句与Java代码分离。本篇将详细介绍如何搭建Mybatis框架环境,包括添加必要的依赖、配置文件的创建以及进行单元测试。 一、添加依赖 1. ...
在Java开发中,Maven和iBatis是两个非常重要的工具。Maven是一个项目管理和综合工具,它帮助开发者管理依赖、构建项目,并提供了一种标准化的项目结构。而iBatis则是一个SQL映射框架,它将SQL语句与Java代码分离,...
### ibatis配置文件信息 #### 一、简介 在Java开发领域中,ibatis(现称为MyBatis)是一款优秀的持久层框架,它通过XML或注解的方式将接口方法与SQL语句绑定起来,实现对象关系映射(ORM)功能。ibatis的主要优势...
配置文件中的`<settings>`标签包含了多个关键参数,它们控制着ibatis的行为特性: - `cacheModelsEnabled`: 控制是否启用缓存模型。设置为`true`表示启用缓存。 - `enhancementEnabled`: 控制是否对POJO进行增强,...
本文将详细介绍如何在IBatis.net中配置和使用各种数据库。 首先,理解IBatis.net的核心概念。IBatis 是一个基于.NET平台的持久层框架,它实现了SQL语句与.NET代码的解耦,通过XML或注解的方式将SQL与数据访问逻辑...
下面,我们将详细探讨Ibatis的配置文件、映射文件以及其在实际应用中的使用。 一、Ibatis配置文件 Ibatis的主要配置文件是`mybatis-config.xml`,它是整个系统的全局配置文件。这个文件中包含了数据源、事务管理器...
在iBatis中,`<iterate>`标签是一个非常实用的功能,它允许我们处理集合数据,如数组、List或Map等,进行循环遍历并生成动态SQL语句。下面我们将详细探讨`<iterate>`标签的用法及其示例。 `<iterate>`标签的主要...
Ibatis,全称为MyBatis,是一款开源的Java持久层框架,它允许开发者将SQL语句直接集成到Java代码中,避免了传统的JDBC代码编写,提高了开发效率和可维护性。Ibatis的核心功能包括映射器(Mapper)和SqlSession,通过...
iBATIS动态标签是SQL映射文件中的一种功能强大的特性,它允许在SQL语句中进行条件判断,根据传入的参数动态生成合适的查询条件。动态标签主要用于提高灵活性,使得SQL映射文件能够适应多种查询场景,而无需为每种...
接着,在Ibatis的主配置文件中引入这个映射文件: ```xml <!-- 在mybatis-config.xml文件的其他配置部分 --> <mappers> <mapper resource="com/example/mapper/UserMapper.xml"/> </mappers> ``` 最后,编写Java...
在XML映射文件中,你可以定义各种元素,如`<select>`(查询)、`<insert>`(插入)、`<update>`(更新)和`<delete>`(删除),以及动态SQL(`<if>`、`<choose>`等)。此外,还可以使用`<resultMap>`来定义结果集...