hibernate學習(一)

一.準備工做:導入jar包java

  1.hibernate的jar包mysql

    位置:sql

       hibernate-release-5.0.2.Final\hibernate-release-5.0.2.Final\lib\required\

 

    包名:數據庫

            antlr-2.7.7.jar

       dom4j-1.6.1.jar

       hibernate-commons-annotations-5.0.0.Final.jar

       hibernate-core-5.0.2.Final.jar

       hibernate-jpa-2.0-api-1.0.1.Final.jar

       javassist-3.18.1-GA.jar

       jboss-logging-3.3.0.GA.jar

       jboss-transaction-api_1.1_spec-1.0.1.Final.jar                                 

  

  2.jdbc的jar包windows

    

       mysql-connector-java-5.1.7.jar

 

  3.新建數據庫:hibernate5api

    hibernate5會根據關係映射文件自動建立你配置的數據表  但前提是你的數據庫必須存在 否則會拋異常session

  

二.編寫hibernate配置文件準備工app

  1.建立hibernate配置文件:src -> new hibernate Configure XML -> next ->finish。 結束後配置文件的名字就是hibernate.cfg.xmldom

 

  2.爲了開發方便,能夠關聯DTD 文件。這樣配置時會有相應的提示。   ide

      a) windows -> preference -> XML-> XML Catalog -> Add

      b) 把"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"(不帶雙引號複製到Add窗口的key這一項。

       修改keyType爲URL


      c) location:       hibernate-release-5.0.2.Final\project\hibernate-core\src\main\resources\org\hibernate\

               這個文件夾下就有 hibernate-configuration-3.0.dtd 和 hibernate-mapping-3.0.dtd 連個文件

      d)點擊ok,關聯成功

 

三.開始編寫hibernate配置文件

  

<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 <hibernate-configuration>
    <session-factory>
       <!-- 配置鏈接數據庫的基本信息 -->
       <property name="connection.username" >root</property>
      <property name="connection.password">000000</property>
      <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
      <property name="connection.url">jdbc:mysql:///hibernate5</property>
    
      <!-- 配置hibernate的基本信息 -->
      <!-- hibernate所使用的數據庫方言 告訴hibernate使用的是那種數據庫,固然不告訴hibernate也能夠根據數據庫驅動去猜,可是版本也會所區別 -->
      
      <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
    
      <!-- 是否在console打印sql語句 -->
      <property name= "show_sql">true</property>
    
      <!-- 是否格式化sql語句,意思就是遇到where order by 等語句會換行 控制檯打印出的sql語句讀起來就比較好讀 -->
      <property name="format_sql">true</property>
    
      <!-- 指定自動生成數據表的策略 -->
      <property name="hbm2ddl.auto">update</property>
    
      <!--指定關聯的 .hbm.xml 文件 是一個目錄結構 -->
      <mapping resource="com/hjj/hibernate/helloword/News.hbm.xml"/>
     </session-factory>
</hibernate-configuration>

    備註:在這裏配置hibernate所使用的數據庫方言

      hibernate-release-5.0.2.Final\project\etc 裏的文件hibernate.properties 的mysql數據庫方言對應的屬性值,一共有三個:

         hibernate.dialect org.hibernate.dialect.MySQLDialect

        hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect  

           hibernate.dialect org.hibernate.dialect.MySQLMyISAMDia

      原本我用的是MySQLInnoDBDialect,可是表格是沒法自動建立的,會拋出異常。

       主要信息爲: org.hibernate.tool.schema.spi.SchemaManagementException:

              Unable to execute schema management to JDBC target [create table NEWS (ID integer not null auto_increment, TITLE varchar(255), AUTHOR varchar(255), DATE date, primary key (ID)) type=InnoDB]

    而後改了這個值爲org.hibernate.dialect.MySQL5InnoDBDialect就能夠了

       

四 . 建立持久化類

   

 1 package com.hjj.hibernate.helloword;
 2 import java.sql.Date;
 3 //通常的 javabean 
 4 public class News {
 5     private Integer id;
 6     private String title;
 7     private String author;
 8     private Date date;
 9     
10     public News(){
11         
12     }
13 
14     public News(String title, String author, Date date) {
15         super();
16         this.title = title;
17         this.author = author;
18         this.date = date;
19     }
20 
21     public Integer getId() {
22         return id;
23     }
24 
25     public void setId(Integer id) {
26         this.id = id;
27     }
28 
29     public String getTitle() {
30         return title;
31     }
32     public void setTitle(String title) {
33         this.title = title;
34     }
35 
36     public String getAuthor() {
37         return author;
38     }
39     public void setAuthor(String author) {
40         this.author = author;
41     }
42     
43     public Date getDate() {
44         return date;
45     }
46     public void setDate(Date date) {
47         this.date = date;
48     }
49 
50     @Override
51     public String toString() {
52         return "News [id=" + id + ", title=" + title + ", author=" + author + ", date=" + date + "]";
53     }
54 
55 }

五.建立對象關係映射文件 

  位置:和持久化類(News)位於一個包底下    com.hjj.hibernate.helloworld.News.hbm.xml   

  建立方法:右鍵->New ->Other ->hiberante XML Mapping file,而後選擇News類,映射文件就成功了.

  這個方法是自動生成映射文件,也能夠本身寫.

  具體代碼以下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2016-3-7 19:05:44 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="com.hjj.hibernate.helloword.News" table="NEWS"> 
        <!-- name :類的屬性名 -->
        <id name="id" type="java.lang.Integer">
            <!-- column:數據庫字段名 -->
            <column name="ID" />
            <!-- 指定主鍵的生成方式,native:使用數據庫本地的生成方式 不一樣數據庫自動主鍵的方式不一樣 native 能夠根據數據庫的不一樣選擇合適的方式 -->
            <generator class="native" />
        </id>
        <property name="title" type="java.lang.String">
            <column name="TITLE" />
        </property>
        <property name="author" type="java.lang.String">
            <column name="AUTHOR" />
        </property>
        <property name="date" type="java.sql.Date">
            <column name="DATE" />
        </property>
    </class>
</hibernate-mapping>

六.經過Hibernate API 編寫訪問數據庫的代碼

  建立一個單元測試類

  

package com.hjj.hibernate.helloword;
import static org.junit.Assert.*;
import java.sql.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.Test;

public class HibernateTest {

    @Test
    public void test() {
        //1. 建立一個 SessionFactory對象   SessionFactory 是一個接口
            SessionFactory sessionFactory = null;
            
            //1)建立Configuration 對象 :對應 hibernate的基本配置信息和對象關係映射
            Configuration configuration = new Configuration().configure();
            sessionFactory = configuration.buildSessionFactory();            
        
        //2.建立一個 Session 對象
        Session session = sessionFactory.openSession();
        
        //3.開啓事務
        Transaction transaction = session.beginTransaction();

        //4.執行保存操做
        News news = new News("java","HJJ",new Date(new java.util.Date().getTime()));
        session.save(news);
        
        //5.提交事務
        transaction.commit();
        
        //6.關閉session
        session.close();
        
        //7.關閉SessionFactory對象
        sessionFactory.close();
    }

}

 

七.運行單元測試類

  控制檯:

  Hibernate: 

      insert 

      into

        NEWS

        (TITLE, AUTHOR, DATE) 

      values

         (?, ?, ?)

 

    

    

八.數據庫

  自動建立news表格,而且成功插入一條記錄

 

  news表格

    

相關文章
相關標籤/搜索