初步瞭解Hibernate(第一篇)
阿新 • • 發佈:2018-11-21
這是我第一次寫部落格,作為一直萌新先談談我的感想,之前接觸部落格的時候感覺沒必要自己寫出來,後來學了的東西有時候忘的差不多,然後自己在找的時候又下了不少功夫挺浪費時間,最主要的是之前不太會操作,有點嫌麻煩qaq,emmmmm。這裡記錄我的程式設計學習歷程,以供以後參閱。
hibernate是一個持久層的框架技術,簡單來說就是做了物件和關係的自動轉換現在常用的持久層技術:
(1)通過會話bean和實體bean來實現資料持久化(EJB)
業務層---會話bean---實體
優點:穩定
缺點:重量級,記憶體消耗很大
(2)通過jdbc和dao來實現資料持久化(之前用的)
業務層---dao---jdbc--資料庫
優點:記憶體消耗最小
缺點:簡單,重複,耗時,各個資料庫sql不太一樣
(3)通過dao和orm元件來實現資料持久化(hibernate)
業務層---dao--orm--資料庫
優點:記憶體消耗一般
缺點:還要學習該框架
1,搭建hibernate框架
(1)新增jar
暫時用的是hibernate3.jar自行選擇
slf4j-api-1.6.1.jar(是介面標準)
slf4j-nop-1.6.1.jar(實現包)
(2)src下新增配置檔案hibernate.cfg.xml,個人設定自行修改(資料hibernate-distribution-3.6.10.Final\project\etc下有模版)
<!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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost/hhh</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <!-- 資料庫連線池配置 --> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.min_size">1</property> <property name="hibernate.c3p0.timeout">5000</property> <property name="hibernate.c3p0.max_statements">100</property> <property name="hibernate.c3p0.idle_test_period">3000</property> <property name="hibernate.c3p0.acquire_increment">2</property> <property name="hibernate.c3p0.validate">true</property> <!-- 資料庫方言,hibernate-distribution-3.6.10.Final\project\etc\下的hibernate.properties檔案中有 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 是否需要根據配置自動生成資料表 --> <property name="hbm2ddl.auto">update</property> <!-- 是否顯示傳送的sql語句 --> <property name="show_sql">true</property> <!-- 是否sql格式化後輸出 --> <property name="hibernate.format_sql">true</property> <!-- 需要hibernate管理的配置檔案 --> <mapping resource="entity/Customer.hbm.xml"/> </session-factory> </hibernate-configuration>
(3)實體類對映(例)
public class Customer {
private int id;
private String name;
private String info;
private Date createTime;
}
(4)提供實體類對映檔案,建議與類同名,如Customer.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--
name,類的位置,table,對應的資料庫表
-->
<class name="entity.Customer" table="t_Customer">
<!-- 主鍵,物件/表的id配置,很重要
mysql---increment
oracle---sequence
mssqlserver---identity
uuid
select,根據查詢生成主鍵
-->
<id name="id">
<!-- 主鍵聲稱策略 -->
<generator class="increment"/>
</id>
<!-- 其他屬性
column,重定義列名,預設與屬性名一致
type,更改列型別,建議預設
length,字串長度,建議預設
-->
<property name="name"/>
<property name="info"/>
<property name="createTime"/>
</class>
</hibernate-mapping>
(5)將該實體類交給hibernate管理,在hibernate.cfg.xml中新增
<mapping resource="entity/Customer.hbm.xml"/>
(6)測試
public class ExportDB {
public static void main(String[] args) {
//讀取配置檔案,configure()該方法預設讀取src下名為hibernate.cfg.xml
Configuration cfg=new Configuration().configure();
//將類導成表
SchemaExport se=new SchemaExport(cfg);
//引數,顯示一些指令碼等資訊,true即可
se.create(true, true);
}
}
這樣就可以把相應的表自動匯入資料庫了,雖然配置有點麻煩,但是一勞永逸。