<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 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

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

     

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

     

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

     

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

     

             下面我來(lái)舉個(gè)簡(jiǎn)單的例子,使用hibernate對(duì)一個(gè)DOMAIN對(duì)象進(jìn)行自動(dòng)存取。

     

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

    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的類(lèi)路徑下添加hibernate的映射文件(元數(shù)據(jù)文件),映射文件名為Customer.hbm.xml,這樣在調(diào)用“ConfigurationObj. .addClass(Customer.class);hibernate框架可以自動(dòng)加載它。

    <?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 指定類(lèi)名

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

         -->

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

           <!--

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

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

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

            -->

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

               <!--

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

                -->

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

           </id>

           <!--

           1.name 對(duì)應(yīng)類(lèi)的屬性

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

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

           3.type hibernate中的類(lèi)型

           4.access hibernate直接訪問(wèn)字段,而不通過(guò)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的屬性文件,使用時(shí)請(qǐng)將里面的中文行全部刪除:

    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的分頁(yè)技術(shù)不同。

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

    hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

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

    hibernate.show_sql=true

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

    hibernate.hbm2ddl.auto=create

     

     

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

             1).hibernate3.jar.

    2).lib/required/*.jar

    3).3rd/*.jar

     

    5.編寫(xiě)測(cè)試類(lèi):

    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)類(lèi)被加載時(shí),獲取SessionFactory。

        static {

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

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

           Configuration config = new Configuration();

           // ORM中的O在此添加到

           config.addClass(Customer.class);

           sefac = config.buildSessionFactory();

        }

          

        public static void main(String[] args) {

           // 創(chuàng)建一個(gè)customer對(duì)象

           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)用查詢(xún)

           find(1);

        }

       

        private static void save(Customer customer){

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

           Session session = sefac.openSession();

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

           Transaction tr = session.beginTransaction();

           //直接保存

           session.save(customer);

           //提交事務(wù)

           tr.commit();

           //關(guān)閉會(huì)話

           session.close();

        }  

       

        private static void find(Integer id){

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

           Session session = sefac.openSession();

           Transaction tra = session.beginTransaction();

           //直接保存

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

           tra.commit();

           //關(guān)閉會(huì)話

           session.close();

           System.out.println(customer);

        }

    }

     

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

     

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


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 日本免费电影一区| 亚洲午夜国产片在线观看| 一本色道久久88亚洲综合| 亚洲色自偷自拍另类小说| 亚洲人成影院午夜网站| 曰批全过程免费视频观看免费软件| 美女视频黄a视频全免费网站色窝| 无码视频免费一区二三区| 国产午夜亚洲精品国产成人小说| 精品日韩亚洲AV无码一区二区三区| 亚洲AV日韩综合一区| 人妻丰满熟妇无码区免费| 国产乱色精品成人免费视频| 亚洲午夜免费视频| 成年网在线观看免费观看网址| 曰批全过程免费视频播放网站| 亚洲乱码中文字幕综合234| 亚洲国产精品yw在线观看| 51午夜精品免费视频| 成人网站免费观看| 亚洲va国产va天堂va久久| 久久精品国产亚洲AV天海翼| 久久久久久国产精品免费免费男同| 四虎永久在线精品免费观看地址| 亚洲国产一区在线| 一级特黄a免费大片| 好吊妞998视频免费观看在线| 亚洲一区二区三区四区在线观看| 免费国产va在线观看| 在线v片免费观看视频| 亚洲狠狠综合久久| 国产VA免费精品高清在线| 性感美女视频在线观看免费精品| 亚洲最大福利视频网站| 一级做a毛片免费视频| 全免费a级毛片免费看无码| 亚洲精品自拍视频| 国产免费拔擦拔擦8X高清在线人| 亚洲国产精品专区在线观看 | 污视频网站免费在线观看| 永久免费av无码网站韩国毛片 |