(四)Hibernate API詳解
阿新 • • 發佈:2018-08-10
delet hibernate load 類型變量 nbsp ria 每次 transacti llb
一、Configuration類
用來加載默認文件路徑下的配置文件(hibernate.properties)。
調用configure()方法會加載默認文件路徑下的xml格式的配置文件(hibernate.cfg.xml)推薦使用。
如果配置文件在不默認文件路徑下或者配置文件名不符合默認規則 可以使用
new Configuration().configure(file) 加載指定文件
new Configuration().configure(path) 加載指定路徑下的文件
如果使用properties格式的配置文件,可以使用addClass(實體類名.class)方法可以加載映射文件。
二、SessionFactory對象
SessionFactory代表數據庫存儲源。根據Hibernate配置文件創建對應的數據庫存儲源。
SessionFactory對象創建後,和Configuration對象再無關聯。修改Configuration包含的配置文件信息,不會對SessionFactory有任何影響。
獲取SessionFactory對象:new Configuration().configure().buildSessionFactory();
對象的緩存很大,就稱為重量級對象。SessionFactory存放了Hibernate配置信息,映射元數據信息等。是重量級對象。
三、Session對象
代表程序和數據庫的會話。Session提供了操作數據庫的各種方法。是輕量級對象。 獲取Session對象 factory.openSession(): 獲取新的Session實例。 factory.getCurrentSession():采用該方法創建的Session會取出當前線程中的Session,底層使用ThreadLocal進行存取 save()方法:把Java對象保存到數據庫中。 Transaction ts=session.beginTransaction(); User u=new User(); u.setName("趙六"); u.setPassword("123456"); //將對象保存到數據庫 session.save(u); ts.commit(); update()方法:更新數據庫的方法 Transaction ts=session.beginTransaction(); //先查出要修改的對象,根據主鍵值 User user=session.get(User.class, 1); user.setName("jery"); //將對象更新到數據庫,根據OID session.update(user); ts.commit(); delete()方法:刪除方法 底層根據OID進行刪除。有兩種方式 (1) Transaction ts=session.beginTransaction(); User user=session.get(User.class, 1); //刪除指定對象 session.delete(user); ts.commit(); (2) Transaction ts=session.beginTransaction(); User user=new User(); user.setId(2); session.delete(user); ts.commit(); load()或get()方法:從數據庫查找指定對象 session.get(實體類名.class,OID);或session.load(實體類名.class,OID); load()和get()的區別 我們使用get查詢時發現控制臺會立馬打出查詢語句。 使用load查詢時控制臺不會打印查詢語句。 get方法被調用時立刻發送sql語句到數據庫進行查詢。 load方法被調用時並沒有查詢數據庫,當我們需要使用查詢的對象時,才去查詢,所以當我們打印對象時,才會在控制臺打印sql語句。 get()的原理 程序調用get方法,Hibernate發送sql語句到數據庫 數據庫返回結果,Hibernate將結果封裝成對象,返回對象到程序。 load()的原理 程序調用load方法,Hibernate使用代理技術,創建一個代理對象,屬性只有ID值。 然後返回代理對象給程序,我們使用對象時,代理對象調用Hibernate查詢數據庫,初始化其他屬性。 load方法,返回一個代理對象,獲取其屬性時,會查詢數據庫,每次訪問屬性都會查詢數據庫麽? 答:不是。代理對象中有一個標識是否被初始化的boolean類型變量,記錄是否被初始化。
四、Criteria
使用HQL語言(後面會詳細介紹),HQL語言是面向對象的 Query query=session.createQuery("from User"); 第二種方式 Criteria c=session.createCriteria(User.class); List<User> l=c.list(); 第三種方式,使用原生sql語句進行查詢 SQLQuery query=session.createSQLQuery("select * from user"); List l=query.list();
五、Transaction對象
封裝了事務的操作。我們做增刪改查等操作時,必須開啟事務. 因為session是線程不安全的,這樣主要是為了線程安全。保證數據的正確性。 開啟事務: Transaction ts=session.beginTransaction(); 提交事務:ts.commit(); 回滾事務:ts.rollback(); 當通過getCurrentSession獲取當前線程綁定的Session時,事務關閉時,會自動把Session關閉並刪除。
六、Query對象
封裝HQL語句的對象。 返回一個對象的方法 query.uniqueResult(); 分頁相關 query.setFirstResult(index):從第幾個取 query.setMaxResults(count):指定取幾行記錄
(四)Hibernate API詳解