Hibernate ORM框架学习日记基础篇-1
一、簡介
????? Hibernate是輕量級Java EE應用的持久層解決方案,不僅管理Java類庫到數據庫表的映射,還提供數據查詢和獲取數據的
方法,它完成對象模型和基于SQL的關系模型的映射關系,使得開發者可以完全采用面向對象的方法來開發應用程序。
????? ORM全稱為Object/Relation Mapping,即對象/關系數據庫映射,完成面向對象到關系數據庫的映射,將關系數據庫包裝成
面向對象的模型
二、hibernate 及相關下載
????? 在Eclipse中新建一個項目,然后準備好需要的jar包,數據庫使用的是mysql
????? a.官網下載hibernate orm jar包,解壓之后將lib中的required所有jar包導入項目
????? b.由于使用mysql數據庫連接,所以要將mysql的數據庫連接的jar導入項目,即mysql-connector-java-5.1.42-bin.jar
????? c.這里使用c3p0數據源進行數據庫的連接管理,所以需要將下載的hibernate jar包中的lib文件夾下的optional文件夾下的
??????? c3p0文件夾下的所有jar包導入項目
????? d.測試類需要用到JUnit,需要在項目中導入JUnit4的jar包
三、開始使用hibernate
1.創建持久化對象
?? 持久化對象(PO)是hibernate中重要的媒介,以面向對象的方式完成對數據庫的增刪改的操作,在我們對持久化進行創建、修改
刪除的操作時,不需要去再去操作數據庫,hibernate會負責把這種操作轉換為對數據庫表的操作。
? 持久化對象(PO)= java的普通傳統對象POJO+持久化的注解
import java.util.Date;import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType;@Entity @Table(name="user_info") public class User {private Integer userId;private String userName;private String telNumber;private Date registerDate;@Id@GeneratedValue(strategy=GenerationType.IDENTITY)public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getTelNumber() {return telNumber;}public void setTelNumber(String telNumber) {this.telNumber = telNumber;}@Temporal(TemporalType.TIMESTAMP)@Column(name="registerDate")public Date getRegisterDate() {return registerDate;}public void setRegisterDate(Date registerDate) {this.registerDate = registerDate;}}上面創建一個名為User的持久化對象,并使用了相應的注解
@Entity 表明該類為Hibernate的持久化類
@Table 指定該類映射的數據庫中的表,user_info
@Id 表示該類的標識屬性,一般對應數據庫的主鍵
@GeneratedValue: 表示主鍵的生產策略,此處的策略為自動增長
@Column:對應表中的字段名稱
@Temporal:處理時間的格式
…
通過上面的注解就將POJO類映射到了數據庫的user_info表中
?
二、配置文件hibernate.cfg.xml
右擊src文件夾,新建文件,命名為hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- 連接數據庫的信息 --><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql://localhost/huan</property><property name="connection.username">root</property><property name="connection.password">root</property><!-- 連接池管理策略 --><!-- 最大連接數 --><property name="hibernate.c3p0.max_size">100</property><!-- 最小連接數 --><property name="hibernate.c3p0.min_size">10</property><!-- 獲得連接的超時時間,如果超過這個時間,會拋出異常,單位毫秒 --><property name="hibernate.c3p0.timeout">5000</property><!-- 最大的PreparedStatement的數量 --><property name="hibernate.c3p0.max_statements">100</property><property name="hibernate.c3p0.idle_test_period">300</property><property name="hibernate.c3p0.acquire_increment">2</property><property name="hibernate.c3p0.validate">true</property><!-- 數據庫的方言 --><property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> <!-- 根據需要自動創建表 如果表存在不新建表,只操作數據 --><property name="hbm2ddl.auto">update</property><!-- 打印sql --><property name="show_sql">true</property><!-- 格式化打印的sql --><property name="hibernate.format_sql">true</property><!-- 羅列持久化的類名 --><mapping class="com.huan.entity.User"/></session-factory> </hibernate-configuration>hibernate配置文件的默認名稱為hibernate.cfg.xml,hibernate會自動去加載該文件。
三、測試使用hibernate
import java.util.Date;import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.After; import org.junit.Before; import org.junit.Test;import com.huan.entity.User;public class HibernateBasicUseTest {private SessionFactory sessionFactory;@Beforepublic void setUp() {//解析配置文件 默認去加載hibernate.cfg.xmlConfiguration config = new Configuration().configure();//創建SessionFactory實例sessionFactory = config.buildSessionFactory();}@Afterpublic void tearDown(){sessionFactory.close();}@Testpublic void testHibernateBasicUse(){//創建SessionSession session = sessionFactory.openSession();//開啟事務Transaction tx = session.beginTransaction();//操作持久化對象User user = new User();user.setRegisterDate(new Date());user.setTelNumber("15678986774");user.setUserName("aha");//保存 session.save(user);//事務提交 tx.commit();//關閉Session session.close();}}上面代碼創建了一個測試類,對于使用Hibernate可以總結為如下步驟
1.獲取Configuration實例(加載配置文件)
2.獲取SqlSessionFactory
3.獲取Session
4.開啟事務Transaction
5.完成業務邏輯,使用Session操作持久化對象,即完成對數據庫的操作
6.提交事務,關閉Session
運行上面的測試類,由于之前的<property name="hbm2ddl.auto">update</property>為update,在沒有表的情況下hibernate會先去創建表,
所以第一次運行上面的測試類可以看到控制臺輸出了兩條SQL語句。
然后到數據庫中查看是否已經新建了表并且保存了數據:
結果表明測試運行成功,整個過程并沒有手寫sql語句去操作數據庫,這個操作由hibernate去完成,我們操作的僅僅是User對象。
這應該就是ORM框架的特色吧。
轉載于:https://www.cnblogs.com/yueguangmoliya/p/7004709.html
總結
以上是生活随笔為你收集整理的Hibernate ORM框架学习日记基础篇-1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入.NET框架
- 下一篇: 快速入门系列--MVC--03控制器和I