`

iBATIS如何复用SQL片段(转)

 
阅读更多
原文链接
http://opensource.atlassian.com/confluence/oss/display/IBATIS/How+do+I+reuse+SQL-fragments

When writing SqlMaps, you often encounter duplicate fragments of SQL, for example a FROM-clause or constraint-statement; iBATIS offers a simple yet powerful tag to reuse them. For the sake of simplicity, let's assume we want to get some items and we want to do a count on them.
Normally, you would write something like this:
当我们写SqlMaps的时候,经常会碰到重复的SQL片段,例如From语句或者约束条件;iBATIS提供了一个强大的标签来复用这些重复片段,简单举例,我们想检索一些字段,并且想统计它们。
通常情况下,你会这样写:
xml 代码
<select id="selectItemCount" resultClass="int">    
  SELECT COUNT(*) AS total     
  FROM items     
  WHERE parentid = 6    
select>    
<select id="selectItems" resultClass="Item">    
  SELECT id, name     
  FROM items     
  WHERE parentid = 6    
select>    
 
To eliminate this duplication, we use the tags 【sql】 and 【include】. The 【sql】-tag contains the fragment to reuse, the 【include】-tag to include such a fragment:
为了消除重复片段,我们使用【sql】和【include】标签。【sql】标签用来包含重复片段,【include】标签用来引入片段:
xml 代码
<sql id="selectItem_fragment">    
  FROM items     
  WHERE parentid = 6    
sql>    
<select id="selectItemCount" resultClass="int">    
  SELECT COUNT(*) AS total     
  <include refid="selectItem_fragment"/>    
select>    
<select id="selectItems" resultClass="Item">    
  SELECT id, name     
  <include refid="selectItem_fragment"/>    
select>    
 
The 【include】-tag is namespace-aware so you can refer to fragments even when they are located in another map (however, due to the way iBATIS loads the SqlMaps, the included fragment should be loaded before the including statement).
【inclued】标签是一个命名空间可知的,所以你可以引入其他map的片段.(但是,因为iBATIS引入SqlMap的顺序,被引入的片段,要优先于欲引入的sql部分被导入)
The fragments are included and processed on query-execution so parameters can be used too:
重复片段在查询执行时被引入和执行,所以参数依然可以使用:
xml 代码
<sql id="selectItem_fragment">    
  FROM items     
  WHERE parentid = #value#     
sql>    
<select id="selectItemCount" parameterClass="int" resultClass="int">    
  SELECT COUNT(*) AS total     
  <include refid="selectItem_fragment"/>    
select>    
<select id="selectItems" parameterClass="int" resultClass="Item">    
  SELECT id, name     
  <include refid="selectItem_fragment"/>    
select>    
分享到:
评论

相关推荐

    iBatis的动态SQL语句

    上述示例中,`userNameList`是一个List类型的集合,`&lt;iterate&gt;`标签会遍历该集合中的所有元素,并为每个元素生成如下的SQL片段:`AND (username=#userNameList[0] OR username=#userNameList[1] OR ...)`。...

    iBATIS-SqlMaps-2_ja.pdf

    - **SQL 片段重用**:通过 `&lt;sql&gt;` 元素定义通用的 SQL 片段,提高代码复用性。 - **键值自动生成**:配置主键自增或其他机制来自动为新记录生成唯一的标识符。 - **存储过程**:支持调用数据库中的存储过程,并处理...

    iBatis文档

    SQL映射文件中的&lt;sql&gt;标签可以复用SQL片段,、、、标签分别对应查询、插入、更新和删除操作。动态SQL是iBatis的一大亮点,通过、、、等标签,可以在运行时根据条件动态生成SQL语句。 此外,iBatis支持预编译的...

    ibatis官方资料

    通过&lt;sql&gt;元素可以复用SQL片段,、、和元素分别对应SQL查询、插入、更新和删除操作。 4. **动态SQL**:iBATIS支持条件式SQL,可以通过if、where、choose(when/otherwise)、trim、foreach等元素构建动态SQL,使得...

    ibatis拼接字符串

    4. **代码复用**:封装常用的 SQL 动态构建逻辑,减少重复代码。 通过以上分析,我们可以看出 iBatis 在处理动态 SQL 方面具有很大的灵活性和扩展性。在实际开发过程中,合理利用 iBatis 可以极大地提高开发效率和...

    ibatis技术总结

    11. **&lt;sql&gt;SQL语句片段**:定义可重用的SQL片段,方便在多个SQL语句中复用。 12. **组合语句**:用于包含另一个SQL片段,实现SQL语句的组合。 13. ****:定义主键生成策略,常用于自动填充主键字段。 这些标签...

    ibatis动态注入

    为了提高代码复用性,iBATIS还支持将动态SQL片段定义为独立的`&lt;sql&gt;`标签,如: ```xml &lt;sql id="queryCondition"&gt; where user_id = #{userId} &lt;/sql&gt; select * from user &lt;!-- 引入动态的查询条件 --...

    ibatis教程(免费).ppt

    - 使用&lt;sql&gt;元素复用SQL片段 - 、、和元素的使用 - 动态SQL:、、、等标签的应用 4. **Java接口绑定**: - 定义Mapper接口 - 映射接口方法到SQL语句 - 使用@Select、@Insert、@Update、@Delete注解 5. **...

    iBatis.Net 模板文件 for codesmith4.1

    7. `iBatis.inc`:这个文件可能是一个包含文件,其中包含了常量、宏定义或者共享的代码片段,可以被其他模板引用,提高代码复用性。 通过这些模板,开发者可以快速地根据数据库结构生成完整的DAL层和部分Service层...

    ibatis参考文档

    为了提高代码复用性和维护性,iBATIS支持重用SQL片段。通过定义通用的SQL模板并在不同的Mapped Statements中引用它们,可以有效减少重复代码。 ##### 4. Auto-Generated Keys 对于需要自动生成主键的情况,iBATIS...

    IBatis 指导手册

    - **SQL 元素**:可以将通用的SQL片段抽取出来,提高代码复用性。 - **参数处理**:支持动态SQL,例如条件判断、循环等。 - **结果映射**(`resultMap`):用于定义SQL查询结果如何映射到Java对象,支持复杂的一对一...

    iBATIS DataMapper1.6 中文翻译

    2. 引入了`&lt;include/&gt;`节点,支持SQL片段的重用,提高代码的可维护性和复用性。 3. 添加了对字典查询的支持,即`QueryForDictionary, V&gt;(...)`方法,使得查询结果可以映射到字典中,方便数据处理。 4. 允许存储过程...

    ibatise例子

    2. **动态SQL**:iBATIS允许在SQL语句中使用条件判断,使得SQL可以根据传入参数的不同动态生成,提高了代码的可复用性。 3. **事务管理**:iBATIS提供了简单的事务控制,可以在代码中手动开启、提交或回滚事务。 4...

    iBaitis 框架使用技术

    例如,使用`&lt;if&gt;`标签可以判断条件是否满足,然后决定是否执行相应的SQL片段。 4. **结果映射**: - 结果映射用于将数据库查询结果映射到Java对象,通过`&lt;resultMap&gt;` 标签定义字段与Java对象属性的对应关系,支持...

Global site tag (gtag.js) - Google Analytics