Hibernate查询_HQL_EJBQL_QBC_QBE
查询按功能强弱可以分为以下几种:
Native SQL > HQL > EJBQL > QBC > QBE
1、Native SQL
Native SQL为数据库系统本身的SQL,里面包含了一些特有的函数等,功能也最为强大。
如:
2 public void testHQL_34() {
3 Session session = sf.openSession();
4 session.beginTransaction();
5 //下面查询使用的函数是Session的createSQLQuery
6 SQLQuery q = session.createSQLQuery("select * from category limit 2,4").addEntity(Category.class);
7 List<Category> categories = (List<Category>)q.list();
8 for(Category c : categories) {
9 System.out.println(c.getName());
10 }
11 session.getTransaction().commit();
12 session.close();
13
14 }
2、HQL
Hibernate提供的面向对象查询语言。
如:
2 public void testHQL_02() {
3 Session session = sf.openSession();
4 session.beginTransaction();
5 //Category是对象名而不是数据表名
6 Query q = session.createQuery("from Category c where c.name > 'c5'");
7 List<Category> categories = (List<Category>)q.list();
8 for(Category c : categories) {
9 System.out.println(c.getName());
10 }
11 session.getTransaction().commit();
12 session.close();
13
14 }
3、EJBQL
与HQL类似,是HQL的一个子集
4、QBC
Query By Criteria,即带约束/条件的查询
如:
2 public void testQBC() {
3 Session session = sf.openSession();
4 session.beginTransaction();
5 //criterion 标准/准则/约束
6 Criteria c = session.createCriteria(Topic.class) //from Topic
7
8 .add(Restrictions.gt("id", 2)) //greater than = id > 2
9 .add(Restrictions.lt("id", 8)) //little than = id < 8
10 .add(Restrictions.like("title", "t_"))
11 .createCriteria("category")
12 .add(Restrictions.between("id", 3, 5)) //category.id >= 3 and category.id <=5
13 ;
14
15 //DetachedCriterea
16 for(Object o : c.list()) {
17 Topic t = (Topic)o;
18 System.out.println(t.getId() + "-" + t.getTitle());
19 }
20 session.getTransaction().commit();
21 session.close();
22
23 }
5、QBE
Query By Example
如:
2 public void testQBE() {
3 Session session = sf.openSession();
4 session.beginTransaction();
5 Topic tExample = new Topic();
6 tExample.setTitle("T_");
7
8 //创建一个例子对象,然后设置其相应的属性
9 //QBE仅适合于给特定值的查询
10 Example e = Example.create(tExample)
11 .ignoreCase().enableLike();
12 //QBC除了添加自己的条件,最后将例子对象e也当成条件添加进来
13 //QBC可以添加给特定值的条件,也可添加给了一定范围的条件
14 Criteria c = session.createCriteria(Topic.class)
15 .add(Restrictions.gt("id", 2))
16 .add(Restrictions.lt("id", 8))
17 .add(e)
18 ;
19 //from Topic t where t.id>2 and t.id<8 and t.title like 'T_'
20
21
22 for(Object o : c.list()) {
23 Topic t = (Topic)o;
24 System.out.println(t.getId() + "-" + t.getTitle());
25 }
26 session.getTransaction().commit();
27 session.close();
28
29 }
以上几种方法,其中QBC、QBE更加符合面向对象编程(仅此而已)。
Hibernate查询_HQL_EJBQL_QBC_QBE的更多相关文章
- Hibernate查询
HIbernate查询 使用get方法 使用get方法通过持久类名和ID号查找一个对象Stu instance = (Stu) getsession() .get("com.lovo.po. ...
- Hibernate 查询MatchMode的四种模式
Hibernate 查询MatchMode的四种模式 MatchMode.START:字符串在最前面的位置.相当于"like 'key%'" MatchMode.END:字符串在最 ...
- hibernate查询方式
hibernate查询方式:1.本地SQL查询 2.HQL查询 3.QBC查询 HQL查询:是面向对象的查询语言,是使用最广的一种查询方法 QBC查询:Query by Criteria是一套接口来实 ...
- Hibernate查询出现java.lang.IllegalArgumentException异常解决方法
Hibernate查询出现java.lang.IllegalArgumentException. 异常信息如下:java.lang.IllegalArgumentException at ...
- (十)Hibernate 查询方式
所有项目导入对应的hibernate的jar包.mysql的jar包和添加每次都需要用到的HibernateUtil.java 第一节:Hibernate 查询方式简介 1,导航对象图查询方式: 2 ...
- 六种方式实现hibernate查询
最近在学习Hibernate的基本内容,刚好在项目中有用到,基本上都是用到哪就学哪. 今天看看六种方式实现hibernate查询......... 分别是HQL查询,对象化查询Criteria方法,动 ...
- 记录使用Hibernate查询bean中字段和数据库列类型不匹配问题
今天在工程中遇到Hibernate查询的时候,bean中的字段和数据库中的字段不符合(bean中有pageTime字段,但是数据库中没有此列)报错问题. 具体问题环境: 在auto_off表中,off ...
- hibernate 查询、二级缓存、连接池
hibernate 查询.二级缓存.连接池 查询: 1) 主键查询 Dept dept = (Dept) session.get(Dept.class, 12); Dept dept = (Dep ...
- Hibernate查询、连接池、二级缓存
Hibernate第三天: 1. 对象状态 2. session缓存 3. lazy懒加载 4. 映射 一对一对映射 组件/继承映射 目标: 一.hibernate查询 二.hibernate对连接池 ...
随机推荐
- Codeforces 6D Lizards and Basements 2 dfs+暴力
题目链接:点击打开链接 #include<stdio.h> #include<iostream> #include<string.h> #include<se ...
- Python splitlines()方法
描述 Python splitlines() 按照行界符('\r', '\r\n', \n'等)分隔,返回一个包含各行作为元素的列表,默认不包含行界符. 能被识别的行界符: 行界符 描述 \n Lin ...
- python标准库介绍——17 tempfile 模块详解
==tempfile 模块== [Example 2-6 #eg-2-6] 中展示的 ``tempfile`` 模块允许你快速地创建名称唯一的临时文件供使用. ====Example 2-6. 使用 ...
- Composer更新慢的终极解决方案
Packagist 镜像 请各位使用本镜像的同学注意: 本镜像已经依照 composer 官方的数据源安全策略完全升级并支持 https 协议!请各位同学 按照下面所示的两个方法将 还没安装 Com ...
- 【Unity3D游戏开发】NGUI之DrawCall数量 (四)
看了非常多关于NGUI drawCall的文章.见得比較多的一个观点是:一个 Atlas 相应一个Drawcall. 但事实上NGUI内部有自己的一套对DrawCall的处理规则. 相关的规则有: 1 ...
- [na][dhcp]华为DHCP-重要
近日遇到遇到控制器和wac对接的一些问题.尤其是地址池这块排查起来比较费事,且这些命令不容易找到,以下是能经常用到的命令. 1,查看ip是否冲突: (看下conflict字段) 2,防止冲突命令: 3 ...
- Oracle“不等于号”与Null的情况
今天突然才发现,Oracle中的“不等于操作符”是忽略Null的. 比如,查询comm不等于的300的记录,我会理所当然地使用where comm != 300 预想会返回包含Null的不等于300的 ...
- js 过滤字符 和检测 特殊字符
// var str1 = str.replace(/[\'\"\\\/\b\f\n\r\t]/g, '');// 去掉转义字符 // var str2= str.replace(/[\-\ ...
- Zookeeper的Quorum机制-谈谈怎样解决脑裂(split-brain)
在使用zookeeper的过程中,我们经常会看到这样一些说法: 1.zookeeper cluster的节点数目必须是奇数. 2.zookeeper 集群中必须超过半数节点(Majority)可用,整 ...
- LeetCode: Letter Combinations of a Phone Number 解题报告
Letter Combinations of a Phone Number Given a digit string, return all possible letter combinations ...