1. 程式人生 > >Hibernate查詢_HQL_EJBQL_QBC_QBE

Hibernate查詢_HQL_EJBQL_QBC_QBE

detach and 自己 code 數據表 面向 dde obj ejb

查詢按功能強弱可以分為以下幾種:
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技術分享圖片 }

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技術分享圖片 }

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技術分享圖片
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
如:

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技術分享圖片 }


以上幾種方法,其中QBC、QBE更加符合面向對象編程(僅此而已)。

Hibernate查詢_HQL_EJBQL_QBC_QBE