Hibernate中的HQL查詢與緩衝機制

來源:互聯網
上載者:User

標籤:scala   依賴   res   介面   cto   命名   取數   factory   style   

HQL:完全物件導向查詢

SQL的執行順序:

1.From

2.Where 過濾基礎資料

where與having的區別:1.順序不同 2.where過濾基礎資料 3. 過濾彙總函式

3.Group by

4.Select

5.Having

6.Order by

 

使用Hibernate查詢時,使用hibernate的一個介面query

Hql是物件導向的查詢語句,所以跟的是類名

Query query = session.createQuery(“select id,name,stu.cla.name from Student”);

List<Object[]>  list  = query.list();

For(Object[]  obj :  list){

........列印等

Obj[0] = id;  Obj[1] = name;  Obj[2] = stu.cla.name ;

}

查詢後的資料存在一個Object數組裡面

---------------------------------------------------------------------------------------------------------------------------------

list得到查詢

List<List> list = = session.createQuery(“select new List(id,name,stu.cla.name) from Student”).list();

For(List list1 : list){

System.out.print(list1.get(0) + list1.get(1));

}

---------------------------------------------------------------------------------------------------------------------------------

Java物件查詢 需要一個帶參數的建構函式

建立一個中間類,包括所需要的屬性等  new 對象:包名.類名

List<MyData> list = session.createQuery(“select new com.lovo.my.MyData(id,name,classname) from MyData”).list();

For(MyData data: list){

System.out.print(data.id + “  ”  + data.name + “  ”  + data.classname);

}

---------------------------------------------------------------------------------------------------------------------------------

Map得到查詢

List<Map> list = = session.createQuery(“select new map(name as stuname,stu.cla.name as claname) from Student”).list();

For(Map map : list){

System.out.print(map.get(“stuname”) +” ” + map.get(“classname”));

}

---------------------------------------------------------------------------------------------------------------------------------

知道查詢的結構是一個對象,獲得一個結果集

Student stu = (Student)session.createQuery(“from Student where id=2”).uniqueResult();

(懶載入)有關聯時:      當清除session後,會報懶載入錯誤

System.out.print(stu.getName()+” ” + stu.getCla().getName());

開啟懶載入:1.配置中設定 lazy=”false” 2.在session關閉前,初始化 hibernate.initialize()

內串連:匹配才串連,不匹配不串連,會導致資料的丟失

Dto:資料持久化

 

單例模式:例如:private HibernateUtil(){}  不能new

Hibernate預留位置:1.id= :id(具名引數) 2.id=?

 

Group by 投影有限制:1.group by之後的能投影 2.彙總函式

Round(需要取整的函數,保留幾位小數)

IfNull(判斷的資料,0);---如果資料為空白,則用0代替

 

HQL中只能在Where /  select 中使用子查詢

 

用本地SQL/HQL語句:

Select name from t_student;     Select id from t_student;

返回一列資料:用string接受    用Integer接受

 

session.createSQLQuery(Select * from t_student).addScalar(“name”).list();  

在SQL語句中有標量,*則沒有效果

session.createSQLQuery(Select * from t_student).addEnitity(Student.class).list();

把查詢到的所有資料存放區到Student對象中  

 

Hibernate就是對JDBC的封裝 :對資料庫訪問效率的降低和效能的下降(針對這個產生了緩衝 ---- 記憶體中)   位於資料庫和資料庫訪問層中

 

一級緩衝:Session 緩衝

Session.clear();-----清除session,緩衝中的所有資料全部清除

 

lazy(懶載入)有懶載入:

1.需要什麼資料則發送什麼SQL語句

2.關閉懶載入:把所有的關聯表全部用一條SQL語句串連,對象過多儲存在記憶體中

3.關閉session時,懶載入也關閉

4.預設懶載入開啟

 

抓取策略:

Session關閉後,立即抓取資料-----把所有的資料抓取到資料庫中

From Student stu left join fetch stu,myclass where stu.id = 1;

 

二級緩衝:用第三方jar包 sessionFactory層級

在hibernate配置下:

<!--查詢快取-->

<property name="cache.use_query_cache">true</property>

<!--開啟二級緩衝-->

<property name="cache.use_second_level_cache">true</property>

<!--配置echche的實作類別-->

<property name="cache.region.factory_class">

org.hibernate.cache.EhCacheRegionFactory

</property>

 

Hibernate悲觀和樂觀鎖:控制資料在操作時,不會被外界所破壞

悲觀鎖:鎖表的狀態 setLockMode(對象,LockMode.UPGPADE)  依賴資料庫的鎖表機制,t提交後才釋放

樂觀鎖:主要採用版本的形式

配置:

1.建立類時,添加一個屬性version int

2.Version必須配置在id的後面  <version name=”version” column=”version”></version>

 

Gson gson = new Gson();

String list = gson.toJson();

 

打成jar包:

1.file--export

2.輸入jar --- jarfile

3.選擇想要打的jar包  寫入jar包名稱 選擇儲存路徑

Hibernate中的HQL查詢與緩衝機制

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.