hibernate框架学习之数据查询(QBC)

lQBC(Query By Criteria)是一种Hibernate中使用面向对象的格式进行查询的计数

lQBC查询方式步骤

?获取Session对象

?初始化Criteria对象(使用Session对象创建)

?由Session对象创建

?传入要查询的数据模型类

?添加各种查询条件

?执行查询返回结果(返回单条数据或集合数据)

lQBC查询格式非常简单,更符合编程人员的习惯

?Criteria对象用于由Session对象创建,传入要查询的PO类

?Criteria c = s.createCriteria(TeacherModel.class);

lQBC的查询结果与HQL相同分为两种

?查询结果为多条数据使用list方法获取集合

?查询结果为单一数据使用uniqueResult方法获取对象

分页查询

lQBC查询中的分页格式与HQL中使用的分页格式完全相同,通过方法设定参数完成

?setFirstResult(int);

?setMaxResults(int);

QBC——查询结果排序

lQBC查询结果排序相对于HQL简化很多

?为Criteria对象创建的查询结果排序只需要为其添加排序规则

?c.addOrder(排序规则);

?排序规则是Order对象的常量,传入对象中排序的属性

?c.addOrder(Order.desc("age"));

?Order.desc(String)是排序规则,age是排序字段

?排序规则可以设定多个,由添加顺序决定主副排序顺序

QBC——条件查询(重点)

lQBC条件查询是QBC查询中最强大的功能,由于格式由SQL语句转化为对象化操作,因此需要掌握转化后的对应关系与书写规则

lQBC将所有的查询条件封装成面向对象的操作,从格式上初期接受起来比较困难

QBC——条件查询规则

QBC——条件查询规则

lHQL与QBC条件运算符对应关系

QBC——条件查询示例

l查询年龄小于30岁的学生

?c.add(Restrictions.lt("age", 30));

l查询年龄不小于30岁的学生

?c.add(Restrictions.not(Restrictions.lt("age", 30)));

?c.add(Restrictions.ge("age", 30));

l查询年龄小于35岁,职业技能中包含“剑”的学生

?c.add(Restrictions.and(Restrictions.lt("age", 45), Restrictions.like("skill", "%剑%")));

QBC——多表关联查询

l查询教师“李若亮的所有学生”

?无法查找到teacher.teacherName属性

l使用别名引用teacher.teacherName对象图导航

?使用别名t表示StudentModel类中的被关联的属性teacher,然后进行对象图导航格式进行条件设置

别名的定义是为了关联到对应的对象

HQL与QBC比较

l当业务十分简单时,推荐使用HQL查询

l当进行复杂条件查询时,推荐使用QBC查询

l如果考虑到业务分层时的耦合度降低,抛弃离线查询DetachedCriteria,改用Model传参,扔可使用Criteria进行查询

l基于性能考虑,在必须使用Hibernate时,HQL从各个方面,包括复杂条件查询,整体性能优于QBC查询,可以考虑抛弃Criteria查询模式

原文地址:https://www.cnblogs.com/xyhero/p/9351755.html

时间: 2024-10-19 04:10:35

hibernate框架学习之数据查询(QBC)的相关文章

hibernate框架学习之数据查询(QBC)helloworld

package cn.itcast.h3.query.hql; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Order; import org.hibernate.criterion.Projection; impo

hibernate框架学习之数据查询(HQL)helloworld

package cn.itcast.h3.hql; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import cn.itcast.h3.hql.vo.StudentModel; import cn.itcast.h3.hql.vo.TeacherModel; import cn.itcast.h3.util.HibernateUtil; public class HQLApp {

Hibernate框架学习(五)——批量查询(概述)

一.HQL查询(Hibernate Query Language)多表查询,但不复杂时使用 Hibernate独家查询语言,属于面向对象的查询语言 1.基本查询 2.条件查询 注意:HQL语句中不可能出现任何数据库相关的信息 1)?占位符 2)命名占位符 3.分页查询 二.Criteria查询(单表条件查询) Hibernate自创的无语句,面向对象查询 1.基本查询 2.条件查询: SQL中的表示 Criteria中的表示 > gt >= ge < lt <= le == eq

MySQL基础学习之数据查询

一般查询 SELECT * FROM 表名 SELECT 属性名  FROM  表名 条件查询 SELECT 属性名 FROM 表名  WHERE 条件表达式 查询数据值1,数据值2的表单 SELECT *  FROM  表名  WHERE  属性名 [NOT] IN(数据值1,数据值2....) 查询数值1,数据2的表单 SELECT *  FROM  表名  WHERE  属性=值  AND 属性1=值1 查询数值1到数值2之间的表单 SELECT *  FROM  表名  WHERE  属

j2ee开发之hibernate框架学习笔记

hibernate框架技术重点学习笔记 1.针对不同的数据库,有不同的数据库实现类,使其符号对应的数据库? mysqlDaoImpl oracleDaoImpl ... ... 2.对象和表记录的转换存在着转换问题->orm,对象和关系的一种映射 3.框架:解决一种问题的方案集合! 4..配置文件 Xxx.cfg.xml  主配置文件 xxx.hbm.xml映射文件: 映射基础 普通属性 主键 集合属性 关联关系:一对多  多对一 多对多  一对一 继承结构 5.其他特性:数据库连接池  懒加载

hibernate 框架学习笔记---网上摘抄的一个非常好的例子

编写Spring+Hibernate框架下的应用,总是离不了编写一个通用的泛型GenericHibernateDao.查阅了网上不少的GenericHibernateDao实现,归纳整理为如下实现,供后续编码参考. 首先定义接口泛型DAO接口 GenericDao package com.th.huz; import java.io.Serializable;import java.util.Collection;import java.util.Iterator;import java.uti

二、框架学习 (一)Hibernate框架学习 (2)Hibernate概念和api使用

目录 1 实体类编写规则 2 hibernate主键生成策略 3 实体类操作 (1)crud操作 (2)实体类对象状态 4 hibernate的一级缓存 5 hibernate的事务操作 (1)事务代码规则写法 6 hibernate其他的api(查询) 正文 实体类编写规则 1 实体类里面属性是私有的 2 私有属性使用公开的set和get方法操作. 3 要求实体类有属性作为唯一值(一般使用id值) 4 实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类 (1)八个基本数据类型对应的

Hibernate框架学习(二)——api详解

一.Configuration对象 功能:配置加载类,用于加载主配置,orm元数据加载. 1 //1.创建,调用空参构造(还没有读配置文件) 2 Configuration conf=new Configuration(); 3 //2.读取指令配置文件=>空参加载方法,加载src下的hibernate.cfg.xml文件 4 conf.configure(); 5 6 //3.读取指定orm元数据(扩展),如果主配置中已经引入映射配置,不需要手动加载 7 //conf.addResource(

一级缓存 ---- Hibernate框架学习

叙:hibernate中有一个特色,即,hibernate的持久态能自动更新数据库,不需要手动设置更新操作代码,而持久态的这一特色所依据的便是hibernate的一级缓存技术.那么之前学过了hibernate的三态,现在学习一下一级缓存: hibernate的一级缓存 首先,要明白什么是缓存: 什么是缓存? 缓存:一种优化方式,将数据存储在本地,当使用到保存的数据时不必再向服务器或者终端进行请求数据的操作,直接读取本地数据即可. 然后现在了解一下hibernate的缓存: hibernate缓存