查询按功能强弱可以分为以下几种:
Native SQL > HQL > EJBQL > QBC > QBE
1、Native SQL
Native SQL为数据库系统本身的SQL,里面包含了一些特有的函数等,功能也最为强大。
如:
1
@Test
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
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
2
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
4
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
5
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
6
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
7
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
8
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
9
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
10
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
11
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
12
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
13
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
14
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
2、HQL
Hibernate提供的面向对象查询语言。
如:
1
@Test
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
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
2
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
4
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
5
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
6
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
7
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
8
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
9
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
10
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
11
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
12
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
13
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
14
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
3、EJBQL
与HQL类似,是HQL的一个子集
4、QBC
Query By Criteria,即带约束/条件的查询
如:
1
@Test
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![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
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
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
2
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
4
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
5
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
6
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
7
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
8
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
9
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
10
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
11
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
12
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
13
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
14
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
15
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
16
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
17
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
18
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
19
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
20
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
21
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
22
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
23
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
5、QBE
Query By Example
如:
1
@Test
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
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
2
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
4
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
5
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
6
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
7
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
8
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
9
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
10
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
11
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
12
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
13
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
14
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
15
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
16
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
17
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
18
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
19
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
20
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
21
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
22
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
23
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
24
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
25
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
26
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
27
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
28
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
29
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
以上几种方法,其中QBC、QBE更加符合面向对象编程(仅此而已)。