真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Hibernate3.6應(yīng)用的示例分析

本篇文章給大家分享的是有關(guān)Hibernate3.6應(yīng)用的示例分析,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比布爾津網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式布爾津網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋布爾津地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。

Hibernate是一個(gè)非常著名的的對(duì)象--關(guān)系映射工具,使用的是Hibernate3.6的版本。本文通過建立一個(gè)工程,來引導(dǎo)大家學(xué)習(xí) hibernate,對(duì)hibernate有個(gè)認(rèn)識(shí)。有些代碼、概念不清楚沒關(guān)系,后文會(huì)慢慢的介紹。

首先建立一個(gè)Web Project,然后在WEB-INF/lib下添加相關(guān)的jar包。項(xiàng)目結(jié)構(gòu)如下圖1所示。jar包介紹如下:

Hibernate3.6應(yīng)用的示例分析

圖1

hibernate-distribution-3.6.0.Final-dist\hibernate-distribution-3.6.0.Final\lib\required 目錄下相應(yīng)的jar包:

  • antlr-2.7.6.jar:HQL-->SQL的轉(zhuǎn)換

  • commons-collections-3.1.jar:Apache的集合類工具

  • dom4j.jar:解析XML文檔

  • hibernate3.jar:hibernate核心API實(shí)現(xiàn)

  • javassist-3.12.0.GA.jar:動(dòng)態(tài)Java代碼生成工具

  • jta-1.1.jar:標(biāo)準(zhǔn)的Java事務(wù)處理接口

  • slf4j-api-1.6.1.jar:日志管理API

  • slf4j-nop-1.6.1.jar:日志管理。

一、持久化類如下:

Customer.java

package com.yaxing.entity;       import java.util.HashSet;    import java.util.Set;    /**     * 顧客類     * */   public class Customer {        private Long id;        private String name;        private Set orders = new HashSet();           public Long getId() {            return id;        }           public void setId(Long id) {            this.id = id;        }           public String getName() {            return name;        }           public void setName(String name) {            this.name = name;        }           public Set getOrders() {            return orders;        }           public void setOrders(Set orders) {            this.orders = orders;        }       }

Order.java

package com.yaxing.entity;    /**     * 訂單類     * */   public class Order {        private Long id;        private Customer customer;        private String orderNumber;           public Long getId() {            return id;        }           public void setId(Long id) {            this.id = id;        }           public Customer getCustomer() {            return customer;        }           public void setCustomer(Customer customer) {            this.customer = customer;        }           public String getOrderNumber() {            return orderNumber;        }           public void setOrderNumber(String orderNumber) {            this.orderNumber = orderNumber;        }       }

說明如下:這是一種典型的一對(duì)多的關(guān)聯(lián)關(guān)系。即一個(gè)客戶會(huì)有多個(gè)訂單,而一個(gè)訂單必然會(huì)屬于一個(gè)客戶,因此對(duì)于一個(gè)訂單來說,如果其客戶不存在,則此訂單是沒有任何意義的。這里設(shè)置的是雙向的關(guān)聯(lián)關(guān)系。因?yàn)榭赡軜I(yè)務(wù)中會(huì)存在大量的這樣的需求:

  • 查詢客戶的所有訂單

  • 根據(jù)所給的訂單,查詢訂單所屬的客戶

類與類之間建立關(guān)聯(lián)關(guān)系,可以很方便的從一個(gè)對(duì)象導(dǎo)航到另外一個(gè)對(duì)象,建立關(guān)系如下:

/**     * 訂單類     * */   public class Order {        private Long id;        private Customer customer;             //...    }

這樣就從order對(duì)象導(dǎo)航到了customer對(duì)象,從order對(duì)象到customer對(duì)象的導(dǎo)航如下:即給定了order對(duì)象,獲得了與他所關(guān)聯(lián)的costomer對(duì)象。

Customer customer = order.getCustomer();

那么對(duì)于給定的costomer對(duì)象,如何從customer對(duì)象導(dǎo)航到order對(duì)象呢?因?yàn)閏ustomer對(duì)象里面包含一組order,即一個(gè)客戶會(huì)存在多個(gè)訂單。

因此對(duì)于給定的客戶,要查詢所有的訂單,代碼如下:

返回的是一個(gè)Set集合。

customer.getOrders();//返回一個(gè)set集合,用迭代器訪問。

關(guān)于集合類的操作,也不是本文的內(nèi)容,讀者可以參考其他文章。不清楚的,可以本文后面留言。

二、數(shù)據(jù)庫和配置文件

建立的數(shù)據(jù)庫如圖2所示下:

Hibernate3.6應(yīng)用的示例分析

圖2

注意,Id都是自增numeric類型。這里的Orders表的取名問題:因?yàn)閛rder 是關(guān)鍵字,作為表名的時(shí)候,會(huì)報(bào)錯(cuò)的,Sql Server 中對(duì)關(guān)鍵字作為表名字段名的處理是:使用的時(shí)候加上中括號(hào)[],有時(shí)開發(fā)中也沒注意到這點(diǎn),判斷錯(cuò)誤起來也麻煩,關(guān)于這點(diǎn),參見博客另外一篇文章:因使用關(guān)鍵字做為表名引起的Hibernate報(bào)錯(cuò)。

配置文件如下:Customer.hbm.xml

                                                                                                                                              

說明如下:

元素指定類和表的映射,如果沒有指定table屬性,則hibernate將類名做為表名。一個(gè)包括一個(gè)子元素和多個(gè)子元素。

元素設(shè)定持久化類的OID(Object Identifier)和表的主鍵的映射,上述配置代碼表示Customer類的id屬性和Customer表的Id字段對(duì)應(yīng)。

元素的子元素用于指定對(duì)象標(biāo)識(shí)符生成器,它負(fù)責(zé)為OID生成唯一標(biāo)識(shí)符。后文將介紹常見的對(duì)象標(biāo)識(shí)符生成器的介紹。本文使用的是 native表示hibernate根據(jù)底層數(shù)據(jù)庫來選擇。

子元素設(shè)定類的屬性和表的字段的映射,常見的屬性包括

  • name:指定持久化類的屬性的名字

  • type:指定hibernate映射類型,hibernate映射類型是在java類型和Sql類型之間的一個(gè)橋梁。比如 java.lang.String 對(duì)應(yīng) type則為string。詳細(xì)情況可以參見三者之間的對(duì)應(yīng)關(guān)系。如果沒有為某個(gè)屬性設(shè)置映射類型,hibernate會(huì)利用java的放射機(jī)制先識(shí)別出持久化類的屬性的java的類型,然后自動(dòng)使用與之對(duì)應(yīng)的hibernate映射類型。

  • column:指定與持久化類的屬性映射的表的字段名,上述代碼表示Customer類的name屬性對(duì)應(yīng)的是Customer表的Name字段。

  • not-null:是否允許為空,默認(rèn)為false。程序中經(jīng)常碰到為空的異常,此處的配置需特別引起注意!

  • 元素:表示Customer類的orders屬性為Set集合,表示orders里面存放的是一組Order對(duì)象,表示數(shù)據(jù)庫中Orders表通過外鍵CustomerId參照Customer表。表示級(jí)聯(lián)保存,默認(rèn)為none,取值可以有all 、save-update 、delete、delete-orphan ,各參數(shù)具體的含義后文有介紹。

Order.hbm.xml

                                                                                     

說明:表示 建立了customer屬性和Orders表的外鍵CustomerId之間的映射,name為持久化類的屬性的名字,column為持久化類的屬性對(duì)應(yīng)的表的外鍵CustomerId,class為持久化類的屬性的類型,not-null表示是否允許為空,默認(rèn)值為false.lazy是hibernate的檢索策略,后文將有介紹。

三、測(cè)試代碼和測(cè)試結(jié)果

CustomerAction.java

package com.yaxing.test;       import java.util.Iterator;    import java.util.List;       import org.hibernate.Query;    import org.hibernate.Session;    import org.hibernate.Transaction;       import com.yaxing.entity.Customer;    import com.yaxing.util.HibernateUtil;       public class CustomerAction {        private Customer customer;        private List listCustomer;           public Customer getCustomer() {            return customer;        }           public void setCustomer(Customer customer) {            this.customer = customer;        }           public List getListCustomer() {            return listCustomer;        }           public void setListCustomer(List listCustomer) {            this.listCustomer = listCustomer;        }        /**         * 添加客戶         * */       public void addCustomer(Customer customer) {            Session s = null;            Transaction tx = null;            try {                s = HibernateUtil.getSession();                tx = s.beginTransaction();                s.save(customer);                tx.commit();            }catch(Exception e){                if(tx!=null){                    tx.rollback();                }                e.printStackTrace();            }finally{                if(s!=null){                    s.close();                }               }        }        /**         * 刪除客戶         * */       public void deleteCustomer(Customer customer) {            Session s = null;            Transaction tx = null;            try {                s = HibernateUtil.getSession();                tx = s.beginTransaction();                s.delete(customer);                tx.commit();            }catch(Exception e){                if(tx!=null){                    tx.rollback();                }                e.printStackTrace();            }finally{                if(s!=null){                    s.close();                }               }        }        /**         * 更新客戶         * */       public void update(Customer customer,String name) {            Session s = null;            Transaction tx = null;            try {                s = HibernateUtil.getSession();                tx = s.beginTransaction();                customer.setName(name);                s.update(customer);                tx.commit();            }catch(Exception e){                if(tx!=null){                    tx.rollback();                }                e.printStackTrace();            }finally{                if(s!=null){                    s.close();                }               }        }        /**         * 查詢客戶         * */       public Customer findCustomer(Long id) {            Session s = null;            Transaction tx = null;            try {                s = HibernateUtil.getSession();                tx = s.beginTransaction();                customer = (Customer) s.get(Customer.class, id);                tx.commit();            }catch(Exception e){                if(tx!=null){                    tx.rollback();                }                e.printStackTrace();            }finally{                if(s!=null){                    s.close();                }               }            return customer;        }        /**         * 查找所有的客戶         * */       public List findAll() {            Session s = null;            Transaction tx = null;            try {                s = HibernateUtil.getSession();                tx = s.beginTransaction();                Query query = s.createQuery("from Customer as a order by id asc");                listCustomer = query.list();                for(Iterator iter=listCustomer.iterator();iter.hasNext();){                    Customer customer = (Customer) iter.next();                    System.out.println("客戶ID是:"+customer.getId()+"客戶姓名是:"+customer.getName());                }                   tx.commit();            }catch(Exception e){                if(tx!=null){                    tx.rollback();                }                e.printStackTrace();            }finally{                if(s!=null){                    s.close();                }               }            return listCustomer;        }    }

OrderAction.java的代碼和Customer.java代碼類似。

package com.yaxing.test;       import java.util.Iterator;    import java.util.List;       import org.hibernate.Query;    import org.hibernate.Session;    import org.hibernate.Transaction;       import com.yaxing.entity.Order;    import com.yaxing.util.HibernateUtil;       public class OrderAction {        private Order order;        private List listorder;           public Order getorder() {            return order;        }           public void setorder(Order order) {            this.order = order;        }           public List getListorder() {            return listorder;        }           public void setListorder(List listorder) {            this.listorder = listorder;        }           public void addorder(Order order) {            Session s = null;            Transaction tx = null;            try {                s = HibernateUtil.getSession();                tx = s.beginTransaction();                s.save(order);                tx.commit();            }catch(Exception e){                if(tx!=null){                    tx.rollback();                }                e.printStackTrace();            }finally{                if(s!=null){                    s.close();                }               }        }        /**         * 刪除用戶         * */       public void deleteorder(Order order) {            Session s = null;            Transaction tx = null;            try {                s = HibernateUtil.getSession();                tx = s.beginTransaction();                s.delete(order);                tx.commit();            }catch(Exception e){                if(tx!=null){                    tx.rollback();                }                e.printStackTrace();            }finally{                if(s!=null){                    s.close();                }               }        }           public void update(Order order,String number) {            Session s = null;            Transaction tx = null;            try {                s = HibernateUtil.getSession();                tx = s.beginTransaction();                order.setOrderNumber(number);                s.update(order);                tx.commit();            }catch(Exception e){                if(tx!=null){                    tx.rollback();                }                e.printStackTrace();            }finally{                if(s!=null){                    s.close();                }               }        }           public Order findorder(Long id) {            Session s = null;            Transaction tx = null;            try {                s = HibernateUtil.getSession();                tx = s.beginTransaction();                order = (Order) s.get(Order.class, id);                tx.commit();            }catch(Exception e){                if(tx!=null){                    tx.rollback();                }                e.printStackTrace();            }finally{                if(s!=null){                    s.close();                }               }            return order;        }           public List findAll() {            Session s = null;            Transaction tx = null;            try {                s = HibernateUtil.getSession();                tx = s.beginTransaction();                Query query = s.createQuery("from Order as a order by id asc");                listorder = query.list();                for(Iterator iter=listorder.iterator();iter.hasNext();){                    Order order = (Order) iter.next();                    System.out.println("訂單ID是:"+order.getId()+"訂單數(shù)目是:"+order.getOrderNumber());                }                   tx.commit();            }catch(Exception e){                if(tx!=null){                    tx.rollback();                }                e.printStackTrace();            }finally{                if(s!=null){                    s.close();                }               }            return listorder;        }    }

HibernateUtil.java如下:

package com.yaxing.hibernate.util;       import org.hibernate.Session;    import org.hibernate.SessionFactory;    import org.hibernate.cfg.Configuration;       public final class HibernateUtil {        private static SessionFactory sessionFactory;        private HibernateUtil(){                    }        static {            Configuration cfg = new Configuration();            cfg.configure();            sessionFactory=cfg.buildSessionFactory();        }        public static SessionFactory getSessionFactory() {            return sessionFactory;        }        public static Session getSession(){            return sessionFactory.openSession();        }       }

測(cè)試代碼如下:

package com.yaxing.test;       import com.yaxing.entity.Customer;       public class Test {        public  static void main(String args[]){            Customer customer = new Customer();            customer.setName("51CTO");            CustomerAction ca = new CustomerAction();            /**             * 添加對(duì)象             * */           ca.addCustomer(customer);    }

允許之后,打印出來的SQL語句如下:

Hibernate:         insert         into           Customer            (Name)         values           (?)

接下來,我們到數(shù)據(jù)庫中看看記錄被插入進(jìn)來了沒有:

Hibernate3.6應(yīng)用的示例分析

圖3

可以看到,如圖3所示,記錄插入成功!

接下來我們看看查詢所有的:

/**             * 查詢所有             * */           ca.findAll();

輸出:

Hibernate:         select           customer0_.Id as Id1_,            customer0_.Name as Name1_         from           Customer customer0_         order by           customer0_.Id asc   客戶ID是:2客戶姓名是:null   客戶ID是:4客戶姓名是:51CTO    客戶ID是:5客戶姓名是:51CTO    客戶ID是:6客戶姓名是:51CTO    客戶ID是:7客戶姓名是:51CTO    客戶ID是:8客戶姓名是:51CTO

接下來,我們刪除剛測(cè)試的ID為8的記錄,

/**             * 刪除指定對(duì)象             * */           Customer customer = ca.findCustomer(8L);            ca.deleteCustomer(customer);

運(yùn)行的SQL語句如下:

Hibernate:         select           customer0_.Id as Id1_0_,            customer0_.Name as Name1_0_         from           Customer customer0_         where           customer0_.Id=?    Hibernate:         select           orders0_.CustomerId as CustomerId1_1_,            orders0_.Id as Id1_,            orders0_.Id as Id0_0_,            orders0_.OrderNumber as OrderNum2_0_0_,            orders0_.CustomerId as CustomerId0_0_         from           Orders orders0_         where           orders0_.CustomerId=?    Hibernate:         delete         from           Customer         where           Id=?

可以查看下,Id為8的記錄刪除了!

最后來個(gè)級(jí)聯(lián)保存的:

/**             * 保存訂單             * 級(jí)聯(lián)保存             * */           Customer customer = new Customer();            customer.setName("google");            ca.addCustomer(customer);            Order order = new Order();            order.setOrderNumber("5箱");            order.setCustomer(customer);            oa.addorder(order);

執(zhí)行的SQL語句如下:

Hibernate:         insert         into           Customer            (Name)         values           (?)    Hibernate:         insert         into           Orders            (OrderNumber, CustomerId)         values           (?, ?)    Hibernate:         update           Customer         set           Name=?         where           Id=?

可以查看下記錄:

Hibernate3.6應(yīng)用的示例分析

最后帖上hibernate的配置代碼:

                                          org.hibernate.dialect.SQLServerDialect                                      jdbc:jtds:sqlserver://server:1434/hibernateTest                       sa           711                          net.sourceforge.jtds.jdbc.Driver                       true           true           jtds                                   

以上就是Hibernate3.6應(yīng)用的示例分析,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站名稱:Hibernate3.6應(yīng)用的示例分析
當(dāng)前URL:http://weahome.cn/article/ghieod.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部