Java知識總結-7

來源:互聯網
上載者:User

標籤:讀取   對象   .com   integer   provider   條件   效能   存在   資料來源   

hql 查詢

內串連:
from Entity inner join [fetch] Entity.property
忽略fetch 關鍵字,我們得到的結果集中,每行資料都是一個Object 數組
fetch表名表明”右表”對象讀出後立即填充到對應的“左表”對象中。
左外串連:
from Entity left join [fetch] Entity.property
session.createQuery("from District d left join fetch d.streets s");
Hibernate的右外聯結文法如下
from Entity right join [fetch] Entity.property
from District d right join fetch d.streets s


查詢單個欄位:
也就是需要的資料只是實體物件的某個屬性,HQL也可以簡單的做到
String hql =“select s.name from Street s”;
List.get(0).getClass()
對於實體單個屬性的查詢,Hibernate返回的對象都是該屬性的類型

查詢多個欄位:
取了id和name的屬性內容。返回的List對象中,每個條目都是一個對象數組(Object[]),每個Object數組中依次儲存我們所擷取的屬性資料。
經驗:為了使返回的結果更加符合物件導向風格,可以通過在HQL中動態構造對象執行個體的方法對資料進行封裝。
可以採用如下HQL語句:
“select new Street (id,name) from Street“
這樣返回的List對象中將儲存Street對象。但必須在Street類中添加一個以id和name屬性為參數的構造方法


distinct:去重

 

什麼是緩衝
在磁碟上的資料放到記憶體中一份,我們讀取的時候先從緩衝中讀取,沒有再去磁碟上找

Hibernate緩衝作用
為了降低應用程式對物理資料來源訪問的頻次,從而提高應用程式的運行效能

緩衝分類
一級緩衝(內部緩衝)Session:對象
二級緩衝:SessionFactory:對象

一級緩衝介紹:
一級緩衝又稱為“Session的緩衝”,它是內建的,不能被卸載 在第一級緩衝中,採用的是Key-Value的MAP方式來實現的。在緩衝實體物件時,對象的主關鍵字ID是MAP的Key,實體物件就是對象的值。所以說一級緩衝是以實體物件為單位進行儲存的。由session 自動管理
,使用同一 session 尋找同一對象時,只對資料庫查詢一次--使用 key-value 形式儲存物件, key 是 oid ,value 是對象,不能被卸載 (ehcath)


二級緩衝作用
二級緩衝又稱為“SessionFactory的緩衝”,由於SessionFactory對象的生命週期和應用程式的整個過程對應,因此Hibernate二級緩衝是進程範圍或者叢集範圍的緩衝,有可能出現並發問題,因此需要採用適當的並發存取原則 預設關閉 使用第三方外掛程式
sessionFactory 緩衝(二級緩衝):
hql 查詢的 list 方法 : 只會從三級緩衝中查詢 不會從 1 2 級緩衝中查詢
iterate 方法 會使用 1 2 緩衝 ,不會使用三級緩衝 先查詢所有ID 用到再查詢得到 類


配置二級緩衝
1.首先匯入ehcache.jar二級緩衝包。
2.然後,在 src 下添加ehcache.xml配置,
3.同時,在hibernate.cfg.xml中啟用二級緩衝
<property name="hibernate.cache.use_second_level_cache"> true</property>
<property name="hibernate.cache.provider_class"> net.sf.ehcache.hibernate.EhCacheProvider</property>。
4.:指定使用二級緩衝緩衝哪種類型的對象,在hbm.xml中添加<cache region="sampleCache1" usage="read-only"/>

 

 

Hibernate資料庫訪問的步驟:
1)讀取並解析設定檔
Configuration conf = new Configuration().configure();
(2)讀取並解析對應檔,建立SessionFactory
SessionFactory sf = conf.buildSessionFactory();
(3)開啟Session
Session session = sf.openSession();
(4)開始一個事務(增刪改必須,查詢操作可選)
Transaction tx = session.beginTransaction();
(5)資料庫操作。
session.save(user);//或者其他動作
session.save(tea);
(6)提交事務(復原事務)
tx.commit();//tx.rollback();
(7)關閉session
session.close();

 

持久化:
我們以物件導向的方式組織程式,瞬時的資料也以對象的形式存在,而持久的資料多儲存在關係型資料庫中。所以,在通常情況下,持久化要完成的操作就是把對象儲存到關係型資料庫中,或者把關係型資料庫中的資料讀取出來以對象的形式封裝。

 


模組測試:
添加junit需要的jar包
在測試方法的上方寫入@Test
Outline視圖選擇要執行的Test方法右鍵run as 選擇junit Test

 


設定檔樣本

實體類:
<hibernate-mapping>
<class name="cn.jbit.houserent.bean.User" table="users" schema="jbit">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="password" type="java.lang.String" >
<column name="password" />
</property>
<property name="telephone" type="java.lang.String" >
<column name="telephon” />
</property>
<property name="username" type="java.lang.String" >
<column name="username" />
</property>
</class>
</hibernate-mapping>


總設定檔; 名字必須是 hibernate.cfg.xml
<hibernate-configuration>
<session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/test
</property>
<property name="connection.username">root</property>
<property name="connection.password">dgt</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">my</property>
<property name="show_sql">true</property>
<mapping resource="com/bawei/bean/ZUserrole.hbm.xml" />
<mapping resource="com/bawei/bean/ZUser.hbm.xml" />

</session-factory>
</hibernate-configuration>


**********************
lizy 設定物件的載入模式 lizy="true" 即時載入
cascade 是否級聯操作 all/delete/none/saveAndUpdate
inverse 是否由one方主動管理外鍵 true 由多方管理外鍵

 

查詢
全部 得到對象
一列 得到(字串)集合
多列得到對象數組集合 得到對象
條件查詢
佔位 數字從 0 開始
具名引數綁定
封裝參數綁定 setproperties()


Java知識總結-7

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.