標籤: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查詢與緩衝機制