Hibernate ORM框架学习日记基础篇-1
一、簡(jiǎn)介
????? Hibernate是輕量級(jí)Java EE應(yīng)用的持久層解決方案,不僅管理Java類庫(kù)到數(shù)據(jù)庫(kù)表的映射,還提供數(shù)據(jù)查詢和獲取數(shù)據(jù)的
方法,它完成對(duì)象模型和基于SQL的關(guān)系模型的映射關(guān)系,使得開發(fā)者可以完全采用面向?qū)ο蟮姆椒▉黹_發(fā)應(yīng)用程序。
????? ORM全稱為Object/Relation Mapping,即對(duì)象/關(guān)系數(shù)據(jù)庫(kù)映射,完成面向?qū)ο蟮疥P(guān)系數(shù)據(jù)庫(kù)的映射,將關(guān)系數(shù)據(jù)庫(kù)包裝成
面向?qū)ο蟮哪P?/p>
二、hibernate 及相關(guān)下載
????? 在Eclipse中新建一個(gè)項(xiàng)目,然后準(zhǔn)備好需要的jar包,數(shù)據(jù)庫(kù)使用的是mysql
????? a.官網(wǎng)下載hibernate orm jar包,解壓之后將lib中的required所有jar包導(dǎo)入項(xiàng)目
????? b.由于使用mysql數(shù)據(jù)庫(kù)連接,所以要將mysql的數(shù)據(jù)庫(kù)連接的jar導(dǎo)入項(xiàng)目,即mysql-connector-java-5.1.42-bin.jar
????? c.這里使用c3p0數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫(kù)的連接管理,所以需要將下載的hibernate jar包中的lib文件夾下的optional文件夾下的
??????? c3p0文件夾下的所有jar包導(dǎo)入項(xiàng)目
????? d.測(cè)試類需要用到JUnit,需要在項(xiàng)目中導(dǎo)入JUnit4的jar包
三、開始使用hibernate
1.創(chuàng)建持久化對(duì)象
?? 持久化對(duì)象(PO)是hibernate中重要的媒介,以面向?qū)ο蟮姆绞酵瓿蓪?duì)數(shù)據(jù)庫(kù)的增刪改的操作,在我們對(duì)持久化進(jìn)行創(chuàng)建、修改
刪除的操作時(shí),不需要去再去操作數(shù)據(jù)庫(kù),hibernate會(huì)負(fù)責(zé)把這種操作轉(zhuǎn)換為對(duì)數(shù)據(jù)庫(kù)表的操作。
? 持久化對(duì)象(PO)= java的普通傳統(tǒng)對(duì)象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;}}上面創(chuàng)建一個(gè)名為User的持久化對(duì)象,并使用了相應(yīng)的注解
@Entity 表明該類為Hibernate的持久化類
@Table 指定該類映射的數(shù)據(jù)庫(kù)中的表,user_info
@Id 表示該類的標(biāo)識(shí)屬性,一般對(duì)應(yīng)數(shù)據(jù)庫(kù)的主鍵
@GeneratedValue: 表示主鍵的生產(chǎn)策略,此處的策略為自動(dòng)增長(zhǎng)
@Column:對(duì)應(yīng)表中的字段名稱
@Temporal:處理時(shí)間的格式
…
通過上面的注解就將POJO類映射到了數(shù)據(jù)庫(kù)的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><!-- 連接數(shù)據(jù)庫(kù)的信息 --><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><!-- 連接池管理策略 --><!-- 最大連接數(shù) --><property name="hibernate.c3p0.max_size">100</property><!-- 最小連接數(shù) --><property name="hibernate.c3p0.min_size">10</property><!-- 獲得連接的超時(shí)時(shí)間,如果超過這個(gè)時(shí)間,會(huì)拋出異常,單位毫秒 --><property name="hibernate.c3p0.timeout">5000</property><!-- 最大的PreparedStatement的數(shù)量 --><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><!-- 數(shù)據(jù)庫(kù)的方言 --><property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> <!-- 根據(jù)需要自動(dòng)創(chuàng)建表 如果表存在不新建表,只操作數(shù)據(jù) --><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配置文件的默認(rèn)名稱為hibernate.cfg.xml,hibernate會(huì)自動(dòng)去加載該文件。
三、測(cè)試使用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() {//解析配置文件 默認(rèn)去加載hibernate.cfg.xmlConfiguration config = new Configuration().configure();//創(chuàng)建SessionFactory實(shí)例sessionFactory = config.buildSessionFactory();}@Afterpublic void tearDown(){sessionFactory.close();}@Testpublic void testHibernateBasicUse(){//創(chuàng)建SessionSession session = sessionFactory.openSession();//開啟事務(wù)Transaction tx = session.beginTransaction();//操作持久化對(duì)象User user = new User();user.setRegisterDate(new Date());user.setTelNumber("15678986774");user.setUserName("aha");//保存 session.save(user);//事務(wù)提交 tx.commit();//關(guān)閉Session session.close();}}上面代碼創(chuàng)建了一個(gè)測(cè)試類,對(duì)于使用Hibernate可以總結(jié)為如下步驟
1.獲取Configuration實(shí)例(加載配置文件)
2.獲取SqlSessionFactory
3.獲取Session
4.開啟事務(wù)Transaction
5.完成業(yè)務(wù)邏輯,使用Session操作持久化對(duì)象,即完成對(duì)數(shù)據(jù)庫(kù)的操作
6.提交事務(wù),關(guān)閉Session
運(yùn)行上面的測(cè)試類,由于之前的<property name="hbm2ddl.auto">update</property>為update,在沒有表的情況下hibernate會(huì)先去創(chuàng)建表,
所以第一次運(yùn)行上面的測(cè)試類可以看到控制臺(tái)輸出了兩條SQL語句。
然后到數(shù)據(jù)庫(kù)中查看是否已經(jīng)新建了表并且保存了數(shù)據(jù):
結(jié)果表明測(cè)試運(yùn)行成功,整個(gè)過程并沒有手寫sql語句去操作數(shù)據(jù)庫(kù),這個(gè)操作由hibernate去完成,我們操作的僅僅是User對(duì)象。
這應(yīng)該就是ORM框架的特色吧。
轉(zhuǎn)載于:https://www.cnblogs.com/yueguangmoliya/p/7004709.html
總結(jié)
以上是生活随笔為你收集整理的Hibernate ORM框架学习日记基础篇-1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入.NET框架
- 下一篇: [Leetcode] Copy list