<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 78, comments - 34, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Hibernate是由徐培成老師授課的,傳智播客的老師正是我要尋找的那種老師。有豐富的工作經(jīng)驗(yàn)和項(xiàng)目架構(gòu)經(jīng)驗(yàn)。而且他們的教學(xué)經(jīng)驗(yàn)也很豐富!老徐講課十分精細(xì),他編寫的熟練程度也很讓人吃驚!        

     

    Hibernate,以前老方在講解JAVAWEB的時候有給我們編寫過hibernate的簡易實(shí)現(xiàn)原理——一對多關(guān)系的ORM。當(dāng)時感覺hibernate并不難,今天學(xué)習(xí)其實(shí)它本來就不難。Hibernate的最困難的地方就是它的那個配置文件。因?yàn)?/span>hibernate正靠那個配置文件來進(jìn)行ORM的,也是靠這個配置文件來進(jìn)行其他的操作,比如創(chuàng)建表格,限制對表或字段的操作。

     

             為什么要使用hibernate?老徐今天舉了一個十分好的例子:如果你的表中有100個字段,使用JDBC去插入記錄、更新記錄這是非??植赖摹H绻迦牖蚋掠涗洺鲥e了呢?一個一個字段的對?想都不感想,如果以后數(shù)據(jù)庫字段要全部添加后綴名呢!~~哇哇哇,受不了了。Ok,hibernate可以很好的解決JDBC的“漏洞”。

     

             這個配置文件我把它看成是hibernate的核心!

     

             下面我來舉個簡單的例子,使用hibernate對一個DOMAIN對象進(jìn)行自動存取。

     

    1.定義一個Customerdomain,從學(xué)習(xí)數(shù)據(jù)庫至今使用顧客與訂單做的講解比較多,因?yàn)檫@種邏輯關(guān)系可以很好的闡明多表的關(guān)系,我們目前只使用一個表:

    public class Customer {

        private int id;

        private String name;

        private int gender;

        private Date birthday;

        private String email;

        private String phone;

        private String address;

    //下面是gettersetter方法

    }

     

    2.Customer的類路徑下添加hibernate的映射文件(元數(shù)據(jù)文件),映射文件名為Customer.hbm.xml,這樣在調(diào)用“ConfigurationObj. .addClass(Customer.class);hibernate框架可以自動加載它。

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE hibernate-mapping PUBLIC

        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

     

    <hibernate-mapping>

        <!--

        1.name 指定類名

        2.table 指定表名,如果忽略則默認(rèn)為類名

         -->

        <class name="cn.itcast.cc.hibernate.persistence.Customer" table="customers" lazy="false">

           <!--

           1.name OID的標(biāo)識名

           2.column 對應(yīng)表的主鍵

           3.type hibernate中的類型,對應(yīng)JAVA類型為java.lang.Integer/int,對應(yīng)SQL類型為INTEGER

            -->

           <id name="id" column="id" type="integer">

               <!--

               1.class 設(shè)置id字段為自增、主鍵

                -->

               <generator class="increment"></generator>

           </id>

           <!--

           1.name 對應(yīng)類的屬性

           2.column 對應(yīng)表的字段,如果不指定access。此處的name只為hibernate獲取讀取字段的方法。

               比如name="abcde",hibernate拼出getAbcdesetAbcde,而此時我們可以添加這兩個方法,用于實(shí)現(xiàn)特殊功能。

           3.type hibernate中的類型

           4.access hibernate直接訪問字段,而不通過gettersetter。

            -->

           <property name="name" column="name" type="string" access="field"/>

           <property name="gender" column="gender" type="integer" />

           <property name="birthday" column="birthday" type="date" />

           <property name="phone" column="phone" type="string" />

           <property name="email" column="email" type="string" />

           <property name="address" column="address" type="string" />

        </class>

    </hibernate-mapping>

     

    3.hibernate的屬性文件,使用時請將里面的中文行全部刪除:

    hibernate.connection.driver_class=com.mysql.jdbc.Driver

    hibernate.connection.url=jdbc:mysql://localhost:3306/test

    hibernate.connection.username=root

    hibernate.connection.password=root

    #hibernate使用的本地化特性,比如MySQLOracle的分頁技術(shù)不同。

    #hibernate會根據(jù)這項(xiàng)設(shè)置,自動完成分頁技術(shù)。

    hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

    #回顯SQL語句,hibernate根據(jù)元數(shù)據(jù)文件自動生成SQL語句并執(zhí)行。

    hibernate.show_sql=true

    #嚴(yán)重注意,如果指定為可以自動創(chuàng)建表,那么每次運(yùn)行hibernate都會刪除并重新創(chuàng)建表。

    hibernate.hbm2ddl.auto=create

     

     

    4.我們需要向工程中導(dǎo)入hibernate目錄下的jar文件。

             1).hibernate3.jar.

    2).lib/required/*.jar

    3).3rd/*.jar

     

    5.編寫測試類:

    import java.util.Date;

    import org.hibernate.Session;

    import org.hibernate.SessionFactory;

    import org.hibernate.Transaction;

    import org.hibernate.cfg.Configuration;

    import cn.itcast.cc.hibernate.persistence.Customer;

     

    public class Main {

        private static SessionFactory sefac = null;

        // 當(dāng)類被加載時,獲取SessionFactory。

        static {

           //創(chuàng)建Configuration時,默認(rèn)加載hibernate.properties文件。

           //也可以調(diào)用addResource方法,將配置文件加載進(jìn)來。

           Configuration config = new Configuration();

           // ORM中的O在此添加到

           config.addClass(Customer.class);

           sefac = config.buildSessionFactory();

        }

          

        public static void main(String[] args) {

           // 創(chuàng)建一個customer對象

           Customer customer = new Customer();

           customer.setName("changcheng");

           customer.setGender(1);

           customer.setBirthday(new Date());

           customer.setPhone("13998689955");

           customer.setEmail("changcheng@google.com");

           customer.setAddress("China");

           // 調(diào)用保存

           save(customer);

           // 調(diào)用查詢

           find(1);

        }

       

        private static void save(Customer customer){

           //獲取session相當(dāng)于獲取了一個連接

           Session session = sefac.openSession();

           //此處必須使用事務(wù),否則不能保存數(shù)據(jù)。

           Transaction tr = session.beginTransaction();

           //直接保存

           session.save(customer);

           //提交事務(wù)

           tr.commit();

           //關(guān)閉會話

           session.close();

        }  

       

        private static void find(Integer id){

           //獲取session相當(dāng)于獲取了一個連接

           Session session = sefac.openSession();

           Transaction tra = session.beginTransaction();

           //直接保存

           Customer customer = (Customer) session.load(Customer.class, id);

           tra.commit();

           //關(guān)閉會話

           session.close();

           System.out.println(customer);

        }

    }

     

    上面是一個簡單的hibernate例子,今天也有學(xué)習(xí)hibernate的簡介與Java對象持久化概述。什么是持久化?就是將數(shù)據(jù)保存在外存里唄。比如硬盤、U。Hibernate就是從業(yè)務(wù)邏輯層中抽取出來的持久化層!

     

             除此之外,今天有講解一對多和多對一關(guān)系的映射。就是老方之前講過的,只不過這里使用了hibernate來實(shí)現(xiàn)自動存儲。多對一需要在class元素中添加一個“many-to-one”子元素,用于指定多對一的那個屬性的類型信息等。一對多需要在class元素中添加一個“set”子元素,用于指定一對多的那個set屬性的類型信息等。在此就不一一列舉了!


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 一个人在线观看视频免费| 性无码免费一区二区三区在线 | 免费人妻av无码专区| 亚洲一区二区三区成人网站| 亚洲黄色免费在线观看| 亚洲精品午夜在线观看| 亚洲美女免费视频| 亚洲中文无码线在线观看| 日韩不卡免费视频| 亚洲综合激情五月色一区| 国产精品视频免费一区二区三区| 亚洲AV日韩AV一区二区三曲| 国产免费av片在线播放| 日本一区二区在线免费观看| 青青草国产免费久久久下载| 亚洲一级在线观看| WWW国产成人免费观看视频| 亚洲人成人网站在线观看| 国产精品免费一区二区三区| 国产亚洲AV无码AV男人的天堂| 日韩内射激情视频在线播放免费| 91大神亚洲影视在线| 免费无码A片一区二三区| 国产精品亚洲专区无码牛牛| 亚洲美女在线国产| 三年片在线观看免费| 亚洲冬月枫中文字幕在线看| 日本不卡在线观看免费v| 国产高潮流白浆喷水免费A片 | 亚洲成年轻人电影网站www| 波多野结衣免费在线观看| 亚洲A∨精品一区二区三区下载 | 久草视频在线免费| 久久人午夜亚洲精品无码区| 亚洲日韩在线第一页| h在线观看视频免费网站| 边摸边吃奶边做爽免费视频网站| 久久亚洲一区二区| 永久免费毛片手机版在线看| 免费观看一区二区三区| 色老板亚洲视频免在线观|