Hibernate查询方式知多少 一
来源:互联网 发布:淘宝商家同意退货流程 编辑:程序博客网 时间:2024/04/20 20:46
Hibernate查询方式
说到hibernate的查询方式,我们自然而然就想到了它——hql,hibernate query language.hql是使用hibernate框架的变成配朋友们使用最多的一种方式,它以自身的独特的优势:屏蔽数据库,书写灵活的优点,备受大家的青睐。但是Hibernate不仅给我们提供了这一种查询方式,这时候悠然要说来,是不只一种,还有sql,对,确实还有sql,但是还有一种,就是Criteria 查询。那么今天,我们就来聊一聊hibernate的几种查询方式。
Hibernate的查询方式有六种:Hql,Sql,Criteria,DetachedCriteria,QBE(query by example),命名查询。这里我们就说说种Hibernate常用的查询方式的使用及其利弊。
一、 HQL查询
hql是最常用的,有如下优点:
- 写起来灵活直观;
- 与大家熟悉的SQL的语法差不太多,所以上手快。
条件查询、分页查询、连接查询、嵌套查询,写起来与SQL语法基本一致,其它的,包括一些查询函数(count(),sum()等)、查询条件的设定等,也都跟SQL语法差不太多。 - 与SQL的不同的就是把表名换成了类名。
如以前我们查询的是t_user表,现在我们使用User这个实体就可以找到t_user表,这也是ORM框架的最大的特色,面向对象
弊端:
- 仅适用于hibernate框架,适用面小。
PS: 在hql中关键字不区分大小写,但是属性和类名区分大小写。
接下来,我们看示例代码:
static void queryTest(String name){ Session s=null; try { s=HibernateUtil.getSession(); //from后面是对象,不是表名 String hql="from Admin as admin where admin.aname=:name";//使用命名参数,推荐使用,易读。 Query query=s.createQuery(hql); query.setString("name", name); List<Admin> list=query.list(); for(Admin admin:list) { System.out.println(admin.getAname()); } }finally{ if(s!=null) s.close(); } }
二、对象化查询Criteria方法
这种方式比起HQL来说更加的面向对象,不需要我们写任何的查询语句,hql也好,sql也好,我们就只需要告诉session,我们要查询什么,条件是什么。
一般需要以下三个步骤:
1、 使用Session实例的createCriteria()方法创建Criteria对象
2、使用工具类expression的方法为Criteria对象设置查询条件;
Order工具类的方法设置排序方式;
Projections工具类的方法进行统计和分组。
3、使用Criteria对象的list()方法进行查询并返回结果
这种查询的优点是:
- 面向对象操作。
革新了以前的数据库操作方式,易读。
缺点:
- 适用面相对于HQL来说有限。
因为面向对象 了,那么封装严了,同时灵活性方面就相对的减少了,因为目前提供的工具类中还不能像直接写hql语句那么灵活。
以下是操作示例:
static void qbc(String name,String password){ Session session=null; try{ session=HibernateUtil.getSession(); Criteria criteria=session.createCriteria(Admin.class); //eq是等于,gt是大于,lt是小于,or是或 criteria.add(expression.eq("aname",name)); criteria.add(expression.eq("apassword", password)); List<Admin> list=criteria.list(); for(Admin admin:list){ System.out.println(admin.getAname()); } }finally{ if(session!=null) session.close(); } }
以上两种查询方式的优点:
- 都是对数据库透明的操作方式,即我们不必为后期换数据库而担心,付出维护sql的工作量。
缺点:
- 有些数据特性的东西无法利用。
三、SQL 查询
这种查询方式,我就不需要过多的解释了,就是我们原生的SQL语句进行查询。看例子
static List sql() { Session s = HibernateUtil.getSession(); Query q = s.createSQLQuery("select * from user").addEntity(User.class); List<User> rs = q.list(); s.close(); return rs; }
优点:
- 随心所欲写出需求的sql的语句,完全灵活。
缺点:
- 对数据库不透明。
对于不同的数据库,写出来的sql是不同的,如果需要换数据库,那就得重写sql。
使用场合:系统不需要换数据库的情况下,还是sql使用方便,效率高。
以上是三种查询方式,下篇博客我们继续DetachedQuery,命名查询方式。
- Hibernate查询方式知多少 一
- Hibernate的查询方式知多少 二
- Hibernate查询方式(一)
- Hibernate查询方式总结(一)
- hibernate 的几种查询方式 一
- Hibernate检索对象的方式(查询一)
- Hibernate的查询方式
- hibernate查询方式举例
- hibernate QBC查询方式
- hibernate的查询方式
- hibernate的查询方式
- Hibernate的查询方式
- Hibernate的查询方式
- hibernate查询方式
- Hibernate的查询方式
- hibernate 查询方式汇总
- hibernate的查询方式
- Hibernate查询方式汇总
- Odoo运行机制(二)----ThreadedServer
- 树莓派网卡和IP地址的配置
- Opencv图像对比度和亮度的调整-滚动条
- 剑指offer 算法 (抽象建模能力)
- 语言模型(一) 工具和使用简介
- Hibernate查询方式知多少 一
- mgLog介绍
- 【白书之路】401 - Palindromes 回文串 镜像串
- 北京传智播客网页UI设计学院
- android插件化研究
- HDU 5062 Beautiful Palindrome Number——BestCoder Round #13
- BZOJ 2631(tree-LCT链上修改)
- 有关Java的几道面试题
- UVA 227 Puzzle 【ACM/ICPC World Final 1993】