Hibernate持久層框架使用【一】配置hibernate
記錄一下hibernate框架的使用
一、下載Hibernate
從官網下載hibernate,解壓後可以看到這麼幾個資料夾
documentation——hibernate的幫助文件
lib——hibernate的依賴包
project——hibernate的示例專案
首先新建一個java專案,開啟lib資料夾,將required資料夾下的所有jar包以及jap資料夾下的jar包拷貝到專案下作為依賴
除了這些必須的jar包外,還可以根據需求,拷貝其他jar包,例如optional資料夾下可選的jar包,如:c3p0連線池、echcache快取等等。。。
接下來就是配置檔案了,開啟project資料夾下的etc資料夾,裡面有一些配置檔案,這裡拷貝這兩個hibernate配置檔案放到src路徑下
hibernate可以有兩種方式進行配置,一種是使用xml檔案的方式,另一種則是使用properties檔案了。
先寫一下xml檔案的配置方式
開啟hibernate.properties檔案,可以看到裡面的很多配置,Ctrl+F查詢一下mysql的配置,可以看到下面這幾行
## MySQL #hibernate.dialect org.hibernate.dialect.MySQLDialect #hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect #hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect #hibernate.connection.driver_class com.mysql.jdbc.Driver #hibernate.connection.url jdbc:mysql:///test #hibernate.connection.username gavin #hibernate.connection.password
這說明要使用mysql資料庫進行連線,則需要使用上面這些配置(前面為key,空格後為配置的值)。
說明一下這些配置的含義:
hibernate.dialect——表示使用的資料庫方言,這裡有多個值,只選一種就可以了
hibernate.connection.driver_class——資料庫驅動
hibernate.connection.username——使用者名稱
hibernate.connection.password——密碼
除了資料庫的配置外,還要再配置一下表的生成模式,同樣Ctrl+F查詢schema
有如下配置
## auto schema export #hibernate.hbm2ddl.auto create-drop #hibernate.hbm2ddl.auto create #hibernate.hbm2ddl.auto update #hibernate.hbm2ddl.auto validate
hibernate.hbm2ddl.auto配置的值:
create-drop——表示建立sessionFactory時建立表,sessionFactory關閉時刪除表
create——每次sessionFactory建立時建立表
update——sessionFactory建立時建立表,存在表則不建立
validate——校驗
將這些配置寫到剛剛拷貝的xml檔案裡
xml檔案中加了兩個配置
hibernate.show_sql(顯示sql語句)和hibernate.format_sql(格式化sql語句),值為true表示啟用
下面是完整的配置檔案,c3p0連線池和快取配置根據需要加入
<!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>
<!-- mysql資料庫配置 -->
<!-- 用的是5.0以上的資料庫驅動,
把org.hibernate.dialect.MySQLInnoDBDialect換成
org.hibernate.dialect.MySQL5InnoDBDialect -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/hibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<!-- c3p0連線池配置 -->
<property name="hibernate.c3p0.max_size">10</property>
<property name="hibernate.c3p0.min_size">2</property>
<property name="hibernate.c3p0.timeout">5000</property>
<!-- 顯示_格式化sql語句 -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<!-- 表生成模式 -->
<!-- create-drop : 建立sessionFactory時建立表,sessionFactory關閉時刪除表 -->
<!-- create : 每次sessionFactory建立時建立表 -->
<!-- update : sessionFactory建立時建立表,存在表則不建立 -->
<!-- validate : 驗證 -->
<property name="hibernate.hbm2ddl.auto">update</property>
</session-factory>
</hibernate-configuration>
配置完成,下面是資料庫表和類的對映,新建一個User類來對應資料庫中的一張表
@Entity(name="tb_user")
//@Table(name="tb_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
User類中的一些註解說明:
@Entity(name="tb_user")——表示此類作為一張表,name的值作為類名(也可不指定,以類名作為表名)
@Id——這個註解必須要加,將被註解的欄位作為表的主鍵
@GeneratedValue(strategy = GenerationType.IDENTITY)——主鍵生成策略,strategy的值為自增長
@Column(name = "user_id")——申明被註解的欄位對應資料庫的欄位名,name的值為資料庫的欄位名
再來建個test類測試一下
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
//載入配置檔案
Configuration configuration = new Configuration().configure();
//獲得服務註冊物件
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties()).build();
//定義一個SessionFactory物件
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
//SessionFactory sessionFactory = configuration.buildSessionFactory();
//獲得Session
Session session = sessionFactory.openSession();
//開啟事務
Transaction transaction = session.beginTransaction();
//提交事務
transaction.commit();
//關閉資源
session.close();
sessionFactory.close();
}
}
test類中被註釋掉的SessionFactory sessionFactory = configuration.buildSessionFactory();這一句雖然已經被淘汰了,但還是可以使用,使用這句程式碼則不需要拿到服務註冊物件
最後,還要在配置檔案中配置好對映,把User表對應的位置新增到mapper中
<!-- 新增對映 -->
<mapping class="com.fws.domain.User"/>
執行test類,可以看到資料庫中多了一張叫做tb_user的表