`

七:Hibernate查询

    博客分类:
  • ssh
阅读更多
七:Hibernate查询

query :查询
criteria :标准
restriction :约束条件
pagination :分页
exact :精确的
anywhere :无论何处


目标
7.1:Hibernate查询
7.1.1:为什么使用HQL
7.1.2:如何使用HQL
7.1.3:HQL的丰富功能
7.2:Criteria查询
7.2.1:为什么使用Criteria查询
7.2.2:如何使用Criteria查询
小结:


目标
Hibernate支持两种主要的查询方式:HQL(Hibernate Query Language,Hiberante查询语言)查询和Criteria(criteria ,n. 标准 )查询。HQL查询时一种面向对象的查询语言,其中没有表和字段的概念,只有类和属性的概念。Criteria查询又称为“对象查询”,用面向对象的方式将构造查询过程作了封装。
7.1:Hibernate查询
7.1.1:为什么使用HQL
JDBC查询方法:繁复的SQL语句,手动封装结果到对象并存放到集合中。代码繁复,易出错。
HQL是Hibernate提供的面向对象查询语言,不用编写繁复的SQL语句,查询结果是直接存放在List中的对象,并且,HQL是独立于数据库的,对不同的数据库根据Hibernate dialect(方言,土语)属性的配置自动生成不同的SQL语句。
7.1.2:如何使用HQL
使用HQL4步走:1,得到session;2,编写HQL语句;3,创建Query对象;4,执行查询得到结果。
示例:
Session session =super.getSession();//
String hql="from TblFwxx";
Query query=session.createQuery(hql);
List list=query.list();

在HQL语句中,from关键字不区分大小写,但后面跟的是类名而不是表名要区分大小写,可以只是类名也可以包含包名,可以没有select子句,可以给类名指定别名,as关键字可省。
(关键字,类名,子句,别名)

7.1.3:HQL的丰富功能
1,属性查询(单个,多个)
单个属性,多个属性的查询结果都保存在List中,只是:单个属性的时候,数据类型是属性的类型;多个的时候,每条数据保存在Object数组中。
2,参数查询
支持where子句,支持like关键字,支持"%"通配符。直接拼凑HQL语句容易带来安全隐患,可以使用"?"作占位符,命名参数定义参数。
"?"作占位符(参数少时使用):可以通过Query的setObject方法逐个设置参数的值,需保证每个占位符都设置了参数值,设置参数值时下标从0开始。缺点:代码可读性下降(须仔细比对才能知道哪个设置参数的语句对应到哪个占位符上,不易查找错误),参数的下标被硬编码参数顺序调整,代码也需跟着调整(不便)。
参数命名:以格式":参数名"定义,通过名称逐个设置参数的值(增强了程序的可读性和可维护性)
HQL支持的运算符:>,<,=,>=,<=,<>(不等于)和is null等运算符,支持and,or,not和括号,而且支持in和between。(运算符,is null,and ,or,not,(),in,between)。
3,关联查询
关联条件等式的两端都是对象,Hibernate通过两个对象主键值是否相等判断两个对象是否相等。
4,分页查询
通过Query.setFirstResult()和query.setMaxResults()设置从第几条数据开始,共返回几条数据。参数分别是(pageNumber-1)*pageSize和pageSize。
5,统计查询
通过count函数得到数据条数。Hibernate支持的函数有min(),max(),avg()。当查询的结果只有一条数据时,可以通过query.uniqueResult()方法直接或得结果。例如:int count=(Integer)query.uniqueResult()。
7.2:Criteria查询
7.2.1:为什么使用Criteria查询
Criteria查询(对象查询)采用面向对象的方式(主要是Criteria对象)封装查询条件,并提供Restrictions等类别作为辅助(使编写查询代码更方便,代码更易读)。
7.2.2:如何使用Criteria查询
(一般构造复杂的查询方法时使用)
1,创建Criteria对象,传入对应实体类的类型对象;2,使用Restrictions对象的静态方法(like,ge,le,in...)构造查询条件;参数分别是(属性名,查询条件的值,关键字的匹配方式)。[关键字的匹配方式有:MathMode.ANYWHERE,MathMode.End,MathMode.START,MathMode.EXACT(精确查询)]。查询的排序方法通过Crieteria的addOrder方法指定(还支持分页查询)。
代码:
//1,
Criteria c=session.createCriteria(TblFwxx.class);
if(null!=condition){
if(condition.getTitle()!=null&&!condition.getTitle().equals("")){
//2,
c.add(Restrictions.like("title",condition.getTitle(),MatchMode.ANYWHERE));
}
if(condition.getZj1()!=0){
c.add(Restrictions.ge("zj",condition.getZj1()));
}
if(condition.getZj2()!=0){
c.add(Restrictions.le("zj",condition.getZj2()));
}
if(condition.getLxIds().length>0){
c.add(Restrictions.in("lx.lxid",condition.getLxIds()));
}
}
//排序
c.addOrder(Order.asc("fwid"));
return c.list();
小结:
HQL支持两种主要的查询方式:HQL查询和Criteria查询。
HQL是一种面向对象的查询语言,支持属性查询,参数查询,关联查询,分页查询等特性,并支持SQL函数(count....)。
执行HQL语句首先要创建Query对象,Query对象封装了查询条件所需要的大部分操作(设置参数,执行查询,设置反回数据的开始位置和总的返回条数等)。
复杂的查询使用Criteria将更方便,Criteria采用面向对象的方式查询条件的组装过程进行了封装。Restrictions提供了很多静态方法用于构造查询条件。
分享到:
评论

相关推荐

    curso-hibernate:Hibernate示例

    hibernate008:查询 hibernate009 示例:spring hibernate010 事务示例:dbUnit 单元测试示例 hibernate011:拦截器中的事件示例 hibernate012:hibernate 验证器示例 hibernate013:hibernate 缓存搜索示例 ...

    Hibernate3开发.pdf

    包括:使用Hibernate实现增删改查、HQL语句、条件查询、Native SQL、批量处理 第五章:关系映射 包括:集合映射、一对一、一对多、多对多 第六章:性能提升和二级缓存 包括:抓取策略、集合的性能、二级缓存、...

    Hibernate3 学习笔记.ppt

    Hibernate3 学习笔记.ppt 一、O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) 四、Hibernate Annotations ...六、Hibernate查询 七、Hibernate最佳实践 八、Hibernate Tool

    商场vip消费查询系统 struts+ hibernate +spring +extjs

    这是 struts+ hibernate +spring +extjs 完整的java 商场vip消费查询系统项目源码 可以直接导入eclipse、myeclipse。内附数据库文件 mysql版,也可改成其它数据库, 换对应数据库连接驱动和修改sql语法即可

    Hibernate授课指导

    一、Hibernate的引入 二、如何获取 三、第一个Hibernate项目 四、代码优化 ...七、复(联)合主键 八、对象状态九、HQL{官方推荐的方式} 十、QBC是Query By Criteria的缩写,QBC是面向对象的查询方法。

    java必了解的六大问题

    *第十四阶段:Hibernate框架学习,三大框架之一,包括检索映射技术,多表查询技术,缓存技术以及性能方面的优化; *第十五阶段:Spring框架的学习,三大框架之一,包括了IOC,AOP,DataSource,事务,SSH集成以及...

    大唐任务管理系统(struts+hibernate)

    计划管理:提供给员工的计划管理入口,包括制定计划、反馈计划、删除计划、查询计划等功能。 人员管理:只有管理员有权限,其功能是添加人员、删除人员、分配人员(包括分配角色,即主管和员工)。..

    Java语言基础下载

    第七章:类的高级特征 103 学习目标 103 static关键字 104 final关键字 106 内部类 106 实例分析 110 抽象类,接口 115 内容总结 120 独立实践 121 第八章:异常 122 学习目标 122 异常的概念 123 异常的分类 123 ...

    保险业务管理系统【数据库脚本】

    Spring+Struts2+Hibernate+JSP+JS+CSS+Mysql 功能介绍: 本系统旨在为当今的保险行业提供一套综合性的管理系统业务,系统的主要用户为保险的购买者以及系统的管理人员,基本功能包括:在线购买保险、查看购买订单、...

    大数据培训课程安排.pdf

    主要技术包括:java基础语法、java⾯向对象(类、对象、封装、继承、多态、 抽象类、接⼝、常见类、内部类、常见修饰符等) 、异常、集合、⽂件、IO、 MYSQL(基本SQL语句操作、多表查询、⼦查询、存储过程、事务、...

    《MyEclipse 6 Java 开发中文教程》前10章

    第七章 开发Hibernate应用 105 7.1介绍 105 7.2 Hibernate 一览 105 7.2.1简介 105 7.2.2 Hibernate要点 106 7.3准备工作 112 7.4创建 HibernateDemo 项目 112 7.4.1创建表格 112 7.4.2创建 HibernateDemo Java ...

    java面试题

    Hibernate的查询方式 60 71.11. 如何优化Hibernate? 61 71.12. Hibernate和spring中常出现的几个异常 61 71.13. Hibernate与jdbc的联系 62 71.14. Hibernate与Spring的联系 62 71.15. Hibernate自带的分页机制是...

    springmybatis

    mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in action之八mybatis 动态sql语句 mybatis实战教程mybatis in action之九mybatis 代码生成工具的使用 mybatis ...

    本科毕业设计+基于SpringBoot+Vue构建的中小企业进销存管理系统

    支持结合ELK实时日志分析系统,方便日志查询,问题排查,上线检查 灵活的权限控制,可控制到页面和按钮,满足绝大部分的权限需求 可在线生成vue、controller、entity、xml、dao、service、vue、sql代码,增删改查...

    Java面试宝典2020修订版V1.0.1.doc

    七、框架部分 85 1、谈谈你对Struts2的理解。 85 2、谈谈你对Hibernate的理解。 86 3、你对Spring的理解。 87 4、Struts2优缺点 87 5、ORM工作原理? 89 6、struts2的核心组件有哪些? 89 7、Strus2的执行过程 89 8...

    mybatis-day02培训内容1

    第十六章 回顾SQL99中的连接查询 1)内连接 2)外连接 3)自连接 第十七章 回顾hibernate多表开发1)一对一2)一对多3)多对多第十八章 myb

    Java常见面试题208道.docx

    116.hibernate 有几种查询方式? 117.hibernate 实体类可以被定义为 final 吗? 118.在 hibernate 中使用 Integer 和 int 做映射有什么区别? 119.hibernate 是如何工作的? 120.get()和 load()的区别? 121.说一下 ...

    JEECG快速开发平台 v4.0

    技术点七:UI快速开发库,针对WEBUI进行标准封装,页面统一采用UI标签实现功能:数据datagrid,表单校验,Popup,Tab等,实现JSP页面零JS,开发维护非常高效 技术点八:在线流程定义,采用开源Activiti流程引擎,...

    JEECG快速开发平台-其他

    JEECG功能特点:1、采用SpringMVC+Hibernate+Minidao(类Mybatis)+Easyui(UI库)+Jquery+Boostrap+Ehcache+Redis+Ztree+Vue+Boostrap-table+ElementUI等基础架构2、采用面向声明的开发模式,基于泛型编写极少代码即可...

Global site tag (gtag.js) - Google Analytics