Hibernate的基本API的用法
1、Configuration 配置物件
Configuration物件就是用來讀取配置檔案和orm對映檔案的!
hibernate.cfg.xml 通常使用xml配置檔案,可以配置內容更豐富。
hibernate.properties用於配置key/value 形式的內容,key不能重複的。配置有很多的侷限性。一般不用。
1.提供構造 new Configuration() hibernate將自動載入 hibernate.properties檔案
hibernate.properties檔案必須存放在類路徑(src)下。
2.提供方法 configure() 將載入src下的hibernate.cfg.xml
3.擴充套件api
configure(String)載入指定目錄下的 xml檔案
4.手動載入配置檔案
// 手動載入指定的配置檔案
config.addResource("com/itheima/a_hello/User.hbm.xml");
// 手動載入指定類,對應的對映檔案 User--> User.hbm.xml
config.addClass(User.class);
2、 SessionFactory工廠
SessionFactory 相當於java web連線池,用於管理所有session
Session是Hibernate自己建立,放進工廠的。
所以程式設計師只需要關注如何建立工廠,和從工廠中取出Session物件就行了。
1、建立工廠 SessionFactory
1、需要configuration的配置資訊
2、直接buildSessionFactory() 【然而這個方法已經過時了…】
3、獲得Session 【必須確保Session是同一個Session】
OpenSession:獲得一個全新的Session物件 →一般測試的時候用這個
getCurruentSession 獲得與當前執行緒繫結的Session物件,如果沒有,就給你一個新的。→專案上線的時候用這個
特別的,使用getCurruentSession的時候需要再xml裡面配置一個property。
以後學Spring 的時候可以不用thread繫結,現在學Hibernate就是用thread繫結。
框架的優點就在這裡,它封裝了ThreadLocal放在getCurruentSession裡面。
事務是包裹業務的,所有的業務操作結束後才關閉事務(提交或回滾)
用了一個 ThreadLocal<connection> 類,執行緒本地化,來保證一個業務裡面的所有connection是同一個。
3、Session 會話
Session 相當於 JDBC的 Connection-- 會話
【Hibernate中必須需要主鍵。它是通過主鍵來區別物件的。】
1、演示物件導向的增
只需要用setName這樣的屬性操作,然後用session.save(),然後關閉資源(session和factory都要關閉)即可。其他的sql語句之類的不用管。
2、查詢
使用get方法。
3、修改【主要需要用tansaction事務來操作,這樣可以及時修改】
必須先查詢出要修改的物件,再進行修改。
4、刪除
根據id刪除。【這裡只要set物件的主鍵就行了。】
5、查詢【非常重要!】
1、get方法(上面演示過了):get方法被呼叫時,立刻傳送sql語句查詢。
2、load方法【代理物件原理】:呼叫laod的時候並沒有查詢資料,只有當我們需要使用該物件的時候,才查詢資料。【延遲載入,提高Hibernate的執行效率】
3.1、查詢所有物件 HQL語言
使用HQL查詢,Hibernate Query Language,是一個物件導向的查詢語言。
“from 類名”就是查詢所有結果。
3.2還有一個是session.createCriteria方法:
它是Hibernate獨創的物件導向的查詢,特點是無語句查詢。
3.3 支援原生的sql查詢(這裡不是物件導向的查詢,所有list的泛型不能亂寫了)
這裡的列印不能再用syso了,必須用for迴圈列印,因為這個是用obeject封裝資料資訊的。
這裡再使用query.addEntity方法將查詢的結果封裝到指定物件中。
SQLQueryquery=session.createSQLQuery(“select * from t_user”);
Query.addEntity(User.class);
List<User>list=query.list();
Syso(List);
4、Transaction 事務
開啟事務beginTransaction()
獲得事務getTransaction()
提交事務:commit()
回滾事務:rollback()
事務的基本操作:
//1載入配置
Configuration conf = new Configuration().configure();
//2 根據Configuration 配置資訊建立 SessionFactory
SessionFactory sf = conf.buildSessionFactory();
//3 獲得session
Session session = sf.openSession();
//-------------------------------
//開啟事務
Transaction ts = session.beginTransaction();
//獲得已經開啟的事務物件(很少用)
session.getTransaction();
//Transaction 控制如何關閉事務
//提交
ts.commit();
//回滾
ts.rollback();
//-------------------------------
session.close();
sf.close();
事務的細節:【重點!!!】
//1載入配置
Configuration conf = new Configuration().configure();
//2 根據Configuration 配置資訊建立 SessionFactory
SessionFactory sf = conf.buildSessionFactory();
//3 獲得與當前執行緒繫結的session
Session session = sf.getCurrentSession();
//-------------------------------
//事務關閉時,會自動把與當前執行緒關聯的session關閉,並刪除
session.beginTransaction().commit();
//在獲得當前執行緒繫結的session時. 獲得的是新的session
Session session2 = sf.getCurrentSession();
System.out.println(session==session2);//false
//-------------------------------
session.close();
sf.close();
5、 Query物件
Query封裝查詢細節。
Query.list():執行hql語句,當返回結果是多行的情況,用這個。
Query.uniqueResult():只返回一個物件
分頁:mysql用了limit idex,count。
Hibernate用了↓,查詢結果用list接收,列印。
//指定結果從第幾個開始拿
query.setFirstResult(0);
//指定拿幾個結果
query.setMaxResults(2);
6、Criteria物件
這個方法用的不多,因為它有侷限性,所以稍作了解即可。
//Criteria 查詢 => Hibernate獨創的物件導向的查詢=> 無語句
Criteria criteria = session.createCriteria(User.class);
// 查詢name屬性值為tom的 記錄
criteria.add(Restrictions.eq("name", "tom"));
//返回一個查詢結果
User u = (User) criteria.uniqueResult();
//Criteria 查詢 => Hibernate獨創的物件導向的查詢=> 無語句
Criteria criteria = session.createCriteria(User.class);
//查詢名字中包含字母o的使用者
criteria.add(Restrictions.like("name", "%o%"));
//返回一個查詢結果
List<User> list = criteria.list();
System.out.println(list);
//Criteria 查詢 => Hibernate獨創的物件導向的查詢=> 無語句
Criteria criteria = session.createCriteria(User.class);
//查詢id大於3的使用者
criteria.add(Restrictions.gt("id", 3));
//返回一個查詢結果
List<User> list = criteria.list();
System.out.println(list);
7、工具類
程式碼的重複性很強,所以封裝成一個工具類就好了。
一次伺服器開啟期間,載入一次配置就好了。
Build相當於連線池,整個專案放一個連線池就夠了。
所以這些都是程式級別的操作,所以應該放到static裡面。
public class H3Utils {
// 會話工廠,整個程式只有一份。
private static SessionFactory factory;
static{
//1 載入配置
Configuration config = new Configuration().configure();
//2 獲得工廠
factory = config.buildSessionFactory();
//3 關閉虛擬機器時,釋放SessionFactory
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
System.out.println("虛擬機器關閉,釋放資源");
sf.close();
}
}));
}
/**
* 獲得一個新的session
* @return
*/
public static Session openSession(){
return factory.openSession();
}
/**
* 獲得當前執行緒中繫結session
* * 注意:必須配置
* @return
*/
public static Session getCurrentSession(){
return factory.getCurrentSession();
}
}
相關文章
- ElasticSearch之基本用法APIElasticsearchAPI
- MongoDB的基本用法MongoDB
- async的基本用法
- dva的基本用法
- rematch的基本用法REM
- Generator的基本用法
- webpack的基本用法Web
- vector的基本用法
- Python中if的基本用法Python
- Elasticsearch cat api的用法ElasticsearchAPI
- MongoDB 及 PyMongo 的基本用法MongoDB
- es6的基本用法
- react-redux的基本用法ReactRedux
- stl中map的基本用法
- 反射機制的基本用法反射
- string 函式的基本用法函式
- JAVA的陣列基本用法Java陣列
- Hive的基本操作用法Hive
- C++中& 的基本用法C++
- QMl 中alias 的基本用法
- Jquery UI ---autocomplete的基本用法jQueryUI
- linux useradd命令的基本用法Linux
- Spark的基本結構及SparkSQL元件的基本用法SparkSQL元件
- Kubernetes裡的secret最基本的用法
- Java裡的Character類的基本用法Java
- socket基本的API使用API
- 【VUE】vue-router的基本用法Vue
- mongodb-java-driver的基本用法MongoDBJava
- Golang筆記--strconv包的基本用法Golang筆記
- 【MySQL】資料型別的基本用法MySql資料型別
- 分割槽函式Partition By的基本用法函式
- openpyxl 操作 Excel表的格基本用法Excel
- Git基本用法Git
- merge into基本用法
- CompletableFuture基本用法
- Moya基本用法
- requests基本用法
- Promise基本用法Promise
- BigDecimal 基本用法Decimal