Hibernate 簡介
Hibernate 是一個開放源代碼的對象關係映射框架,它對JDBC進行了非常輕量級的對象封裝,它將POJO與數據庫表建立映射關係,是一個全自動的ORM框架,hibernate可以自動生成SQL語句,自動執行,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。 一句話:Hibernate 是一個實現了 ORM 思想的框架,封裝了 JDBC。
ORM: 對象關係映射(Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping)是一種程序技術,用於實現面向對象編程語言裏不同類型系統的數據之間的轉換。其實就是將關係和對象通過映射文件進行聯繫。我們在程序中只需要操作對象即可操作對應的數據庫表的數據。
注意:POJO(Plain Ordinary Java Object)簡單的Java對象,實際就是普通JavaBeans,
使用環境:
1、Hibernate 5.2.17, JBoss tools 插件生成配置文件
2、Eclipse 4.7
3、jdk1.8
4、MySQL5.7
5. maven
一、創建一個簡單的 maven 項目 導包 和 配置 Hibernate5 主配置文件
導包
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.17.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>
Hibernate5 主配置文件:hibernate.cfg.xml
注意:方言 MySQL5 指5.0+版本的MySQL
自動生成表結構策略(開發配置, 生產不配置)
<property name="hbm2ddl.auto">update</property>
value -- update(使用最多):當數據庫不存在表時,hibernate啓動後會自動生成表結構。
當數據庫表存在時,如果一樣,則只會寫入數據,不會改變表結構。
當數據庫表存在時,如果不一樣,則會修改表結構,原有的表結構不會改變。
create(很少):無論表結構是否存在,hibernate啓動後都會重新生成表結構。(造成之前的數據丟失)
create-drop(極少):無論表結構是否存在,hibernate啓動都會重新生成表結構。並且hibernate關閉後,表結構會被刪除。來無影去無蹤。
validate(很少):不會創建表結構,不會修改表結構。校驗與數據庫中的表結構是否一樣,如果不一樣則報異常。
<session-factory>
<!-- 數據庫基本信息 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test_hibernate5</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<!-- hibernate配置信息 MySQL5指5.0+版本的MySQL-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- ORM 映射關係 -->
<mapping resource="cn/jq/hibernate5/model/Student.hbm.xml"/>
</session-factory>
二、 創建一個 POJO 類 和 Xxxt.hbm.xml 映射文件
POJO 類:必須要有無參構造器
public class Student {
private int id;
private String name;
private String sex;
private Date birthday;
...
//必須要有無參構造器
//getter setter
}
Xxxt.hbm.xml : 插件生成, 簡單修改
<class name="cn.jq.hibernate5.model.Student" table="T_STUDENT">
<id name="id" type="int">
<column name="ID" />
<!-- 設置主鍵的生成方式 -->
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
<property name="sex" type="java.lang.String">
<column name="SEX" />
</property>
<property name="birthday" type="java.util.Date">
<column name="BIRTHDAY" />
</property>
</class>
三、 創建 Junit 測試類
注意: SessionFactory 工廠類的創建過程
Hibernate5 規定: 所有配置或服務要生效, 必須將其註冊到一個 StandardServiceRegistry 服務註冊類中
@Test
public void test() {
//1. 創建一個 SessionFactory 工廠類: 通過它建立一個與數據庫連接回話 session
SessionFactory sessionFactory = null;
//配置類: 封裝有我們的配置文件裏的配置信息, 返回的 configuration 包含有配置文件裏的具體信息
Configuration configuration = new Configuration().configure();
//Hibernate5規定: 所有配置或服務要生效, 必須將其註冊到一個服務註冊類中
StandardServiceRegistry serviceRegistry = configuration.getStandardServiceRegistryBuilder().build();
sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
//2. 通過工廠類開啓 Session 對象
Session session = sessionFactory.openSession();
//3. 開啓事務
Transaction transaction = session.beginTransaction();
//4. 執行 CRUD 操作
Student student = new Student("李四","男",new Date());
session.save(student);
//5. 提交事務
transaction.commit();
//6. 關閉 Session
session.close();
//7. 關閉工廠類
sessionFactory.close();
}
四、數據庫結果