iBatis中一个书写sql问题,你们是怎么处理的

yuji821 2012-05-19 09:44:50
写sql分页查询时,要写2个sql,一个是统计总数,一个是写取分页的具体记录

如:

<select id="GetTaskCount" parameterClass="Task" resultMap="Task">
select count(1) from tasks
<dynamicprepend="where">
<isNotNull property="taskname" prepend="and">
tasknamee=#taskname#
</isNotNull>
.....
这里有很多条件,有10多个条件
</dynamic>

</select>
<select id="GetTaskPageList" parameterClass="Task" resultMap="Task">
这里是分页查询的sql
<dynamicprepend="where">
<isNotNull property="taskname" prepend="and">
tasknamee=#taskname#
</isNotNull>
.....
这里有很多条件,有10多个条件
</dynamic>

</select>

这两条sql的条件是完全一样的,条件又要重复复制一遍

你们是怎么处理的呢,有办法这两条sql语句重复条件部分吗
...全文
70 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
huijunliang 2012-05-19
  • 打赏
  • 举报
回复
--这里是N多条件

<sql id="selectItem_fragment">
FROM items
WHERE parentid = #value#
</sql>

<select id="selectItems" resultClass="Item">
SELECT id, name
<include refid="selectItem_fragment"/>
</select>

用include包含


还有一种方法是用存储过程分页动态查询

yuji821 2012-05-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

不知道iBatis是什么。

简单地胡乱编辑字符串,连个靠谱的智能提示都没有,更别说编译时(而不是运行时)检查语法和语义错误。那种所谓的“第三方框架”你最好还是扔掉它。

使用.net framework中自身的框架功能就很好。
[/Quote]
昏,不知道iBatis是什么啊,我来介绍下吧:

iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。

目录

起源一站式
纵观目前主流
新系统的开发
半自动化刚好解决
全自动
发展起源 一站式
纵观目前主流
新系统的开发
半自动化 刚好解决
全自动
发展
展开编辑本段起源
一站式
  iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO),同时还提供一个利用这个框架开发的JPetStore实例。   相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,ibatis 是一种“半自动化”的ORM实现。
纵观目前主流
  所谓“半自动”,可能理解上有点生涩。纵观目前主流的 ORM,无论 Hibernate 还是Apache OJB,都对数据库结构提供了较为完整的封装,提供了从POJO 到数据库表的全套映射机制。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过 Hibernate或者OJB 提供的方法完成持久层操作。程序员甚至不需要对 SQL 的熟练掌握,Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的 SQL 并调用 JDBC 接口加以执行。
新系统的开发
  大多数情况下(特别是对新项目,新系统的开发而言),这样的机制无往不利,大有一统天下的势头。但是,在一些特定的环境下,这种一站式的解决方案却未必灵光。   在笔者的系统咨询工作过程中,常常遇到以下情况:   1. 系统的部分或全部数据来自现有数据库,处于安全考虑,只对开发团队提供几条Select SQL(或存储过程)以获取所需数据,具体的表结构不予公开。   2. 开发规范中要求,所有牵涉到业务逻辑部分的数据库操作,必须在数据库层由存储过程实现(就笔者工作所面向的金融行业而言,工商银行、中国银行、交通银行,都在开发规范中严格指定)   3. 系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。   面对这样的需求,再次举起 Hibernate 大刀,却发现刀锋不再锐利,甚至无法使用,奈何?恍惚之际,只好再摸出JDBC 准备拼死一搏……,说得未免有些凄凉,直接使用 JDBC进行数据库操作实际上也是不错的选择,只是拖沓的数据库访问代码,乏味的字段读取操作令人厌烦。
编辑本段半自动化
刚好解决
  “半自动化”的ibatis,却刚好解决了这个问题。   这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”   ORM 实现而言,“全自动”ORM 实现了 POJO 和数据库表之间的映射,以及 SQL 的自动   生成和执行。而ibatis 的着力点,则在于POJO 与 SQL之间的映射关系。也就是说,ibatis   并不会为程序员在运行期自动生成 SQL 执行。具体的 SQL 需要程序员编写,然后通过映   射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定 POJO。   通常在如下场景和条件下,选择ibatis, 将更有助于发挥ibatis在持久层的优越性:   1. 知道怎样操作10种以上的数据库   2. 可配置的caching(包括从属)   3. 支持DataSource、local transaction managemen和global transaction   4. 简单的XML配置文档   5. 支持Map, Collection, List和简单类型包装(如Integer, String)   6. 支持JavaBeans类(get/set 方法)   7. 支持复杂的对象映射(如populating lists, complex object models)   8. 对象模型从不完美(不需要修改)   9. 数据模型从不完美(不需要修改)   10. 你已经知道SQL,为什么还要学习其他东西
全自动
  使用ibatis 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的 Java对象,   这一层与通过 Hibernate 实现 ORM 而言基本一致,而对于具体的数据操作,Hibernate   会自动生成SQL 语句,而ibatis 则要求开发者编写具体的 SQL 语句。相对Hibernate等   “全自动”ORM机制而言,ibatis 以 SQL开发的工作量和数据库移植性上的让步,为系统   设计提供了更大的自由空间。作为“全自动”ORM实现的一种有益补充,ibatis 的出现显   得别具意义。
编辑本段发展
  ibatis本是apache的一个开源项目,2010年这个项目由apache software foundation 迁移到了google code,并且改名为mybatis。
  • 打赏
  • 举报
回复
不知道iBatis是什么。

简单地胡乱编辑字符串,连个靠谱的智能提示都没有,更别说编译时(而不是运行时)检查语法和语义错误。那种所谓的“第三方框架”你最好还是扔掉它。

使用.net framework中自身的框架功能就很好。

62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧