我的家園

          我的家園

                首先來(lái)說(shuō)我個(gè)人感覺(jué)這篇博客寫(xiě)的沒(méi)有絲毫的技術(shù)可言,只是代碼占據(jù)了我博文相當(dāng)長(zhǎng)的篇幅,這樣是空間的極大浪費(fèi),我個(gè)人感覺(jué)假如我是一個(gè)讀者的話我也不會(huì)去認(rèn)真的看這些代碼去,但是還是會(huì)有一種人會(huì)看這些代碼,那就是真心想通過(guò)我的博客學(xué)習(xí)Hibernate的人。為了我親愛(ài)的讀者們,我做一次無(wú)聊的事情,那就是詳細(xì)解析代碼構(gòu)造和Hibernate運(yùn)行機(jī)制。

           Hibernate的第一個(gè)實(shí)例來(lái)了解Hibernate是如何將對(duì)象實(shí)體映射成關(guān)系數(shù)據(jù)表和如何操作數(shù)據(jù)庫(kù)。

          項(xiàng)目實(shí)例

          1、創(chuàng)建java項(xiàng)目

                 

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

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

          4.建立實(shí)體類(lèi)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文件,完成實(shí)體類(lèi)的映射

          <?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>

          注:標(biāo)題4和標(biāo)題5通過(guò)實(shí)體類(lèi)和實(shí)體類(lèi)映射文件形成數(shù)據(jù)庫(kù)中的字段,id采用的系統(tǒng)自動(dòng)分配唯一主鍵,其余的都是屬性字段。

          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這是配置數(shù)據(jù)庫(kù)的基本信息,下面的dialect是適配數(shù)據(jù)庫(kù),mapping resource 指向的是實(shí)體類(lèi)。

          7、編寫(xiě)工具類(lèi)ExoprtDB.java,hbm生成ddl,也就是hbm2ddl

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

          8、建立客戶端類(lèi)Client,添加用戶數(shù)據(jù)到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();
             //開(kāi)啟事務(wù)
             session.beginTransaction();
             User user = new User();
             user.setName("張三");
             user.setPassword("123");
             user.setCreateTime(new Date());
             user.setExpireTime(new Date());
             //保存User對(duì)象
             session.save(user);
             //提交事務(wù)
             session.getTransaction().commit();
            }catch(Exception e) {
             e.printStackTrace();
             //回滾事務(wù)
             session.getTransaction().rollback();
            }finally {
             if (session != null) {
              if (session.isOpen()) {
               //關(guān)閉session
               session.close();
              }
             }
            }
           }
          }

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

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

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

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

          解析

             第一個(gè)實(shí)例的運(yùn)行原理解析:

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

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

                       3.通過(guò)config.buildSessionFactory(); //創(chuàng)建SessionFactory

                       4.sessionFactory.openSession();//打開(kāi)

                       5.session.beginTransaction();//創(chuàng)建事務(wù)

                       6.persistent operate持久化操作

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

                       8.關(guān)閉Session

                       9.關(guān)閉SessionFactory

           總結(jié)

             通過(guò)這個(gè)實(shí)例的演示,相比大家也能體會(huì)到Hibernate的好處吧!

                      1.對(duì)JDBC訪問(wèn)數(shù)據(jù)庫(kù)的代碼做了封裝,大大簡(jiǎn)化了數(shù)據(jù)訪問(wèn)層繁瑣的重復(fù)代碼

                      2.Hibernate是一個(gè)基于JDBC的主流持久化框架,是一個(gè)優(yōu)秀的ORM。很大程度上簡(jiǎn)化了DAO的編碼工作。

                      3.hibernate使用java反射機(jī)制,而不是字節(jié)碼增強(qiáng)程序來(lái)實(shí)現(xiàn)透明性。

                      4.hibernate的性能非常好,因?yàn)樗且粋€(gè)輕量級(jí)框架。映射的靈活性很出色。它支持各種關(guān)系數(shù)據(jù)庫(kù),從一對(duì)一到多對(duì)多的各種復(fù)雜關(guān)系。

                  希望大家通過(guò)第一實(shí)例體會(huì)一下Hibernate的面向?qū)ο笏枷刖幊蹋院笪覀兺ㄟ^(guò)uml對(duì)象圖和關(guān)于實(shí)體類(lèi)映射文件的主要內(nèi)容進(jìn)行演示,以后不會(huì)再詳細(xì)演示代碼。


                  關(guān)于Hibernate如何將對(duì)象化的思維操作數(shù)據(jù)庫(kù)模型,請(qǐng)繼續(xù)關(guān)注我的博客,我會(huì)一一進(jìn)行詳盡的解析。 


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 商河县| 中卫市| 五指山市| 繁昌县| 旅游| 福鼎市| 龙胜| 磐安县| 罗源县| 阆中市| 新巴尔虎左旗| 吴忠市| 平安县| 靖边县| 宣威市| 陆川县| 安顺市| 顺昌县| 崇明县| 民丰县| 万源市| 漳平市| 丰原市| 四川省| 仙游县| 晴隆县| 九台市| 陕西省| 弋阳县| 米林县| 庐江县| 贺兰县| 吴桥县| 亳州市| 北海市| 黄龙县| 海晏县| 贺兰县| 永德县| 兴安县| 合江县|