1. 程式人生 > >07-hibernate進階

07-hibernate進階

需要 測試類 test 輸出 推薦 exc oot 自動提交 並且

1,hibernate.cfg.xml常用配置

2,session簡介

3,transaction簡介

4,session詳解

5,對象關系映射常用配置

hibernate.cfg.xml常用配置

show_sql:是否把運行時候的sql語句輸出到控制臺,以便測試。

format_sql:輸出到控制臺的sql是否排版,便於閱讀

hbm2dd.auto;可以幫助java生成數據庫腳本,生成具體表結構。create|update|create-drop|validate

default_schema:默認數據庫

dialect:配置數據庫方言。

session簡介

hibernate的執行過程:

Configuration-創建-SessionFactory-創建-Session(類似JDBC中的connecttion,獲取了Session,相當於獲取了一個連接)--執行-save|delete|update|get

--commit(提交事務)--session.close()(關閉連接)-- 結束

不建議通過JDBC操作數據庫,而是session操作。

session可以理解操作數據庫的對象。

session與JDBC中的connection,是多對一關系,每個session都有一個與之對應的connection,一個connection不同時刻可以供多個session使用。

把對象保存在關系數據庫中要調用session的各種方法,如:save(),update(),delete(),createQuery()等。

transaction簡介(事務)

hibernate對數據的操作都是封裝在事務中,並且默認是非自動提交的,所以用session保存對象時候,如果不開啟事務,並且提交事務,對象並不會真正保存到數據庫。

如果你想讓hibernate像JDBC那樣自動提交事務,必須調用session對象的doWork()方法,獲取jdbc的connection後,設置其為自動提交事務(不推薦)

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Date; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.jdbc.Work; import org.hibernate.service.ServiceRegistry; import org.junit.After; import org.junit.Before; import org.junit.Test; //測試類 public class StudentsTest { private SessionFactory sessionFactory; private Session session; private Transaction transaction; @Before public void init() { //創建配置對象 Configuration config=new Configuration().configure(); config.addClass(Students.class);//這個需要加上(視頻裏面沒有) //創建服務註冊對象。 ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder() .applySettings(config.getProperties()).build(); //通過config.getProperties()讀取配置文檔。 //創建會話工廠對象 sessionFactory=config.buildSessionFactory(serviceRegistry); //創建會話對象 session=sessionFactory.openSession(); //開啟事務 // transaction=session.beginTransaction(); } @After public void destory() { // transaction.commit();//提交事務 session.close();//關閉會話 sessionFactory.close();//關閉會話工廠 } @Test public void testSaveStudents() { //生成學生對象 Students s=new Students(1,"張三豐","男",new Date(),"武當山");
    //下面使用了匿名函數 session.doWork(
new Work() { @Override public void execute(Connection connection) throws SQLException { connection.setAutoCommit(true); } }); session.save(s);//保存對象進入數據庫 } }

07-hibernate進階