Hibernate冬眠 ORM框架(O - R mapping )分別是對象 關係 映射mysql
對象 – 持久化 – 數據庫 (關係數據庫、對象數據庫)sql
對象 – 關係數據庫
Hibernate的優勢:(1)使用HIBERNATE.應用層就能夠專一於業務邏輯的實現, 只需知道怎麼使用HIBERNATE所提供的接口,緩存
而不知道具體實現的細節. session
(2)封裝了JDBC以後,能夠鏈接數據庫時減小代碼的冗餘.oracle
(3)直接用映射文件,能夠方便的實現與不一樣數據庫的鏈接.app
Hibernate的冬眠是指將對象的生命週期更長一點,也就是對象的持久化;負載均衡
1講到將對象保存到文件中用到的類是ObjectOutputStream可是這種不方便,所以將此對象存儲到數據庫中,那就方便多了,而hibernate就是講對象轉化爲關係,它將對象的屬性存到數據庫中,有了對象型數據庫就不會有hibernate了;框架
Insert into(User user)eclipse
Ps.setString(1,user.getUsername)這種寫法是純手工的比較比較慢,
2 演示的是以Java項目爲例的
hibernate的環境搭建,將hibernate包下的hibernate3.jar和lib包所有拷貝到項目中。Lib中的jar文件都要解壓出來放進工程項目下;接着導入包和數據庫驅動;hibernate中的配置文件是hibernate.cfg.xml;放到項目的src文件夾下;在hibernate.cfg.xml裏面有個session工廠;
3 工廠有好幾個有DEO工廠產生DEO,還有個Connection工廠用來生產connection的;
Session工廠是用來產生session的,但不是jsp中的session;在hibernate中session只封裝了connection;就是用來給客戶提供數據庫鏈接的;則將數據庫的信息配置到
<session-factory >
<propetry name=」 hibernate.connection.driver_class」>com.mysql.jdbc.Driver</property>
<propetry name=」 hibernate.connection.url」>com.mysql.jdbc.Driver</property>
<propetry name=」 hibernate.connection.username」>hibernate </property>
<propetry name=」 hibernate.connection.password」>paswssword </property>
<propetry name=」 hibernate.dialect」>com.mysql.jdbc.Driver</property>
</session-factory>
hibernate/properties/etc/ hibernate.properties或
中;配置的時候能夠參考包裏的hibernate/properties/etc/hibernate.cfg.xml文件有數據庫的相關配置信息;經過這樣的配置後就是hibernate的數據庫鏈接可是每次鏈接數據庫的時候都要new一下效率就不行了;因此最好配置好點的數據源如c3p0;
hibernate.dialect org.hibernate.dialect.MySQLDialect
dialect在hibernate中有方言這個概念,它能夠自動的將配置信息轉換成底層的sql語句;好比分頁,需好幾條sql語句;自動實現數據庫不一樣帶來的技術;(好比mysql和sqlserver中的主鍵有自動遞增,但oracle中就沒有這時候就要咱們去配置觸發器來實現此功能,而是序列方式;因此hibernate能夠自動的去檢測是那個數據庫;用myeclipse創建數據庫的方法
點擊圖中的DB Browser,新鏈接mysql數據;
4 C3p0:配置這是個比較經典的數據源配置;
C3P0 Connection Pool###
###########################
#hibernate.c3p0.max_size 2 最多連接是數據庫
#hibernate.c3p0.min_size 2 最少鏈接的
#hibernate.c3p0.timeout 5000 鏈接超時
#hibernate.c3p0.max_statements 100 數據庫中的緩存
#hibernate.c3p0.idle_test_period 3000 鏈接滿了後多少時間在鏈接;
#hibernate.c3p0.acquire_increment 2 從新鏈接的數量
#hibernate.c3p0.validate false 驗證鏈接是否可用;可用於壓力測試中;配置方法:
<propetry name=」 hibernate.c3p0.max_size」>50 </property>
是否打印語句是用來檢測的時候能夠在控制檯看到sql語句;
<propetry name=」 hibernate.show_sql」>true </property>
5 下一步是創建關係映射,
用Id(主鍵)配置持久化標識;其它屬性就用property來配置;
<generator class="generatorClass"/>表示主鍵生成方式mysql中是indentify,
在這有一個和indentify(mysql 主鍵生成方式)類似的關鍵字那就是increment它在集羣中不易使用
Indentify和squence區別indentify能夠在sqlServer、mysql中逐漸自動遞增identity由於只能在一個table中用一次,可是不能用在oracle中;squence用在Oracle中sequence能夠在一張表中的多個字段多被用到;db2 支持sequence,identity的兩種用法
集羣也就是負載均衡的意思,可是increment它運行的時候必須在同一個虛擬機,因此它在集羣中不能使用的
6註冊映射關係:
<mapping resource=」包/kk.xml」/>
7測試用到的測試工具是Junit工具:測試時創建一個類必須繼承testcase類;用到了讀取hibernate的配置文件的方法是configuration();Configuration cfg=new Configuration();
建立session-factory的方法
SeeionFactory sf = cfg.buildSessionFactory();