1. 程式人生 > >Hibernate入門簡介

Hibernate入門簡介

package resultset tro objc 連接數 程序 映射 date void

什麽是Hibernate框架?

Hibernate是一種ORM框架,全稱為 Object_Relative DateBase-Mapping,在Java對象與關系數據庫之間建立某種映射,以實現直接存取Java對象

為什麽要使用Hibernate?

既然Hibernate是關於Java對象和關系數據庫之間的聯系的話,也就是我們MVC中的數據持久層->在編寫程序中的DAO層...

首先,我們來回顧一下我們在DAO層寫程序的歷程吧:

  1. 在DAO層操作XML,將數據封裝到XML文件上,讀寫XML文件數據實現CRUD
  2. 在DAO層使用原生JDBC連接數據庫,實現CRUD
  3. 嫌棄JDBC的Connection\Statement\ResultSet等對象太繁瑣,使用對原生JDBC的封裝組件-->DbUtils組件

我們來看看使用DbUtils之後,程序的代碼是怎麽樣的:

public class CategoryDAOImpl implements zhongfucheng.dao.CategoryDao {

    @Override
    public void addCategory(Category category) {

        QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource());

        String sql = "INSERT INTO category (id, name, description) VALUES(?,?,?)";
        
try { queryRunner.update(sql, new Object[]{category.getId(), category.getName(), category.getDescription()}); } catch (SQLException e) { throw new RuntimeException(e); } } @Override public Category findCategory(String id) { QueryRunner queryRunner
= new QueryRunner(Utils2DB.getDataSource()); String sql = "SELECT * FROM category WHERE id=?"; try { Category category = (Category) queryRunner.query(sql, id, new BeanHandler(Category.class)); return category; } catch (SQLException e) { throw new RuntimeException(e); } } @Override public List<Category> getAllCategory() { QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource()); String sql = "SELECT * FROM category"; try { List<Category> categories = (List<Category>) queryRunner.query(sql, new BeanListHandler(Category.class)); return categories; } catch (SQLException e) { throw new RuntimeException(e); } } }

其實使用DbUtils時,DAO層中的代碼編寫是很有規律的。

  • 當插入數據的時候,就將JavaBean對象拆分,拼裝成SQL語句
  • 當查詢數據的時候,用SQL把數據庫表中的列組合,拼裝成JavaBean對象

也就是說:javaBean對象和數據表中的列存在映射關系!如果程序能夠自動生成SQL語句就好了....那麽Hibernate就實現了這個功能!

簡單來說:我們使用Hibernate框架就不用我們寫很多繁瑣的SQL語句,從而簡化我們的開發!

ORM概述

在介紹Hibernate的時候,說了Hibernate是一種ORM的框架。那什麽是ORM呢?ORM是一種思想

  • O代表的是Objcet
  • R代表的是Relative
  • M代表的是Mapping

ORM->對象關系映射....ORM關註是對象與數據庫中的列的關系

技術分享圖片

Hibernate快速入門

學習一個框架無非就是三個步驟:

  • 引入jar開發包
  • 配置相關的XML文件
  • 熟悉API

引入相關jar包

我們使用的是Hibernate3.6的版本

hibernate3.jar核心 + required 必須引入的(6個) + jpa 目錄 + 數據庫驅動包

技術分享圖片

編寫對象和對象映射

編寫一個User對象->User.java

1 public class User {
2     
3     private int id;
4     private String username;
5     private String password;
6     private String cellphone;
7 
8     //各種的setter和getter就不一一展示了
9 }

再寫一個數據庫表,屬性和User的屬性一致。

編寫對象映射->User.hbm.xml。一般它和JavaBean對象放在同一目錄下

如果不知道該XML是怎麽寫的,可以搜索一下Hibernate文件夾中後綴為.hbm.xml。看看它們是怎麽寫的。再依葫蘆畫瓢

 1 <!--在domain包下-->
 2 <hibernate-mapping package="qinkang.domain">
 3 
 4     <!--類名為User,表名也為User-->
 5     <class name="User"  table="user">
 6 
 7         <!--主鍵映射,屬性名為id,列名也為id-->
 8         <id name="id" column="id">
 9             <!--根據底層數據庫主鍵自動增長-->
10             <generator class="native"/>
11 
12         </id>
13         
14         <!--非主鍵映射,屬性和列名一一對應-->
15         <property name="username" column="username"/>
16         <property name="cellphone" column="cellphone"/>
17         <property name="password" column="password"/>
18     </class>
19 </hibernate-mapping>

主配置文件

hibernate.cfg.xml

如果使用Intellij Idea生成的Hibernate可以指定生成出主配置文件hibernate.cfg.xml,它是要放在src目錄下的

如果不是自動生成的,我們可以在Hibernate的hibernate-distribution-3.6.0.Final\project\etc這個目錄下可以找到。在依葫蘆畫瓢

 1 <hibernate-configuration>
 2     <!-- 通常,一個session-factory節點代表一個數據庫 -->
 3     <session-factory>
 4 
 5         <!-- 1. 數據庫連接配置 -->
 6         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
 7         <property name="hibernate.connection.url">jdbc:mysql:///qinkang</property>
 8         <property name="hibernate.connection.username">root</property>
 9         <property name="hibernate.connection.password">root</property>
10         <!--
11             數據庫方法配置, hibernate在運行的時候,會根據不同的方言生成符合當前數據庫語法的sql
12          -->
13         <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
14 
15 
16         <!-- 2. 其他相關配置 -->
17         <!-- 2.1 顯示hibernate在運行時候執行的sql語句 -->
18         <property name="hibernate.show_sql">true</property>
19         <!-- 2.2 格式化sql -->
20         <property name="hibernate.format_sql">true</property>
21         <!-- 2.3 自動建表  -->
22         <property name="hibernate.hbm2ddl.auto">create</property>
23 
24         <!--3. 加載所有映射-->
25         <mapping resource="qinkang/domain/User.hbm.xml"/>
26 
27     </session-factory>
28 </hibernate-configuration>

測試

 1 package qinkang.domain;
 2 
 3 import org.hibernate.SessionFactory;
 4 import org.hibernate.Transaction;
 5 import org.hibernate.cfg.Configuration;
 6 import org.hibernate.classic.Session;
 7 
 8 /**
 9  * Created by ozc on 2017/5/6.
10  */
11 public class App {
12     public static void main(String[] args) {
13 
14         //創建對象
15         User user = new User();
16         user.setPassword("123");
17         user.setCellphone("122222");
18         user.setUsername("nihao");
19 
20         //獲取加載配置管理類
21         Configuration configuration = new Configuration();
22 
23         //不給參數就默認加載hibernate.cfg.xml文件,
24         configuration.configure();
25 
26         //創建Session工廠對象
27         SessionFactory factory = configuration.buildSessionFactory();
28 
29         //得到Session對象
30         Session session = factory.openSession();
31 
32         //使用Hibernate操作數據庫,都要開啟事務,得到事務對象
33         Transaction transaction = session.getTransaction();
34 
35         //開啟事務
36         transaction.begin();
37 
38         //把對象添加到數據庫中
39         session.save(user);
40 
41         //提交事務
42         transaction.commit();
43 
44         //關閉Session
45         session.close();
46     }
47 }

技術分享圖片

hibernate流程

技術分享圖片

Hibernate入門簡介