Hibernate框架原理及使用
Hibernate實現了物件導向的方式進行資料庫操作,是對JDBC進行輕量級封裝的成果,方法是將POJO物件和資料庫表建立關係。簡單的來說,使用Hibernate之後,運算元據庫就不需要像之前的JDBC那樣進行復雜的操作了。
使用hibernate的好處是:
1、更加物件化,以物件化的思維運算元據庫,我們只需要操作物件就可以了,開發更加物件化,符合Java物件導向的思想。
2、移植性高,因為Hibernate做了持久層的封裝,不直接運算元據庫,所有的程式碼都具有可複用性。
3、Hibernate是一個沒有侵入性的框架,沒有侵入性的框架我們稱為輕量級框架。對比Struts的Action和ActionForm,都需要繼承,離不開Struts。Hibernate不需要繼承任何類,不需要實現任何介面。
Hibernate實體類中有三種狀態:
瞬時狀態:使用new剛剛建立,還沒有被持久化,且不處於session的快取中
持久狀態:已經被持久化了,而且加入到了Session的快取中
遊離狀態:已經被持久化了,但是不再處於Session的快取中
那麼如何使用Hibernate呢?
配置hibernate-cfg.xml檔案,管理資料庫驅動和連線地址:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<property name="connection.url">jdbc:oracle:thin:@603-4:1521:orcl</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="myeclipse.connection.profile">mydriver</property>
</session-factory>
</hibernate-configuration>
配置*.hbm.xml對映檔案,也就是POJO和Table的對映:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.pojo.Dh12Info" table="STU_INFO" schema="xxx">
<id name="SId" type="java.lang.Long"> 此ID為類中的屬性
<column name="S_ID" precision="30" scale="0" />--此處的ID是表中的欄位
<generator class="sequence" /> --ID的生成策略是sequence進行
</id>
<property name="SName" type="java.lang.String"> --實體列
<column name="S_NAME" length="30" /> -- 表中的欄位
</property>
<property name="SSex" type="java.lang.Integer">
<column name="S_SEX" precision="1" scale="0" />
</property>
<property name="SBri" type="java.util.Date">
<column name="S_BRI" length="7" />
</property>
<property name="SAdd" type="java.lang.String">
<column name="S_ADD" length="500" />
</property>
<property name="STel" type="java.lang.String">
<column name="S_TEL" length="15" />
</property>
<property name="SQq" type="java.lang.String">
<column name="S_QQ" length="30" />
</property>
</class>
</hibernate-mapping>
使用Hibernate運算元據的流程是:
讀取並解析配置檔案 -----讀取並解析對映檔案,建立SessionFactory------開啟session-------開啟一個事務-------運算元據庫--------提交或者回滾事務-------關閉session。
下面用一個例子來展示如何運算元據庫:
public class AddTest extends TestCase {
Configuration conf = null;
SessionFactory sessionFactory = null;
Session session = null;
Transaction tran = null;
protected void setUp() throws Exception {
//完成1234步驟
//第一步:讀取並解析配置檔案
conf = new Configuration().configure();
//第二步:讀取並解析對映檔案
sessionFactory = conf.buildSessionFactory();
//第三步:開啟session
session = sessionFactory.openSession();
//第四步:開啟一個事務
tran = session.beginTransaction();
}
protected void tearDown() throws Exception {
//完成7步驟
//第七步:關閉回話
session.close();
}
public void add(){
//真正完成資料庫的操作
StuInfo pojo = new StuInfo("張三",1,new Date(),"山西省太原市","137227839","5445567858");
try {
session.save(pojo);
tran.commit();//提交
} catch (Exception e) {
tran.rollback();
e.printStackTrace();
// TODO: handle exception
}
}
}
使用Hibernate,少量的程式碼便實現了資料的插入 ,session.save(pojo);,是對SQL的封裝,實現插入資料。
對於修改和刪除來說,我們要先進行資料庫查詢操作:使用Hibernate實現資料庫的查詢操作,Session中提供了兩種的載入資料的方式:
Object get(Class c,id):通過ID載入資料,返回實體類物件,使用get載入資料的時候,如果資料不存在則返回null
Object load(Class c ,id): 通過ID載入資料,返回實體類物件,如果資料不存在,則會丟擲異常
如下:
public void update(){
//真正完成資料庫的操作
StuInfo pojo = (StuInfo)session.get(StuInfo.class,new Long(1));
pojo.setSName("李四");
try {
session.update(pojo);
tran.commit();//提交
} catch (Exception e) {
tran.rollback();
e.printStackTrace();
// TODO: handle exception
}
}
刪除操作同理:
public void delete(){
StuInfo pojo = (StuInfo)session.get(StuInfo.class,new Long(1));
try {
session.delete(pojo);//刪除
tran.commit();//提交
} catch (Exception e) {
tran.rollback();
e.printStackTrace();
// TODO: handle exception
}
}
以上就是對資料進行增刪改查的方法。(提示)本例中沒有使用main方法,而是使用Junit單元測試,所以要匯入相應的包。
相關文章
- Hibernate框架框架
- Hibernate 框架理解框架
- LruCache 使用及原理
- @Inner使用及原理
- Docker使用及原理Docker
- 風險評估框架流程及分析原理框架
- Hibernate框架簡介⑤框架
- Hibernate框架簡介④框架
- Hibernate框架簡介③框架
- Hibernate框架簡介②框架
- Hibernate框架簡介①框架
- Hibernate框架學習框架
- Hibernate框架進階框架
- Struts1、Struts2、Hibernate、Spring框架工作原理介紹Spring框架
- Flutter Hooks 使用及原理FlutterHook
- YUM工作原理及使用
- Express的使用及原理Express
- Java集合 ArrayList原理及使用Java
- KVO使用及實現原理
- mydumper使用及原理淺析
- 搜尋引擎原理及使用
- MySQL的索引原理及使用MySql索引
- Hadoop Yarn 框架原理及運作機制HadoopYarn框架
- 手寫 Hibernate ORM 框架 00-hibernate 簡介ORM框架
- Gin框架介紹及使用框架
- java框架之Hibernate框架知識點整理。Java框架
- 【SSH框架】系列之 Spring 整合 Hibernate 框架框架Spring
- Hibernate 延遲載入原理
- 21-Java-Hibernate框架(一)Java框架
- 【SSH框架】之Hibernate系列(一)框架
- Hibernate 框架的查詢方式框架
- 自主開發的Hibernate框架框架
- Andfix熱修復框架原理及原始碼解析-上篇框架原始碼
- Andfix熱修復框架原理及原始碼解析-下篇框架原始碼
- 框架學習:hibernate框架的結構和分析框架
- Paging Library使用及原理
- nodeJs流的使用及原理NodeJS
- Spark on Yarn 部分一原理及使用SparkYarn