




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Hibernate Criteria对象详解1. 序言Hibernate框架是目前JavaEE软件开发的企业主流框架, 学习Hibernate必然要掌握ORM(对象关系映射Object/Relation Mapping)的概念思想, Hibernate拥有完全的ORM理念,我们在操作数据库时,可以通过面向对象的方式就可以完成数据库的CRUD(创建(Create)、更新(Update)、读取(Read)和删除(Delete)操作。企业在使用Hibernate进行软件开发进行数据查询时,主要基于 HQL(Hibernate 面向对象的查询语言, 语法类似SQL )、 Criteria (面向对象的条件查询对象)、 SQL (原生态SQL语句) 几种方式, 本文重点讲解Criteria 这种完全面向对象编程查询方式, 详细分析Crieria 各种使用与SQL生成关系。2. Criteria牛刀小试 Criteria 是一个完全面向对象,可扩展的条件查询API ,通过它完全不需要考虑数据库底层如何实现、SQL语句如何编写, 是Hibernate框架的核心查询对象。Hibernate 定义了CriteriaSpecification接口规范用来完成面向对象的条件查询,Criteria 就是CriteriaSpecification的子接口。2.1. 创建数据库环境 我们以 部门(Department)和员工(Employee) 案例,来讲解Criteria的详细使用 部门表 department 使用mysql5.x数据库 数据库 hibernate3 用户名 root 密码 abc 部门表 employee CREATE TABLE department ( id int(11) NOT NULL auto_increment, name varchar(255) default NULL, PRIMARY KEY (id) ENGINE=InnoDB DEFAULT CHARSET=utf8;员工表 department CREATE TABLE employee (id int(11) NOT NULL auto_increment,name varchar(255) default NULL, age int(11) NOT NULL, birthday date default NULL, department_id int(11) default NULL, PRIMARY KEY (id), FOREIGN KEY (department_id) REFERENCES department (id) ENGINE=InnoDB DEFAULT CHARSET=utf8; 2.2. 使用JPA注解配置实体类部门类 Department员工类 Employee2.3. 使用Crteria查询所有部门和所有员工2.3.1. 查询所有部门产生的SQL语句 2.3.2. 查询所有员工产生的SQL语句当session.createCriteria(实体类.class) 就会产生一条 select 所有列 from 表; SQL语句, 查询实体类对应数据表的所有记录, 然后我们就可以在这个Criteria对象上进行条件查询、分页查询、多表关联查询、投影查询、子查询 等一系列操作 . 3. Criteria SQL定制详解3.1. 对查询添加条件对象Criterionorg.hibernate.criterion.Criterion是Hibernate提供的一个面向对象查询条件接口,一个单独的查询就是Criterion接口的一个实例, 用于限制Criteria对象的查询, 在Hibernate中Criterion对象的创建通常是通过Restrictions 工厂类完成的。Restrictions 提供条件查询方法 例如: 1、 查询姓”张”的所有员工信息 产生的SQL 语句 2、 查询年龄大于24的所有员工 产生的SQL语句 3、 查询年龄小于28的 姓“王”的员工产生的SQL语句 对于多个查询条件, Restrictions 提供了逻辑组合查询方法and(Criterion lhs, Criterion rhs) 用于生成多个条件and关系SQL语句 or(Criterion lhs, Criterion rhs) 用于生成多个条件or关系SQL语句not(Criterion expression) 用于查询与条件相反的数据,生成not取反查询语句3.2. 分页操作 firstResult和maxResults Criteria 接口提供 用于分页查询的方法,实现数据库SQL物理级别的分页操作 setFirstResult(int firstResult) 设置记录的其实位置 0 代表第一条记录 setMaxResults(int maxResults) 设置查询记录的长度 例如: 我要查询 1-10条件记录 firstResult为0 , maxResult为10 产生的SQL语句3.3. 排序操作 Order Hibernate 提供org.hibernate.criterion.Order 用于排序操作 , Criteria 接口提供addOrder(Order order)用于生成排序SQL 例如: 查询所有员工信息,按照年龄升序排列产生的SQL语句 3.4. 多表关联操作 createAlias和createCriteria Criteria接口提供createAlias 和 createCriteria 两组方法用于完成多表关联查询 createAlias(String associationPath, String alias) 采用内连接关联createAlias(String associationPath, String alias, int joinType) 可以通过joinType 指定连接类型 createCriteria(String associationPath) 采用内连接关联 (返回新的Criteria对象)createCriteria(String associationPath, int joinType) 可以通过joinType指定关联类型 (返回新的Criteria对象 ) 例如: 查询部门为“人力资源部”的所有员工 方法一: 使用createCriteria 方法 产生的SQL语句代码中的 criteria对象,是针对employee表, criteria.createCriteria(”department”) 就是建立employee表和department表的内连接。 返回的是 针对department表新的criteria2对象, 这时再对criteria2 添加条件, 就是查询department部门表的属性,而不是employee的属性了。 方法二: 使用createAlias 方法 使用createAlias 方法不会像 createCriteria 那样返回一个新的Criteria对象,alias只是对关联表进行别名设置,通过别名引用设置属性 产生的SQL语句 3.5. 投影、分组查询 Projection 在实际开发中,进行查询是, 可能只需要返回表中的指定列信息(投影) 或者进行统计查询 (count、avg、sum、min、max), Criteria接口提供setProjection(Projection projection) 方法用于实现投影查询操作。 org.hibernate.criterion.Projections 工厂类用于返回Projection投影查询对象 例如: 1. 查询员工表的name和age属性产生的SQL语句Pperty(属性名) 也可以写为 Property.forName(属性名 )2查询员工的总数量 Projections 提供了分组函数的查询方法 rowCount() 查询记录总数量count(String propertyName) 统计某列数量countDistinct(String propertyName) 统计某列数量(排除重复)avg(String propertyName) 统计某列平均值 sum(String propertyName) 对某列值求和 max(String propertyName) 求某列最大值 min(String propertyName) 求某列最小值 产生的SQL语句 3查询每个部门的员工数量 (输出部门的编号和数量 )Projections提供groupProperty(String propertyName) 用于执行分组操作产生的SQL语句3.6. 设置结果集封装策略 ResultTransformer 刚刚说了投影操作的使用, 其实在Hibernate 内部投影查询是会影响到结果集的封装策略的。 先用HQL举例说明 :session.createQuery(”from Employee”).list(); 返回 List session.createQuery(”select count(e) from Employee e”).list(); 返回Listsession.createQuery(”select name,age from Employee”).list(); 返回List 从这几个例子我们不难发现,如果没有指定select语句(没有投影) ,那么将返回表中的所有字段,返回结果会被封装到Entity实体对象Employee中,一但提供select语句(投影)后,返回的结果类型,将不再封装到Employee对象,而是根据投影的实际类型返回, 这就是投影对结果封装策略的影响。 我们再来看之前写过的Criteria 查询案例 :session.createCriteria(Employee.class).list(); 返回 List session.createCriteria(Employee.class).setProjection(PjectionList().add(Property.forName(”name”).add(Property.forName(”age”); 返回 List 投影之后, 返回的结果将不再被封装到Employee对象中,这是为什么呢? 我们一起来看看 Criteria的接口定义,不难发现在Criteria接口中提供了一个setResultTransformer(ResultTransformer resultTransformer),这个ResultTransformer就是结果集转换策略接口, 在Criteria的父接口中CriteriaSpecification定义了几个ResultTransformer的常用实现 ALIAS_TO_ENTITY_MAP 将结果集封装到Map对象 ROOT_ENTITY 将结果集封装到根实体对象DISTINCT_ROOT_ENTITY
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年度电梯考试预测复习(各地真题)附答案详解
- 2025年四川南充市高端人才服务中心、南充市干部人事档案中心考调3人笔试高频难、易错点备考题库及答案详解一套
- 100MW农光互补初步设计
- 2024年高职单招考试综合练习及参考答案详解(考试直接用)
- 2025年个人房屋买卖合同范本3篇
- 土建合作标准协议合同4篇
- 2024电工预测复习带答案详解
- 2024粮油食品检验人员考前冲刺试卷【黄金题型】附答案详解
- 2025计算机一级每日一练试卷(A卷)附答案详解
- 公司临时资金借款合同书7篇
- 2026年全年日历表带农历(A4可编辑可直接打印)预留备注位置
- 2024年全国期货从业资格之期货投资分析考试历年考试题附答案
- 矿山生态修复监理工作资料编制内容和要求、施工监理主要工作程序框图、工程施工与监理表式
- 药店药剂师专业劳动合同
- 小菜园租赁合同范本
- GB/T 44140-2024塔式太阳能光热发电站定日镜技术要求
- DL-T1342-2014电气接地工程用材料及连接件
- 个人资金转账合同模板
- 血管内超声在冠状动脉疾病中应用的中国专家共识(全文)
- 心理社交功能评估表
- 《征兵入伍应征公民体格检查标准条文释义》
评论
0/150
提交评论