日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Hibernate的一些基本用法

本文主要簡(jiǎn)單介紹Hibernate數(shù)據(jù)查詢、更新以及刪除,查詢時(shí)使用一種類(lèi)似SQL的HQL來(lái)設(shè)定查詢的條件,希望大家對(duì)大家的學(xué)習(xí)有所幫助。

成都創(chuàng)新互聯(lián)主要從事網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)玉環(huán),十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢建站服務(wù):13518219792

基本Hibernate數(shù)據(jù)查詢

使用Hibernate數(shù)據(jù)查詢是一件簡(jiǎn)單的事,Java程序設(shè)計(jì)人員可以使用對(duì)象操作的方式來(lái)進(jìn)行數(shù)據(jù)查詢,查詢時(shí)使用一種類(lèi)似SQL的HQL(Hibernate Query Language)來(lái)設(shè)定查詢的條件,與SQL不同的是,HQL是具備對(duì)象導(dǎo)向的繼承、多型等特性的語(yǔ)言。直接使用范例來(lái)看看如何使用Hibernate進(jìn)行數(shù)據(jù)庫(kù)查詢,在這之前,請(qǐng)先照之前介紹過(guò)的主題在數(shù)據(jù)庫(kù)中新增幾筆數(shù)據(jù):在Hibernate中新增資料查詢數(shù)據(jù)時(shí),我們所使用的是Session的find()方法,并在當(dāng)中指定HQL設(shè)定查詢條件,查詢的結(jié)果會(huì)裝載在List對(duì)象中傳回,您所需要的是將它們一一取出,一個(gè)最簡(jiǎn)單的例子如下:

HibernateTest.java

 
 
 
  1. 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類(lèi)別,藉由映射文件,它將會(huì)查詢USER表格中的數(shù)據(jù),相當(dāng)于SQL中的SELECT * FROM USER,實(shí)際上我們的User類(lèi)別是位于onlyfun.caterpillar下,Hibernate會(huì)自動(dòng)看看import中的package名稱與類(lèi)別名稱是否符合,您也可以直接指定package名稱,例如:

 
 
 
  1. session.find("from onlyfun.caterpillar.User"); 

這個(gè)程序的運(yùn)行結(jié)果可能是這樣的:

 
 
 
  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 user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_caterpillarAge: 28Sex: MmomorAge: 25Sex: FBushAge: 25Sex: MBeckyAge: 35Sex: F   

上面所介紹的查詢是最簡(jiǎn)單的,只是從數(shù)據(jù)表中查詢所有的數(shù)據(jù),Hibernate所查詢得回的數(shù)據(jù),是以對(duì)象的方式傳回,以符合程序中操作的需要,我們也可以限定一些查詢條件,并只傳回我們指定的字段,例如:

 
 
 
  1. 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類(lèi)別取了別名,所以我們就可以使用user.name來(lái)指定表格傳回字段,where相當(dāng)于SQL中的WHERE子句,我們限定查詢age等于25的數(shù)據(jù),這次查詢的數(shù)據(jù)只有一個(gè)字段,而型態(tài)是String,所以傳回的List內(nèi)容都是String對(duì)象,一個(gè)運(yùn)行的例子如下:

 
 
 
  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 user0_.name as x0_0_ from USER user0_ where (age=25 )name: momorname: Bush 

如果要傳回兩個(gè)以上的字段,也不是什么問(wèn)題,直接來(lái)看個(gè)例子:

 
 
 
  1. 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);}   

從上面的程序中不難看出,傳回兩個(gè)以上字段時(shí),每一次ListIterator會(huì)以O(shè)bject數(shù)組的方式傳回一筆數(shù)據(jù),我們只要指定數(shù)組索引,并轉(zhuǎn)換為適當(dāng)?shù)男蛻B(tài),即可取得數(shù)據(jù),一個(gè)查詢的結(jié)果如下:

 
 
 
  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 user0_.name as x0_0_, user0_.age as x1_0_ from USER user0_ where (sex='F')name: momor25name: Becky35 

您也可以在HQL中使用一些函數(shù)來(lái)進(jìn)行結(jié)果統(tǒng)計(jì),例如:

 
 
 
  1. 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("資料筆數(shù): " + rows[0] + "\n平均年齡: " + rows[1]); 

一個(gè)查詢的結(jié)果如下所示:

 
 
 
  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_資料筆數(shù): 4平均年齡: 28.25   

unsaved-value

可以設(shè)定的值包括:

◆any - 總是儲(chǔ)存

◆none - 總是更新

◆null - id為null時(shí)儲(chǔ)存(預(yù)設(shè))

◆valid - id為null或是指定值時(shí)儲(chǔ)存

這樣設(shè)定之后,您可以使用session.saveOrUpdate(updated);來(lái)取代上一個(gè)程序的session.update(updated);方法。

如果要?jiǎng)h除數(shù)據(jù),只要使用delete()方法即可,直接看個(gè)例子。

HibernateTest.java

 
 
 
  1. 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");User updated = null;for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) {User user = (User) iterator.next();if(updated == null)updated = user;      System.out.println(user.getName() +"\n\tAge: " + user.getAge() +"\n\tSex: " + user.getSex());}session.delete(updated);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());}       }} 

一個(gè)執(zhí)行的結(jié)果范例如下:

 
 
 
  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 user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, ser0_.age as age from USER user0_justinAge: 28Sex: MmomorAge: 25Sex: FBushAge: 25Sex: MBeckyAge: 35Sex: FHibernate: delete from USER where user_id=?Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, ser0_.age as age from USER user0_momorAge: 25Sex: FBushAge: 25Sex: MBeckyAge: 35Sex: FUser user = (User) session.load(User.class, id); 

Hibernate對(duì)于數(shù)據(jù)的更新、刪除等動(dòng)作,是依賴id值來(lái)判定,如果您已知id值,則可以使用load()方法來(lái)加載資料。這邊我們先介紹的是一些簡(jiǎn)單的查詢動(dòng)作,將來(lái)有機(jī)會(huì)的話,再介紹一些進(jìn)階的查詢,如果您想要先認(rèn)識(shí)一些HQL,可以看看參考手冊(cè)的第11章,當(dāng)中對(duì)于HQL有詳細(xì)的說(shuō)明。


文章題目:Hibernate的一些基本用法
分享鏈接:http://m.5511xx.com/article/cdehsdc.html