Hibernate入門簡介
什麽是Hibernate框架?
Hibernate是一種ORM框架,全稱為 Object_Relative DateBase-Mapping,在Java對象與關系數據庫之間建立某種映射,以實現直接存取Java對象!
為什麽要使用Hibernate?
既然Hibernate是關於Java對象和關系數據庫之間的聯系的話,也就是我們MVC中的數據持久層->在編寫程序中的DAO層...
首先,我們來回顧一下我們在DAO層寫程序的歷程吧:
- 在DAO層操作XML,將數據封裝到XML文件上,讀寫XML文件數據實現CRUD
- 在DAO層使用原生JDBC連接數據庫,實現CRUD
- 嫌棄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入門簡介