Hibernate基本映射(三)

 

 

這篇博客小編介紹Hibernate的經典內容:對象關係映射。主要介紹映射的基本概念,映射的分類,映射文件。html

 

概念

 

       ORM(Object Relational Mapping),即對象關係映射。它的做用就是在關係型數據庫和對象之間作了一個映射。從對象(Object)映射到關係(Relation),再從關係映射到對象。相信不少人跟小編一個毛病,看到概念就頭疼,下面小編畫了一張圖加深理解。java

 

     

 

         這張圖特別簡單:原來,沒有Hibernate時,咱們須要經過JDBC+手動寫SQL語句來操做數據庫,如今,有了Hibernate,它將JDBC+SQL進行了高度封裝,咱們不須要再去和複雜SQL打交道,只要像操做對象同樣操做數據庫就能夠了。mysql

 

       ORM的實現思想就是將數據庫中表的數據映射成對象,Hibernate可使咱們採用對象化的思惟操做關係型數據庫。算法

 

映射文件

 

 Hibernate在實現ORM功能的時候主要用到的文件有:
    一、 映射類(*.java):它是描述數據庫表的結構,表中的字段在類中被描述成屬性,未來就能夠實現把表中的記錄映射成爲該類的對象了。
  
    二、映射文件(*.hbm.xml):它是指定數據庫表和映射類之間的關係,包括映射類和數據庫表的對應關係、表字段和類屬性類型的對應關係以及表字段和類屬性名稱的對應關係等。
 
    三、 hibernate核心配置文件(*.properties/*.cfg.xml):它指定hibernate的一些核心配置,包含與數據庫鏈接時須要的鏈接信息,好比鏈接哪一種數據庫、登陸數據庫的用戶名、登陸密碼以及鏈接字符串等。映射文件的地址信息也放在這裏。sql

 

分類

 

 

            

 

      上面的內容看上去挺多,其實特別少,基本映射很簡單,咱們主要學習關聯關係映射,其餘幾種映射通常不會用,只須要了解便可,用的時候看一下相關資料會作就好。數據庫

 

 基本映射

 

          上篇博文咱們已經實現了一個基本映射,是使用XML方式配置映射,以下所示:session

[html] view plain copyapp

  1. <span style="font-size:12px;"><?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping>  
  6.     <class name="com.liang.hibernate.User" >  
  7.         <id name="id">  
  8.             <!-- 算法的核心思想是結合機器的網卡、當地時間、一個隨機數來生成GUID -->  
  9.             <generator class="uuid"></generator>  
  10.         </id>  
  11.         <property name="name"></property>  
  12.         <property name="password"></property>  
  13.         <property name="createTime" type="date"></property>  
  14.         <property name="expireTime" type="date"></property>  
  15.     </class>  
  16. </hibernate-mapping></span>  

 

除了XML方式配置映射外,還能夠經過給類文件添加註解的方式配置映射,在上篇博文的基礎之上,咱們稍加修改。工具

 

一、加入hibernate annotion支持包學習

      *hibernate-annotations.jar
      *hibernate-commons-annotations.jar
      *ejb3-persistence.jar

 

 如圖所示:

           

 

二、創建實體類User,採用註解完成映射

[java] view plain copy

  1. package com.liang.hibernate;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import javax.persistence.Column;  
  6. import javax.persistence.Entity;  
  7. import javax.persistence.GeneratedValue;  
  8. import javax.persistence.GenerationType;  
  9. import javax.persistence.Id;  
  10. import javax.persistence.Temporal;  
  11. import javax.persistence.TemporalType;  
  12.   
  13. @Entity //不寫Table默認爲user,@Table(name="t_user")  
  14. public class User {  
  15.   
  16.     @Id //主鍵  
  17.     @GeneratedValue(strategy=GenerationType.AUTO)//採用數據庫自增方式生成主鍵  
  18.     //JPA提供的四種標準用法爲TABLE,SEQUENCE,IDENTITY,AUTO.   
  19.     //TABLE:使用一個特定的數據庫表格來保存主鍵。   
  20.     //SEQUENCE:根據底層數據庫的序列來生成主鍵,條件是數據庫支持序列。   
  21.     //IDENTITY:主鍵由數據庫自動生成(主要是自動增加型)   
  22.     //AUTO:主鍵由程序控制。  
  23.     private int id;  
  24.       
  25.     private String name;  
  26.     private String password;  
  27.       
  28.     @Temporal(TemporalType.DATE)//生成yyyy-MM-dd類型的日期  
  29.     private Date createTime;  
  30.     @Temporal(TemporalType.DATE)//生成yyyy-MM-dd類型的日期  
  31.     private Date expireTime;  
  32.       
  33.       
  34.   
  35.     public int getId() {  
  36.         return id;  
  37.     }  
  38.     public void setId(int id) {  
  39.         this.id = id;  
  40.     }  
  41.     @Column(name="name",unique=true,nullable=false) //字段爲name,不容許爲空,用戶名惟一  
  42.     public String getName() {  
  43.         return name;  
  44.     }  
  45.     public void setName(String name) {  
  46.         this.name = name;  
  47.     }  
  48.     public String getPassword() {  
  49.         return password;  
  50.     }  
  51.     public void setPassword(String password) {  
  52.         this.password = password;  
  53.     }  
  54.     public Date getCreateTime() {  
  55.         return createTime;  
  56.     }  
  57.     public void setCreateTime(Date createTime) {  
  58.         this.createTime = createTime;  
  59.     }  
  60.     public Date getExpireTime() {  
  61.         return expireTime;  
  62.     }  
  63.     public void setExpireTime(Date expireTime) {  
  64.         this.expireTime = expireTime;  
  65.     }  
  66.   
  67. }  

 

注:因爲主鍵改爲了自增加,因此數據類型修改爲了int類型

 

三、提供hibernate.cfg.xml文件,將實體類User加入到hibernate.cfg.xml配置文件中,完成基本配置

[html] view plain copy

  1. <span style="font-size:12px;"><!DOCTYPE hibernate-configuration PUBLIC  
  2.     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  3.     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  4.   
  5. <hibernate-configuration>  
  6.     <session-factory>  
  7.         <!-- 驅動 -->  
  8.         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
  9.         <!-- 數據庫URL -->  
  10.         <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>  
  11.         <!-- 數據庫用戶名 -->  
  12.         <property name="hibernate.connection.username">root</property>  
  13.         <!-- 數據庫密碼 -->  
  14.         <property name="hibernate.connection.password">123456</property>  
  15.         <!-- mysql的方言 -->  
  16.         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>  
  17.           
  18.         <!-- 映射文件 -->  
  19.         <!--  <mapping resource="com/liang/hibernate/User.hbm.xml"/>  -->    
  20.           
  21.         <!-- 由原來的映射文件,改爲實體類 -->  
  22.         <mapping class="com.liang.hibernate.User"/>  
  23.           
  24.     </session-factory>  
  25. </hibernate-configuration></span>  

 

四、編寫工具類ExportDB.java,註解生成ddl,必須採用AnnotationConfiguration類

[java] view plain copy

  1. <span style="font-size:12px;">package com.liang.hibernate;  
  2.   
  3. import org.hibernate.cfg.AnnotationConfiguration;  
  4. import org.hibernate.cfg.Configuration;  
  5. import org.hibernate.tool.hbm2ddl.SchemaExport;  
  6.   
  7. /** 
  8.  * 將hbm生成ddl 
  9.  * @author liang 
  10.  * 
  11.  */  
  12. public class ExportDB{    
  13.     public static void main(String[]args){  
  14.         //默認讀取hibernate.cfg.xml文件  
  15.         Configuration cfg = new AnnotationConfiguration().configure();  
  16.         SchemaExport export = new SchemaExport(cfg);  
  17.         export.create(true, true);  
  18.     }  
  19. }</span>  

 

數據庫生成表如圖所示:

      



五、創建客戶端類Client,添加用戶數據到mysql

[java] view plain copy

  1. package com.liang.hibernate;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import org.hibernate.Session;  
  6. import org.hibernate.SessionFactory;  
  7.   
  8. import org.hibernate.cfg.AnnotationConfiguration;  
  9. import org.hibernate.cfg.Configuration;  
  10.   
  11. public class Client {  
  12.     public static void main(String[]args){  
  13.         //讀取hibernate.cfg.xml文件  
  14.         Configuration cfg = new AnnotationConfiguration().configure();  
  15.         //創建SessionFactory  
  16.         SessionFactory factory =cfg.buildSessionFactory();  
  17.           
  18.         //取得session  
  19.         Session session = null;  
  20.           
  21.         try{  
  22.             //開啓session  
  23.             session = factory.openSession();  
  24.             //開啓事務  
  25.             session.beginTransaction();  
  26.               
  27.             User user = new User();  
  28.             user.setName("jiuqiyuliang");  
  29.             user.setPassword("123456");  
  30.             user.setCreateTime(new Date());  
  31.             user.setExpireTime(new Date());  
  32.             //保存User對象  
  33.             session.save(user);  
  34.               
  35.             //提交事務  
  36.             session.getTransaction().commit();  
  37.               
  38.         }catch(Exception e){  
  39.             e.printStackTrace();  
  40.             //回滾事務  
  41.             session.getTransaction().rollback();  
  42.         }finally{  
  43.             if(session != null){  
  44.                 if(session.isOpen()){  
  45.                     //關閉session  
  46.                     session.close();  
  47.                 }  
  48.             }  
  49.         }  
  50.     }  
  51. }  

 

 運行以後,數據庫表生成的數據,以下圖所示:

       

 

      註解和xml文件的優缺點,網上有不少,有興趣能夠查一下,小編就再也不累述了,可是小編認爲,學習初期最好不要使用註解,不易於理解Hibernate的原理,而且註解對於程序的可擴展性而言,太差了。

 

     下篇博文,咱們介紹Hibernate的七種關聯關係映射,異常簡單,謝謝關注。

相關文章
相關標籤/搜索