入門 05 - 基本資料查詢
来源:互联网 发布:安卓rpg游戏知乎 编辑:程序博客网 时间:2024/06/04 19:18
直接使用範例來看看如何使用Hibernate進行資料庫查詢,在這之前,請先照之前介紹過的主題在資料庫中新增幾筆資料:
在Hibernate中新增資料
查詢資料時,我們所使用的是Session的find()方法,並在當中指定HQL設定查詢條件,查詢的結果會裝載在List物件中傳回,您所需要的是將它們一一取出,一個最簡單的例子如下:
import onlyfun.caterpillar.*;import net.sf.hibernate.*;import net.sf.hibernate.cfg.*;import java.util.*;public class HibernateTest { public static void main(String[] args) throws HibernateException { SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.openSession(); List users = session.find("from User"); session.close(); sessionFactory.close(); for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { User user = (User) iterator.next(); System.out.println(user.getName() + "/n/tAge: " + user.getAge() + "/n/tSex: " + user.getSex()); } }}
find()中的"from User"即HQL,User指的是User類別,藉由映射文件,它將會查詢USER表格中的資料,相當於SQL中的SELECT * FROM USER,實際上我們的User類別是位於onlyfun.caterpillar下,Hibernate會自動看看import中的package名稱與類別名稱是否符合,您也可以直接指定package名稱,例如:
session.find("from onlyfun.caterpillar.User");
這個程式的運行結果可能是這樣的:
log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).log4j:WARN Please initialize the log4j system properly.Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_caterpillar Age: 28 Sex: Mmomor Age: 25 Sex: FBush Age: 25 Sex: MBecky Age: 35 Sex: F
上面所介紹的查詢是最簡單的,只是從資料表中查詢所有的資料,Hibernate所查詢得回的資料,是以物件的方式傳回,以符合程式中操作的需要,我們也可以限定一些查詢條件,並只傳回我們指定的欄位,例如:
List names = session.find("select user.name from User as user where age = 25");for (ListIterator iterator = names.listIterator(); iterator.hasNext(); ) { String name = (String) iterator.next(); System.out.println("name: " + name);}
在find()中的HQL示範了條件限定的查詢,User as user為User類別取了別名,所以我們就可以使用user.name來指定表格傳回欄位,where相當於SQL中的WHERE子句,我們限定查詢 age等於25的資料,這次查詢的資料只有一個欄位,而型態是String,所以傳回的List內容都是String物件,一個運行的例子如下:
log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).log4j:WARN Please initialize the log4j system properly.Hibernate: select user0_.name as x0_0_ from USER user0_ where (age=25 )name: momorname: Bush
如果要傳回兩個以上的欄位,也不是什麼問題,直接來看個例子:
List results = session.find("select user.name, user.age from User as user where sex = 'F'");for (ListIterator iterator = results.listIterator(); iterator.hasNext(); ) { Object[] rows = (Object[]) iterator.next(); String name = (String) rows[0]; Integer age = (Integer) rows[1]; System.out.println("name: " + name + "/n/t" + age);}
從上面的程式中不難看出,傳回兩個以上欄位時,每一次ListIterator會以Object陣列的方式傳回一筆資料,我們只要指定陣列索引,並轉換為適當的型態,即可取得資料,一個查詢的結果如下:
log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).log4j:WARN Please initialize the log4j system properly.Hibernate: select user0_.name as x0_0_, user0_.age as x1_0_ from USER user0_ where (sex='F' )name: momor 25name: Becky 35
您也可以在HQL中使用一些函數來進行結果統計,例如:
List results = session.find("select count(*), avg(user.age) from User as user");ListIterator iterator = results.listIterator();Object[] rows = (Object[]) iterator.next();System.out.println("資料筆數: " + rows[0] + "/n平均年齡: " + rows[1]);
一個查詢的結果如下所示:
log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).log4j:WARN Please initialize the log4j system properly.Hibernate: select count(*) as x0_0_, avg(user0_.age) as x1_0_ from USER user0_資料筆數: 4平均年齡: 28.25
這邊我們先介紹的是一些簡單的查詢動作,將來有機會的話,再介紹一些進階的查詢,如果您有想要先認識一些HQL,可以看看參考手冊的第11章,當中對於HQL有詳細的說明。
- 入門 05 - 基本資料查詢
- 入門 05 - 基本資料查詢
- 入門 05 - 基本資料查詢
- SQL Server入門之數據類型及基本查詢語句
- 基本輸入/輸出系統(BIOS)研究
- Smarty 入門
- Proxool - 快速入門
- 入門 03 - 配置文件
- Smarty 入門
- Spring入門
- XML入門
- Struts入門
- 入門 03 - 配置文件
- Spring入門
- JSF入門
- JAVA RMI 入門
- JavaMail快速入門
- JSF入門
- 男人25岁前的忠告
- 学会从已知推出未知
- code
- 开心一刻 ^_^
- 获取字符串的像素宽度
- 入門 05 - 基本資料查詢
- CSDN Blog新版首页和新功能发布通告
- 了解程序经理
- 入門 06 - Query介面
- 为事业而学习
- 明天又要去出差
- 今天自己完成了一个小程序
- 2006-5-20 ASP ACCESS 数据检索, 按拼音查找变态法 By Stabx
- 《操作系统教程》读书笔记(1)