『壹』 Hibernate的幾種查詢方式
HIbernate主要常用有三種查詢方式HQL、QBC、SQL:
1).HQL(Hibernate Query Language):hibernate數據查詢語言;
2).QBC(Query By Criteria):規則查詢
3).SQL:原生的SQL語句(較為復雜的情況下使用)
想要詳細了解的可以看一下下面的幾篇文章:
QBC數據查詢
HQL單表查詢
HQL多表查詢
希望對你有所幫助~
『貳』 實現基於hibernate的BaseHibernateDao包含常用的CURD方法
BaseHibernateDao的意思就是用泛型的方法實現一個基本的增刪改查(CURD)方法,這樣一些基本的單表操作直接繼承這個類就可以實現了,例子如下:
publicclassBaseHibernateDAO{
privateSessionsession=null;
privateObjectget(Classclz,Serializableid){
Objectret=null;
Sessionsession=HibernateSessionFactory.getSession();
try{
ret=session.get(clz,id);
}catch(HibernateExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}finally{
this.closeSession();
}
returnret;
}
protectedvoidadd(Objectitem){
Transactiontx=null;
Sessionsession=HibernateSessionFactory.getSession();
try{
tx=session.beginTransaction();
session.save(item);
tx.commit();
}catch(HibernateExceptione){
//TODOAuto-generatedcatchblock
if(tx!=null){
tx.rollback();
}
e.printStackTrace();
}finally{
closeSession();
}
}
publicvoiddelete(Classclz,Serializableid){
Transactiontx=null;
Sessionsession=HibernateSessionFactory.getSession();
try{
tx=session.beginTransaction();
session.delete(this.get(clz,id));
tx.commit();
}catch(HibernateExceptione){
//TODOAuto-generatedcatchblock
if(tx!=null){
tx.rollback();
}
e.printStackTrace();
}finally{
closeSession();
}
}
publicvoipdate(Objectitem){
Transactiontx=null;
Sessionsession=HibernateSessionFactory.getSession();
try{
tx=session.beginTransaction();
session.update(item);
tx.commit();
}catch(HibernateExceptione){
//TODOAuto-generatedcatchblock
if(tx!=null){
tx.rollback();
}
e.printStackTrace();
}finally{
closeSession();
}
}
publicListsearch(Classclazz,Objectcondition){
Listresults=null;
try{
Sessionsession=HibernateSessionFactory.getSession();
results=session.createCriteria(clazz).add(Example.create(condition)).list();
}catch(HibernateExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}finally{
closeSession();
}
returnresults;
}
protectedvoidcloseSession(){
this.session=null;
HibernateSessionFactory.closeSession();
}
}
『叄』 hibernate的get()方法的使用
session.get( id ),返回是一個object的對象,
你強制裝換一下就好了
session你應該能獲取到吧,
get方法里的參數可以是任何一個 實現了 java.io.序列化介面.
而 不管 是String Ingeter等都實現了此介面,
所以可以傳任何類型的主鍵 對象過來
不知道講的對不對,我也剛學
『肆』 hibernate級聯操作有哪些
級聯操作
一.簡單的介紹
cascade和inverse
(Employee
–
Department)
l
Casade用來說明當對主對象進行某種操作時是否對其關聯的從對象也作類似的操作,常用的cascade:
none,all,save-update,delete,
lock,refresh,evict,replicate,persist,
merge,delete-orphan(one-to-many)。一般對many-to-one,many-to-many不設置級聯,在<one-to-one>和<one-to-many>中設置級聯。
l
inverse表「是否放棄維護關聯關系」(在Java里兩個對象產生關聯時,對資料庫表的影響),在one-to-many和many-to-many的集合定義中使用,inverse=」true」表示該對象不維護關聯關系;該屬性的值一般在使用有序集合時設置成false(注意hibernate的預設值是false)。
one-to-many維護關聯關系就是更新外鍵。many-to-many維護關聯關系就是在中間表增減記錄。
注:
配置成one-to-one的對象不維護關聯關系
二,屬性的解析
class元素的lazy屬性設定為true,表示延遲載入,如果lazy設為false,則
表示立即載入。以下對這二點進行說明。
立即載入:表示Hibernate在從資料庫中取得數據組裝好一個對象(如學生1)後,
會立即再從資料庫取得數據組裝此對象所關聯的對象(如學生證1)。
延遲載入:表示Hibernate在從資料庫中取得數據組裝好一個對象(如學生1)後,
不會立即再從資料庫中取得數據組裝此對象所關聯的對象(如學生1),
而是等到需要時,才會從資料庫取得數據組裝此關聯對象。
<one-to-one>元素的cascade屬性表明操作是否從父對象級聯到被關聯的對象,
它
的取得可以是以下幾種:
none:在保存,刪除或修改當前對象時,不對其附屬對象(關聯對象)進行級聯
操作。它是默認值。
save-update:在保存,更新當前對象時,級聯保存,更新附屬對象(臨時對象,
游離對象)。
delete:在刪除當前對象時,級聯刪除附屬對象。
all:所有情況下均進行級聯操作,即包含save-update和delete操作。
delete-orphan:刪除和當前對象解除關系的附屬對象。
<one-to-one>元素的fetch屬性的可選值是join和select,默認是select。
當fetch屬性設定為join時,表示連接抓取(Join
fetching):Hibernate通過
在Select語句中使用outer
join(外連接)來獲得對象的關聯實例或者關聯集合。
當fetch屬性設定為select時,表示查詢抓取(Select
fetching):需要另外發
送一條Select語句抓取當前對象的關聯實體或集合。
三。代碼練習
<set
name="emps"
cascade="save-update">
<key
column="depart_id"/>
<one-to-many
class="Employee"/>
</set>
<set
name="students"
table="taacher_student"
inverse="true"><!--
table是用來指定中間表的屬性
-->
<key
column="teacher_id"></key><!--
查找教師id時,鏈接中間表表的teacher_id
-->
<many-to-many
class="Student"
column="student_id"></many-to-many>
</set>
『伍』 hibernate的主要作用是什麼
白一點就是把JDBC封裝起來,作為一種工具讓我們來用。
就好像平時吃飯:
JDBC是自己做飯吃,需要買菜,做飯,當然就要知道在哪買菜,買什麼的菜,多少錢,怎麼做,放什麼作料等等的
而Hibernate就是個飯店,你只要知道這個飯多少錢,掏錢就可以吃到飯,不知道怎麼做也可以吃到飯
『陸』 Hibernate有哪幾種查詢數據的方式
3種
1)session對象的load和get方法,只能按主鍵查詢
2)hql:語法與sql類似,但查詢的是對象,支持所有的sql查詢方式,可以直接返回對象集合,可以完成修改刪除
3)Criteria:只能進行查詢,可以不用寫查詢語句,通過java代碼完成
『柒』 描述一下hibernate的工作機制,常用的類和方法
通過配置文件,將對象轉型為表
『捌』 Hibernate的主要功能及用法
Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱資料庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。
Hibernate的核心介面一共有5個,分別為:Session、SessionFactory、Transaction、Query和Configuration。這5個核心介面在任何開發中都會用到。通過這些介面,不僅可以對持久化對象進行存取,還能夠進行事務控制。
『玖』 Hibernate中getHibernateTemplate()具體包含哪些方法,都怎麼用
HibernateTemplate()提供非常多的常用方法來完成基本的操作,比如通常的增加、刪除、修改、查詢等操作,Spring 2.0更增加對命名SQL查詢的支持,也增加對分頁的支持。大部分情況下,使用Hibernate的常規用法,就可完成大多數DAO對象的CRUD操作。下面是HibernateTemplate的常用方法簡介:
q void delete(Object entity):刪除指定持久化實例
q deleteAll(Collection entities):刪除集合內全部持久化類實例
q find(String queryString):根據HQL查詢字元串來返回實例集合
q findByNamedQuery(String queryName):根據命名查詢返回實例集合
q get(Class entityClass, Serializable id):根據主鍵載入特定持久化類的實例
q save(Object entity):保存新的實例
q saveOrUpdate(Object entity):根據實例狀態,選擇保存或者更新
q update(Object entity):更新實例的狀態,要求entity是持久狀態
q setMaxResults(int maxResults):設置分頁的大小
getHibernateTemplate已經封裝好了一些基本的方法,可以直接去用,也就是template, 而getSession只是獲取一個數據工廠的session,然後大部分方法都需要自己寫,加hql語句,然後用query方法執行,類似添加刪除更新這樣的可以直接用getHibernateTemplate而大部分帶條件查詢的就需要用getSession寫了。
『拾』 Hibernate有幾種查詢方法
Hibernate有4種查詢方法。
HQL 通過Hibernate提供的查詢語言進行查詢。Hibernate Query lanague
EJBQL(JPQL 1.0) 是EJB提供的查詢語言
QBC(query by cretira)通過Cretira介面進行查詢
QBE(query by Example) 通過Example編程介面進行查詢
從功能強弱上排序:NativeSQL > HQL > EJBQL(JPQL 1.0) >QBC(query by cretira) >QBE(query by Example) 1: QBE (Query By Example) QBC查詢方式。
QBC(Query By Criteria)查詢方式是 Hibernate 提供的「 更加面向對象」的一種檢索方式。 QBC 在條件查詢上比 HQL 查詢更為靈活,而且支持運行時動態天生查詢語句。
在Hibernate 應用中使用 QBC 查詢通常經過 3 個步驟:
(1)使用 Session 實例的 createCriteria() 方法創建 Criteria 對象
(2)使用工具類 Restrictions 的相關方法為 Criteria 對象設置查詢對象
(3)使用 Criteria 對象的 list() 方法執行查詢,返回查詢結果QBE查詢QBE查詢就是檢索與指定樣本對象具有相同屬性值的對象。因此QBE 查詢的關鍵就是樣本對象的創建,樣本對象中的所有非空屬性均將作為查詢條件。 QBE 查詢的功能子集,固然 QBE 沒有 QBC 功能大,但是有些場合 QBE 使用起來更為方便。
工具類Example 為 Criteria 對象指定樣本對象作為查詢條件Java代碼:
1 Session session = HibernateSessionFactory.getSessionFactory().openSe ssion();
2 Transaction ts = session.beginTransaction();
3 Customer c = new Customer();
4 c.setCname("Hibernate");
5 Criteria criteria = session.createCriteria(Customer. class );
6 Criteria.add(Example.create(c));
7 Iterator it = criteria.list().iterator();
8 ts.commit();
9 HibernateSessionFactory.closeSession();