程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase教程 >> hibernate學習(查詢)

hibernate學習(查詢)

編輯:SyBase教程

hibernate學習(查詢)


數據查詢是hibernate的一個亮點,hibernate為程序猿提供了多種的查詢方式,分為以下三種:
1.hibernate語言查詢,也就是我們今天需要說的hql查詢,這種查詢是完全面向對象的方式來查詢,將查詢語句封裝為對象來進行操作。符合面向對象的思維來維護數據庫。
2.hibernate標准化查詢:(criteria query)將查詢語句封裝成對象進行操作。
3.原聲sql查詢:直接使用標准sql語言來進行查詢。

hql查詢所有

在學習hql查詢之前,我先插入一些記錄到userinfo表中:

//解析hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure();
//創建SessionFactory(創建連接池)
SessionFactory factory = cfg.buildSessionFactory();
//創建session
Session session = factory.openSession();
Transaction transaction = session.beginTransaction();
for (int i = 0; i < 80; i++) {
    UserInfo info = new UserInfo();
    info.setUserName("test"+i);
    info.setUserPass(String.valueOf(Math.random()*1));
    session.save(info);
}
transaction.commit();

這裡我給userinfo表中一次性插入了80條記錄。解下來使用hql查詢所有的數據:

String hql = "from UserInfo";
Query query = session.createQuery(hql);
List<UserInfo>lists = query.list();
for (UserInfo userInfo : lists) {
    System.out.println(userInfo.getUserName());
}

這裡,查詢所有並沒像sql中有”select *”那樣,而是直接省略了該語句,其實hql和sql是一樣的,只不過一切都是面向對象的查詢,將需要查詢的表名換成對應的實體類名稱,將需要查詢的字段換成對應實體類的屬性,即可。

hql條件查詢

1.查詢id>10並且id<20的記錄

String hql = "from UserInfo where userId > 10 and userId < 20 ";
//或者
String hql = "from UserInfo where userId between 10 and 20 ";

2.按照userId降序排列

String hql = "from UserInfo order by userId desc";

3.使用參數占位符查詢

String hql = "from UserInfo where userId between ? and ? order by userId desc";
Query query = session.createQuery(hql);
query.setInteger(0, 30);
query.setInteger(1,40);
List<UserInfo>lists = query.list();

4.綁定有意義的參數占位符

String hql = "from UserInfo where userId between :begin and :end order by userId desc";
Query query = session.createQuery(hql);
query.setInteger("begin", 20);
query.setInteger("end",40);
List<UserInfo>lists = query.list();

5.查詢userId值最大的記錄

String hql = "select max(userId) from UserInfo";
Query query = session.createQuery(hql);
List<UserInfo>lists = query.list();
Object result = query.uniqueResult();
System.out.println(result);

可以看到由於這裡只會查詢出一條記錄,所以使用query.uniqueResult();來查詢。
6.hql分頁查詢
查詢從第3條記錄開始,間隔5條記錄

String hql = "from UserInfo";
Query query = session.createQuery(hql);
query.setFirstResult(3);
query.setMaxResults(5);
List<UserInfo>lists = query.list();

7.只查詢某些字段

String hql = "select new com.mydb.entity.UserInfo(userId,userPass) from UserInfo";
Query query = session.createQuery(hql);
List<UserInfo>lists = query.list();

這裡需要注意就是由於這裡使用了兩個參數的構造函數,因此,需要在UserInfo實體類當中添加這兩個參數的構造方法。
或者可以這樣寫:

String hql = "select userId,userPass from UserInfo";
Query query = session.createQuery(hql);
List lists = query.list();
for (Object object : lists) {
    Object[]objects = (Object[]) object;
    System.out.println(objects[0]+"----++++"+objects[1]);
}

sql查詢

查詢userinfo表中的所有數據

String sql = "select * from userinfo";
SQLQuery sqlQuery = session.createSQLQuery(sql);
sqlQuery.addEntity(UserInfo.class);
List<UserInfo> lists = sqlQuery.list();
for (UserInfo userInfo : lists) {
    System.out.println(userInfo.getUserName());
}

說明一點:sqlQuery.addEntity(UserInfo.class);是添加hibernate查詢以後從object轉換到的類型。

好了,關於hibernate的查詢,就學習到這裡。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved