hibernate02環境的搭建

來源:互聯網
上載者:User

標籤:欄位   不一致   rac   word   doc   dtd   ges   star   url   

hibernate: 持久層的架構!
是一個開放原始碼的對象關係映射架構(ORM)!之前我們訪問資料庫使用JDBC!
對JDBC進行了輕量級的對象封裝!是一個全自動ORM架構!(底層可以自動產生sql語句)!
使用物件導向的思想來操作資料庫!

 

建立一個java項目

引入需要的hibernate需要的jar包以及串連資料庫需要的驅動包

把jar包放入項目中並引用

 

 建立對應的學生類

/** * 學生的實體類 */public class Student {    private Integer id;    private Integer age;    private String name;// 和資料庫中不一致 (sname)    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Student(Integer id, Integer age, String name) {        super();        this.id = id;        this.age = age;        this.name = name;    }    public Student() {        super();    }    @Override    public String toString() {        return "Student [id=" + id + ", age=" + age + ", name=" + name + "]";    }}

建立對應的資料庫中的學生表

找到對應mapping對應檔,放在和實體類相同的包下!並修改其中的內容

 

修改Student.hbm.xml檔案之後的內容

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"          "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><!-- 對應檔  M   目的;實體類和 資料庫中的表 產生關係 package:是說明我們需要映射的實體類的包名class  name:對應的是實體類的名稱(如果省略了package屬性,必須書寫全類名)property,id  name:對應的是實體類中的屬性名稱,如果和資料庫中的欄位一致,則可以省略column --><hibernate-mapping package="cn.bdqn.bean">  <class name="Student" table="stu">      <id name="id">      <!--主鍵建置原則        assigned:主鍵的產生值完全由使用者決定,與底層資料庫無關。              在調用session.save()之前必須指定主索引值,否則會拋出異常!      -->        <generator class="assigned"/>      </id>      <!--配置其他屬性的映射  -->      <property name="age"/>      <property name="name" column="sname"/>  </class></hibernate-mapping>

 

找到hibernate核心的設定檔並修改內容 

 

 

修改後的hibernate.cfg.xml檔案內容

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory>    <property name="connection.url">        jdbc:oracle:thin:@localhost:1521:orcl    </property>    <property name="connection.username">t10</property>    <property name="connection.password">t10</property>    <property name="connection.driver_class">        oracle.jdbc.OracleDriver    </property>    <!--方言  -->    <property name="dialect">        org.hibernate.dialect.Oracle9Dialect    </property>    <!--是否顯示底層產生的sql語句  -->    <property name="show_sql">true</property>    <!--格式化產生的sql語句  -->    <property name="format_sql">true</property>    <!--載入我們配置的對應檔  全路徑 -->    <mapping resource="cn/bdqn/bean/Student.hbm.xml" /></session-factory></hibernate-configuration>

建立對應的測試類別

package cn.bdqn.test;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.junit.Test;import cn.bdqn.bean.Student;/** *  * @author 小豆腐 *                      以後的你,會感謝現在努力的自己!努力!堅持!不放棄! *                                                              *  hibernate核心的 *  1個類 *  01. 類  Configuration !對核心設定檔的讀取!                                                          *  5個介面  *  01. SessionFactory:負責初始化hibernate需要的參數!在程式中有一個就夠了!之後我們會寫成單例模式!                                                          *  02. Session:不是我們的HttpSession(使用者session)!  我們hibernate的session *      是用來操作對象(增刪改查)!建立事務的對象!我們現在使用的session不是安全執行緒的!                                                        *  03. Transaction :進行事務的操作! *  04. Query :hibernate中查詢的介面(sql , hql) *  05. Criteria  :和Query相似!但是做了一些封裝!                                                        */public class StudentTest {    // 新增學生資訊    @Test    public void addStudent() {        /**         * 01.讀取核心設定檔    因為我們需要的資訊都在這個核心設定檔中(串連資料庫的四要素,對應檔)             * configure()底層預設去src下面查詢了hibernate.cfg.xml檔案         */        Configuration configuration = new Configuration().configure();        // 02.建立sessionFactory        SessionFactory sessionFactory = configuration.buildSessionFactory();        // 03.開啟session        Session session = sessionFactory.openSession();        // 04.開啟事務        Transaction transaction = session.beginTransaction();        // 05.建立一個Student對象        Student student = new Student(400, 50, "小黃");        // 06.持久化操作        session.save(student);        // 07.提交事務 的 會產生sql語句        transaction.commit();        // 08.關閉session        session.close();    }    // 新增學生資訊    @Test    public void addStudent2() {        /**         * 01.讀取核心設定檔    因為我們需要的資訊都在這個核心設定檔中(串連資料庫的四要素,對應檔)             * configure()底層預設去src下面查詢了hibernate.cfg.xml檔案         */        Configuration configuration = new Configuration().configure();        // 02.建立sessionFactory        SessionFactory sessionFactory = configuration.buildSessionFactory();        // 03.開啟session        Session session = sessionFactory.openSession();        // 04.開啟事務        Transaction transaction = session.beginTransaction();        // 05.建立一個Student對象        Student student1 = new Student(50, 50, "小黃2");        session.save(student1);        Student student2 = new Student(60, 50, "小黃2");        session.save(student2);        Student student3 = new Student(7, "小黃2"); // 沒有手動的給主鍵賦值,會拋出異常        session.save(student3);        /**         * 07.提交事務               * student1  和student2  沒有問題         * 但是student3 報錯了         * 那麼事務還會提交嗎?  不會! ACID
一致性: 原子性: 隔離性: 永久性:
         *          * 如果說 每個save()都會產生sql語句,與資料庫產生互動! 這樣資料庫的壓力大!         * 怎麼減輕?         * 在commit()的時候,把之前的sql語句一起發送給資料庫執行!         */        transaction.commit();        // 08.關閉session        session.close();    }}

 

hbm2ddl:屬性值

<!--是否顯示底層產生的sql語句  -->    <property name="show_sql">true</property>    <!--格式化產生的sql語句  -->    <property name="format_sql">true</property>         <!--  hbm2ddl         01.create:每次運行都會刪除上次產生的表!        02.update:沒有表會自動建立,如果有,新增資料!        欄位不一致,會按照hbm.xml檔案中的column屬性值 ,在資料庫中新增一列        03.validate:不會自動建立表,如果表存在,會新增資料!        欄位不一致,會拋出異常,說在資料庫中沒有該欄位        04.create-drop: 每次運行都會刪除上次產生的表!sessionFactory關閉的時候,資料庫中的表也會刪除!    -->    <property name="hbm2ddl.auto">update</property>

 

小結

hibernate: 持久層的架構!是一個開放原始碼的對象關係映射架構(OMR)!之前我們訪問資料庫使用JDBC!對JDBC進行了輕量級的對象封裝!是一個全自動ORM架構!(底層可以自動產生sql語句)!使用物件導向的思想來操作資料庫!Student  實體類Student.hbm.xml  mapping(對應檔)hibernate.cfg.xml:是整個hibernate架構的核心設定檔!01.管理mapping檔案02.整個hibernate環境的配置03.串連資料庫的四要素sql的四種語言:DDL:資料定義語言 (Data Definition Language)create    alter drop truncateDML: 資料操作語言select  insert  update delete DCL: 資料控制語言grant  revokeTCL: 事務控制語言savepoint  rollback    <!--  hbm2ddl     01.create:每次運行都會刪除上次產生的表!    02.update:沒有表會自動建立,如果有,新增資料!        欄位不一致,會按照hbm.xml檔案中的column屬性值 ,在資料庫中新增一列    03.validate:不會自動建立表,如果表存在,會新增資料!       欄位不一致,會拋出異常,說在資料庫中沒有該欄位    04.create-drop:每次運行都會刪除上次產生的表!  當sessionFactory關閉的時候,資料庫中的表自動刪除     -->    <property name="hbm2ddl.auto">update</property>oracle資料庫建立序列create  sequence   sq_student_idminvalue 1maxvalue 9999999999start with 10incrment by 1cache 20;   <id name="id">      <!--主鍵建置原則          01.assigned:                   主鍵產生的值由使用者決定,與底層資料庫沒有關係!                  在調用session.save()之前,必須給主鍵賦值,否則會拋出異常!      02.sequence:       oracle支援的主鍵建置原則!hibernate會從資料庫中取得當前的序列下一個值賦值給主鍵!                   不需要我們給主鍵賦值!           <generator class="sequence">          <param name="sequence">sq_student_id</param>        </generator>      03.identity :針對mysql資料庫的主鍵自增      04.increment:預設會在資料庫中查詢對應表中主鍵的最大值,(select max(id) from stu)                    之後把值給主鍵!          -->          <generator class="increment"/>      </id>

hibernate02環境的搭建

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.