我的家園

          我的家園

                首先來說我個人感覺這篇博客寫的沒有絲毫的技術可言,只是代碼占據了我博文相當長的篇幅,這樣是空間的極大浪費,我個人感覺假如我是一個讀者的話我也不會去認真的看這些代碼去,但是還是會有一種人會看這些代碼,那就是真心想通過我的博客學習Hibernate的人。為了我親愛的讀者們,我做一次無聊的事情,那就是詳細解析代碼構造和Hibernate運行機制。

           Hibernate的第一個實例來了解Hibernate是如何將對象實體映射成關系數據表和如何操作數據庫。

          項目實例

          1、創建java項目

                 

           注:src文件夾下是hibernate文件夾(子文件:Client.javaExportDB.javaUser.javaUser.hbm.xml實體類映射文件)、hibernate.cfg.xml系統配置文件和log4j.properites文件

          2、創建User Library,加入依賴包,可以自己研究一下,也可以直接下載直接加載進去。
          * HIBERNATE_HOME/lib/*.jar
          * HIBERNATE_HOME/hibernate3.jar
          * 加入數據庫驅動(mysql驅動)
          3、提供hibernate.cfg.xml文件,完成基本的配置

          4.建立實體類User.java

          import java.util.Date;
          public class User {
           private String id;
           private String name;
           private String password;
           private Date createTime;
           private Date expireTime;
           public String getId() {
            return id;
           }
           public void setId(String id) {
            this.id = id;
           }
           public String getName() {
            return name;
           }
           public void setName(String name) {
            this.name = name;
           }
           public String getPassword() {
            return password;
           }
           public void setPassword(String password) {
            this.password = password;
           }
           public Date getCreateTime() {
            return createTime;
           }
           public void setCreateTime(Date createTime) {
            this.createTime = createTime;
           }
           public Date getExpireTime() {
            return expireTime;
           }
           public void setExpireTime(Date expireTime) {
            this.expireTime = expireTime;
           }
          }

          5、提供User.hbm.xml文件,完成實體類的映射

          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC 
           "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
          <hibernate-mapping>
           <class name="com.bjpowernode.hibernate.User">
            <id name="id">
             <generator class="uuid"/>
            </id>
            <property name="name"/>
            <property name="password"/>
            <property name="createTime"/>
            <property name="expireTime"/>
           </class>
          </hibernate-mapping>

          注:標題4和標題5通過實體類和實體類映射文件形成數據庫中的字段,id采用的系統自動分配唯一主鍵,其余的都是屬性字段。

          6、將User.hbm.xml文件加入到hibernate.cfg.xml文件中

          <!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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
            <property name="hibernate.connection.username">root</property>
            <property name="hibernate.connection.password">bjpowernode</property>
            <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
            <property name="hibernate.show_sql">true</property>
            <!-- 
            <property name="hibernate.format_sql">true</property>
             -->
            <mapping resource="com/bjpowernode/hibernate/User.hbm.xml"/>
           </session-factory>
          </hibernate-configuration>

          注:大家看到driver_classurlusernamepassword這是配置數據庫的基本信息,下面的dialect是適配數據庫,mapping resource 指向的是實體類。

          7、編寫工具類ExoprtDB.java,hbm生成ddl,也就是hbm2ddl

          /**
           * 將hbm生成ddl
           * 
          @author Administrator
           *
           
          */
          public class ExportDB {
           public static void main(String[] args) {
            //默認讀取hibernate.cfg.xml文件
            Configuration cfg = new Configuration().configure();
            SchemaExport export = new SchemaExport(cfg);
            export.create(truetrue);
           }
          }

          8、建立客戶端類Client,添加用戶數據到mysql

          public class Client {
           public static void main(String[] args) {
            //讀取hibernate.cfg.xml文件
            Configuration cfg = new Configuration().configure();
            //建立SessionFactory
            SessionFactory factory = cfg.buildSessionFactory();
            //取得session
            Session session = null;
            try {
             session = factory.openSession();
             //開啟事務
             session.beginTransaction();
             User user = new User();
             user.setName("張三");
             user.setPassword("123");
             user.setCreateTime(new Date());
             user.setExpireTime(new Date());
             //保存User對象
             session.save(user);
             //提交事務
             session.getTransaction().commit();
            }catch(Exception e) {
             e.printStackTrace();
             //回滾事務
             session.getTransaction().rollback();
            }finally {
             if (session != null) {
              if (session.isOpen()) {
               //關閉session
               session.close();
              }
             }
            }
           }
          }

          注:最好加入如下配置項,方便觀察hibernate sql的生成:

          <property name="hibernate.show_sql">true</property>

          <property name="hibernate.format_sql">true</property>

          最好加入log4j配置文件,將該配置文件拷貝到src下,便于程序的調試

          解析

             第一個實例的運行原理解析:

                      1.通過Configuration().configure();//讀取并解析hibernate.cfg.xml配置文件

                       2.hibernate.cfg.xml<mapping resource ="com/bjpowernode/hibernate/User.hbm.xml"/>

                       3.通過config.buildSessionFactory(); //創建SessionFactory

                       4.sessionFactory.openSession();//打開

                       5.session.beginTransaction();//創建事務

                       6.persistent operate持久化操作

                       7.session.getTransaction().commit();//提交事務

                       8.關閉Session

                       9.關閉SessionFactory

           總結

             通過這個實例的演示,相比大家也能體會到Hibernate的好處吧!

                      1.JDBC訪問數據庫的代碼做了封裝,大大簡化了數據訪問層繁瑣的重復代碼

                      2.Hibernate是一個基于JDBC的主流持久化框架,是一個優秀的ORM。很大程度上簡化了DAO的編碼工作。

                      3.hibernate使用java反射機制,而不是字節碼增強程序來實現透明性。

                      4.hibernate的性能非常好,因為它是一個輕量級框架。映射的靈活性很出色。它支持各種關系數據庫,從一對一到多對多的各種復雜關系。

                  希望大家通過第一實例體會一下Hibernate的面向對象思想編程,以后我們通過uml對象圖和關于實體類映射文件的主要內容進行演示,以后不會再詳細演示代碼。


                  關于Hibernate如何將對象化的思維操作數據庫模型,請繼續關注我的博客,我會一一進行詳盡的解析。 


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 邯郸市| 佳木斯市| 天祝| 珠海市| 巨野县| 济阳县| 孟连| 汉寿县| 镇康县| 田东县| 黔东| 介休市| 涟水县| 图们市| 莲花县| 永吉县| 航空| 丽江市| 凭祥市| 泰州市| 精河县| 镇坪县| 射洪县| 栖霞市| 晋中市| 湛江市| 长宁区| 上蔡县| 通州区| 定陶县| 仲巴县| 东辽县| 寻乌县| 五指山市| 罗城| 承德市| 顺平县| 崇明县| 蒙阴县| 渝北区| 泸溪县|