



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
复杂的SQL条件概述什么是 Nutz.Dao 中的复杂SQL条件 对于 Nutz.Dao 来说,它本质上就是将你的 Java 对象转化成 SQL,然后交给 JDBC 去执行。 而 SQL 中,当执行数据删除和查询操作时,最常用的就是 WHERE 关键字。 WHERE 关键字后面的就是所谓的复杂查询条件 Nutz.Dao 将如何如何使用这个条件 Dao 接口的 clear 方法和 query 方法的第二个参数,就是为了生成 WHERE 后面那段字符串设计的 这个参数是一个 org.nutz.dao.Condition 接口的实现类 通过该接口的 toString(org.nutz.dao.entity.Entity) 方法, Nutz.Dao 将获得 WHERE 后面那段字符串 当然也包括 ORDER BY Condition 接口 这个接口只有一个方法 toString(Entity entity) o 这个方法带一个参数 org.nutz.dao.entity.Entity o 通过这个参数,实现者可以获得当前需要操作的实体的配置信息 o 当然,如果你不需要的话,你可以不理睬这个参数 Nutz.Dao 会将 toString(Entity entity) 的返回直接拼接到SQL 的 WHERE 关键字后面 o 如果你返回的字符串以 WHERE 或者 ORDER BY 开头,它会直接使用,否则会补上一个 WHERE 关键字 o 这个判断会忽略前后空白以及大小写 Nutz 给你的快速实现 如果你的数据库字段被假设不会发生变化,用直接硬编码是个很好的选择 如果在开发期,你的数据库字段变化非常频繁,用 Cnd 工具类则是更好的选择 直接硬编码最简单直接的方法就是直接输出 WHERE 关键字后面的 SQL 代码了。比如查询一个 Person 对象List crowd = dao.query(Person.class, Cnd.wrap(name LIKE J% AND age20), null);这句话,就会将所有名称以 J 开头,并且年龄超过20岁的人全部查询出来。参看 Nutz.Dao 入门针对 Person 对象的描述,实际上,上面那句话执行的 SQL 代码为:SELECT * FROM t_person WHERE name LIKE J% AND age20;当然你要是写Cnd.wrap(name LIKE J% AND age20 ORDER BY name ASC);就会按照 name 字段排序。一个友好一些的工具类 - Cnd有些情况,数据库中的字段同 Java 对象中的字段并不同名,所以就需要给 Java 字段上的数据库字段注解加上参数 Column(数据库字段名)如果你通过 Cnd.wrap() 硬编码某个字段,那么当这个字段数据库字段名发生改变时,你就需要改动很多。因此你希望仅仅将对于数据库的变动限制在 Java 对象的源文件里所以 Nutz 提供了 Cnd.where() 方法Condition c = Cnd.where(age,30).and(name, LIKE, %K%).asc(name).desc(id);这个条件将生成 SQL WHERE age30 AND name LIKE %K% ORDERBY name ASC, id DESC你也可以嵌套表达式SqlExpressionGroup e1 = Cnd.exps(name, LIKE, P%).and(age, , 20);SqlExpressionGroup e2 = Cnd.exps(name, LIKE, S%).and(age, 20) OR (name LIKE S% AND age30) ORDER BY name ASC拼装更加复杂的条件上面的例子的 Cnd.where 函数,在大多数情况下可以快速的生成一个简单的查询条件。但是,如果查询条件非常复杂,用它可能就比较费劲了。是的,它的设计初衷就是 查询条件应该一行搞定。有些时候,查询条件很复杂,一行确实搞不定,怎么办? Nutz-1.b.38 以后,提供了 Criteria 接口,它继承自Condition 接口,它的设计目的有两个:1. 让程序员更容易的拼装复杂逻辑的条件 2. 让生成的 SQL 可以被参数化,更好的支持 PreparedStatement 这个接口的使用也很简单,它基本符合 IDE 的所见即所得 接口设计原则。 就是说,如果你的 IDE 有智能提示的话,你使用这个接口是不需要文档的。/ 创建一个 Criteria 接口实例Criteria cri = Cnd.cri();/ 组装条件if(.) cri.where().andIn(id, 3,4,5).andIn(name, Peter, Wendal, Juqkai);else if(.) cri.where().andLT(id, 9);if(.) cri.where().andLike(name, %A%);cri.getOrderBy().asc(name).desc(id);/ 执行查询List list = dao.query(MyObj.class, cri, null);Criteria 的 where() 函数返回的是 SqlExpressionGroup,主要由它来提供各种 SQL 条件的组合方法。这里需要给出一点提
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 考试过程中情绪管理的重要性与实践试题及答案
- 软件开发合作协议
- 项目管理考试的前瞻性分析试题及答案
- 2024新教材高中政治 第四课 只有坚持和发展中国特色社会主义才能实现中华民族伟大复兴 4.3 习近平新时代中国特色社会主义思想教学设计 部编版必修1
- 2025年金融理财师考试伦理决策思维训练及试题答案
- 提高项目管理考试自信的有效途径与试题答案
- 财务报表分析与特许金融分析师考试试题及答案
- 2025年金融市场法规和监管试题及答案
- 年度工作重点的明确与落实计划
- 促进幼儿思维发展的教研方法计划
- MSCCirc850船舶防火系统和设备保养检查指南
- ICP-AES分析原始记录
- 酒店改造工程施工组织方案
- 2022年医疗器械公司年度培训计划及培训记录
- 枣庄防备煤矿有限公司“7.6”重大火灾事故详细分析
- 河北省用人单位录用人员身份核查登记表
- 建筑装饰专业中级职称理论考试题库
- 工程联系单表格(模板)
- 万科人力资源的海盗计划
- 二手房买卖合同最新版范本电子版下载
- 扶梯施工过程记录
评论
0/150
提交评论