SQL中最复杂的还是查询了,IBATIS的动态SELECT和<include/>配合起来的确很猛,
比如ORACLE中分页:
select * from (
select rownum rn, t.* from (
select * from myivr_trole -- 真正的SQL语句
) t where rownum <= ?)
where rn > ?
其实上面SQL中真正自己写的只有 select * from myivr_trole 上面的,和下面的是固定的,那么ibatis中可以这么应用
我定义2个片段,一个为上部分SQL,一个为下部分的SQL,分别为sql_select_begin、sql_select_end
<sql id="sql_select_begin">
select * from (
select rownum rn,t.* from
(
</sql>
<sql id="sql_select_end">
) t
<isNotNull property="end">
<isNotEmpty property="start" prepend="">
<isNotEmpty property="end" prepend="where">
<![CDATA[ rownum <= #end# ]]>
</isNotEmpty>
</isNotEmpty>
</isNotNull>
)
<isNotNull property="start">
<isNotEmpty property="end" prepend="">
<isNotEmpty property="start" prepend="where">
<![CDATA[
rn > #start#
]]>
</isNotEmpty>
</isNotEmpty>
</isNotNull>
</sql>
并且我将它们放入namespace="common"中,那么我现在写真正的逻辑SQL
<sql id="sql_role_where">
select * from myivr_trole
<dynamic prepend="where">
<isNotEmpty property="id" prepend="and">
roleId = #id#
</isNotEmpty>
<isNotEmpty property="statu" prepend="and">
statu = #statu#
</isNotEmpty>
<isNotEmpty property="name" prepend="and">
upper(ROLENAME) like upper('%'||#name#||'%') ESCAPE '/'
</isNotEmpty>
<isNotEmpty property="desp" prepend="and">
upper(ROLEDESP) like upper('%'||#desp#||'%')
</isNotEmpty>
<isNotEmpty property="startTime" prepend="and">
<![CDATA[
logTime >= #startTime#
]]>
</isNotEmpty>
<isNotEmpty property="endTime" prepend="and">
<![CDATA[
logTime <= #endTime#
]]>
</isNotEmpty>
</dynamic>
</sql>
最后一步,我将之前的2个片段组合:
<select id="queryRoleForList" resultMap="role.roleMap" parameterMap="role.paramRoleMap">
<include refid="common.sql_select_begin"/>
<include refid="role.sql_role_where"/>
<include refid="common.sql_select_end"/>
</select>
那么,现在查所以数据的话会生成SQL:
select * from (
select rownum rn,t.* from (
select * from myivr_trole
) t
)
如果是分页的话,会生成:
select * from (
select rownum rn, t.* from (
select roleid, rolename, roledesp, logtime, statu
from myivr_trole
where upper(rolename) like upper('%' || ? || '%') escape '/'
and upper(roledesp) like upper('%' || ? || '%')
) t where rownum <= ?
) where rn > ?
现在你应该还可以想到其实select count(*)这个也是重复的,也可以写成一个片段的
<sql id="sql_count">
select count(*) from
</sql>
再查询总记录的时候就可以这样了:
<select id="queryCountForRole" resultClass="long" parameterMap="role.paramRoleMap">
<include refid="common.sql_count"/>(
<include refid="role.sql_role_where"/>)
</select>
看到没,WHERE条件重复使用了,呵呵,下一篇讲解如何优化SQL。
分享到:
相关推荐
Ibatis的另一个强大特性是SQL动态标签,它允许我们在XML映射文件中编写动态SQL。例如,可以根据条件动态地添加WHERE子句,极大地提高了代码的可复用性和灵活性。 7. **Ibatis的优势** Ibatis的优势在于它的灵活性...
6. **Dynamic SQL**:允许在XML映射文件中进行条件判断,动态生成SQL语句,提高了SQL的灵活性和复用性。 7. **Transactions**:SQL Maps支持声明式和编程式的事务管理,确保数据的一致性和完整性。 通过使用iBATIS...
- **SQL 片段重用**:通过 `<sql>` 元素定义通用的 SQL 片段,提高代码复用性。 - **键值自动生成**:配置主键自增或其他机制来自动为新记录生成唯一的标识符。 - **存储过程**:支持调用数据库中的存储过程,并处理...
标题与描述概述的知识点主要集中在iBATIS框架的SQL映射技术上,特别是针对不同类型的输入参数如何在iBATIS中构建SQL语句。以下是对这些知识点的详细展开: ### iBATIS SQL映射技术概览 iBATIS是早期流行的Java持久...
Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将注意力集中在编写可复用的Java代码上,而不是处理繁琐的JDBC代码和手动参数设置。Ibatis API是这个框架的核心,提供了丰富...
例如,支持动态SQL,允许在运行时根据条件构建SQL语句,极大地提高了代码的复用性和灵活性。此外,还包括事务管理,使得开发者能够更好地控制数据的读写操作,并且支持多种数据库,如Oracle、MySQL、SQL Server等。 ...
8. **动态SQL**:iBatis允许你在SQL映射文件中编写条件语句,根据参数值动态地改变SQL结构,极大地提高了SQL的可复用性和灵活性。 通过这个入门例子,你可以亲手实践上述知识点,逐步理解iBatis的工作原理,并学会...
在本篇文章中,我们将深入探讨如何使用 Java 编程语言结合 iBatis 框架进行 SQL 字符串的动态拼接。通过分析提供的代码片段,我们可以了解到在实际开发过程中,这种动态 SQL 的构建方式非常常见,尤其是在处理复杂的...
通过使用动态SQL,可以实现SQL语句的条件化,提高代码复用性。 4. **参数映射**: `#{}` 语法用于参数绑定,它可以防止SQL注入。在SQL语句中,#{paramName}会被替换为预编译语句的占位符,参数值则在执行时传入。 ...
IBATIS的动态SQL功能允许在运行时根据条件动态构建SQL语句,提高了SQL的灵活性和复用性。例如,`<if>`, `<choose>`, `<when>`, `<otherwise>`, `<where>`, `<set>`等标签可以用来构建条件语句。 **4. 分页查询** 在...
为了提高代码复用性,iBATIS还支持将动态SQL片段定义为独立的`<sql>`标签,如: ```xml <sql id="queryCondition"> where user_id = #{userId} </sql> <select id="getUserList" resultMap="user"> ...
SQL映射文件中的<sql>标签可以复用SQL片段,<select>、、、标签分别对应查询、插入、更新和删除操作。动态SQL是iBatis的一大亮点,通过、、、等标签,可以在运行时根据条件动态生成SQL语句。 此外,iBatis支持预...
Ibatis支持动态SQL,这使得开发者能够在SQL映射文件中根据条件动态构建SQL语句,极大地提高了代码的复用性和灵活性。此外,Ibatis还提供了事务管理,可以控制事务的边界,确保数据的一致性。 总的来说,Ibatis驱动...
iBATIS是一个轻量级的持久层框架,它允许开发者将SQL语句直接写在XML文件中,通过映射语句与Java对象进行交互,从而实现数据的存取。本章将介绍如何创建和使用映射语句,以及如何处理查询结果。 4.1 使用基础 ...
动态SQL是Ibatis的一大亮点,它允许在XML映射文件中编写条件语句,使得SQL能够根据Java对象的状态动态生成。例如,以下示例展示了如何根据用户ID来选择性地加载用户信息: ```xml <select id="getUser" ...
通过<sql>元素可以复用SQL片段,<select>、、和元素分别对应SQL查询、插入、更新和删除操作。 4. **动态SQL**:iBATIS支持条件式SQL,可以通过if、where、choose(when/otherwise)、trim、foreach等元素构建动态...
Ibatis 的一大亮点是支持动态 SQL,可以使用 `<if>`、`<choose>`、`<when>`、`<otherwise>`、`<where>` 等标签根据条件动态构建 SQL 语句,提高代码复用性。 五、参数映射与结果映射 1. 参数映射:通过 `...
Ibatis 是一款轻量级的Java持久层框架,它提供了SQL映射功能,使得开发者能够将SQL语句与Java代码分离,从而实现更灵活的数据访问。在2.3.4这个版本中,Ibatis 提供了数据库无关的分页功能,这是一种在不依赖特定...
2. **动态SQL**:Ibatis支持动态SQL,可以根据业务逻辑的不同条件,动态构建执行的SQL语句,提高了代码的复用性和灵活性。 3. **分离业务逻辑与数据访问**:Ibatis允许将SQL语句和业务逻辑分离,有利于代码的组织和...