首先分析一下什麼是框架?
框架就是一個半成品項目,我們書寫項目可以從半成品開始寫。
這樣能夠大大提高開發效率。
不必糾結於框架本身的實現,只要學會如何使用這個框架即可。
複習一下什麼是Hibernate框架?
這個框架應用與dao層。
ORM:Object Relactional Mapping
實體類和數據庫表之間建立了聯繫,通過操作對象,直接對數據庫進行修改。
Hibernate框架搭建
第一步:導包
1、hibernate包下載地址
http://prdownloads.sourceforge.net/hibernate/?sort_by=date&sort=desc
2、Ant包下載地址:
http://apache.130th.net/ant/binaries/apache-ant-1.6.1-bin.zip
MySQL JDBC Driver下載地址
http://dev.mysql.com/downloads/connector/j/3.0.html
PostgreSQL JDBC Driver下載地址
http://jdbc.postgresql.org/download.html
MS-SQL Server JDBC Driver下載地址
http://www.microsoft.com/downloads/details.aspx?FamilyID=9f1874b6-f8e1-4bd6-947c-0fc5bf05bf71&displaylang=en
導包步驟
2、準備一個實體類
(1)所有的屬性應該設置爲私有,並添加get和set方法
(2)構造函數要麼不寫,如果要寫至少要寫兩個(必須包含一個空的)
(3)屬性的類型應是包裝類型
package cn.hd.bean;
public class User {
private Integer id;
private String name;
private Integer age;
private String sex;
private Integer balance;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getBalance() {
return balance;
}
public void setBalance(Integer balance) {
this.balance = balance;
}
public User(Integer id, String name, Integer age, String sex, Integer balance) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
this.balance = balance;
}
public User() {
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", balance=" + balance +
'}';
}
}
3準備數據庫
(1)數據庫必須由我們自己建,數據庫表,可以由hibernate自動創建,如果手動創建,表中的字段和實體類一一對應。
4 創建實體類和數據表之間的映射配置文件
創建一個 實體類名 + .hbm + .xml
建議這個文件的目錄和實體類在同一個目錄下。
<hibernate-mapping>
<class name="cn.hd.bean.User" table="t_user">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="name" column="name"></property>
<property name="age" column="age"></property>
<property name="sex" column="sex"></property>
<property name="balance" column="balance"></property>
</class>
</hibernate-mapping>
5.書寫核心配置文件
名字必須是:hibernate.cfg.xml
文件的位置必須放在src目錄下
導入約束
<!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:3306/hibernate01</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql_sql">true</property>
<!--自動創建表-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!--事務:4-->
<property name="hibernate.connection.isolation">4</property>
<mapping resource="cn/hd/bean/User.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
6.書寫Servlet
package cn.hd.test;
import cn.hd.bean.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class Demo {
public static void main(String[] args) {
//讀取配置文件
Configuration cfg = new Configuration();
cfg.configure();//讀取配置
//創建sessionFactory
SessionFactory sessionFactory = cfg.buildSessionFactory();
//獲得一個session對象
Session session = sessionFactory.openSession();
//開啓事務
Transaction transaction = session.beginTransaction();
User user = new User();
user.setName("牧塵");
user.setAge(20);
user.setSex("男");
user.setBalance(15000);
session.save(user);
//提交事務
transaction.commit();
//釋放資源
session.close();
sessionFactory.close();
}
}
配置文件詳解
1、映射文件
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 下面class中的類的路徑,下面的class name 屬性可以縮寫 -->
<hibernate-mapping package="cn.hd.bean">
<!-- 映射類和數據庫表之間的關係 -->
<!-- name屬性是實體類名 寫完整路徑名 -->
<!-- table屬性 數據庫表名字 -->
<class name="User" table="t_user">
<!-- 映射文件中必須擁有 主鍵id -->
<id name="id" column="id">
<!-- 主鍵生成策略
identity:mysql自動遞增
increment:當前最大序號+1
sequence:Oracle數據庫中的自動遞增
native :自動遞增(3和1)
assigned:
uuid:
-->
<generator class="native"></generator>
</id>
<!-- 基本屬性 在這裏可以設置數據庫的屬性
字段名 類型 長度 不爲空 默認值
-->
<property name="name" column="name"></property>
<property name="age" column="age"></property>
<property name="sex" column="sex"></property>
<property name="balance" column="balance"></property>
</class>
</hibernate-mapping>
2、核心配置文件詳解
名字和位置都必須按照規定來。
<hibernate-configuration>
<session-factory>
<!--必須 數據庫連接屬性-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate01</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<!-- 方言 必須要設置-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 在控制檯展示SQL語句 不必須-->
<property name="hibernate.show_sql">true</property>
<!-- SQL語句格式化輸出 -->
<property name="hibernate.format_sql">true</property>
<!-- 自動創建表
1、update 如果映射文件和數據庫保持一致就不修改,如果沒有就自動創建表
2、crate 每次執行都會重新創建一個表(覆蓋)
3、create_drop 先將原來的表刪除,然後重建
4、validate 只做校驗
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 事務的隔離級別:
1
2
4
8
髒讀
幻讀
不可重複讀
串行化
-->
<property name="hibernate.connection.isolation">4</property>
<!-- 掃描影射文件
class: 影射文件和配置文件名字和路徑必須保持一致
mapping:掃描該包下的所有配置文件
resource: 指定某個確定XML配置文件
-->
<mapping resource="cn/hd/bean/User.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>