J度空間

          myeclipse試用小記----多對(duì)一單向關(guān)聯(lián)(1)

          轉(zhuǎn)自:http://lavasoft.blog.51cto.com/62575/d-5


          說明:一個(gè)客戶可以對(duì)應(yīng)多個(gè)訂單。以此為例說明用myeclipse如何來實(shí)現(xiàn)這個(gè)應(yīng)用,看看myeclipse是如何做的,生成配置文件質(zhì)量如何。

           

          環(huán)境

          開發(fā)工具:myeclipse 5.5.1 GA

          數(shù) 據(jù) 庫:mysql-5.0.37

          操作系統(tǒng):windows xp professional 中文版

           

          步驟

          1、建立mysql5數(shù)據(jù)庫testdb,腳本下面已經(jīng)給出。

          2、配置myeclipse的數(shù)據(jù)庫服務(wù)器,并建立名稱為mysql5的數(shù)據(jù)庫鏈接。

          3、建議myeclipseweb工程,名稱為dx_d2y,并加入hibernate支持,選擇hibernate3.1,最高就支持到3.1

          4、在myeclipse的數(shù)據(jù)庫視圖中鏈接數(shù)據(jù)庫并通過表生成實(shí)體PO和配置文件,中間不生成DAO

          5、檢查配置文件的正確性,然后測試類進(jìn)行測試。

           

           

          一、建立數(shù)據(jù)庫的腳本:

           

          alter table orders drop foreign key fk_order_customer;

          drop table if exists customers;

          drop table if exists orders;

          create table customers (

             id bigint not null,

             name varchar(15),

             primary key (id)

          );

          create table orders (

             id bigint not null,

             order_number varchar(15),

             customer_id bigint not null,

             primary key (id)

          );

          alter table orders add index fk_order_customer(customer_id), add constraint fk_order_customer foreign key (customer_id) references customers (id);

           

          表關(guān)系的邏輯圖:

          +-----------+                    +--------------+

          | customers |                    | oreders      |

          +-----------+                    +--------------+

          | ID        |<------|            | ID           |

          | NAME      |       |            | ORDER_NUMBER |

          +-----------+       |------------| CUSTOMER_ID  |

                                           +--------------+

           

          特別注意:因?yàn)橛型怄I約束,需要事務(wù)支持,在安裝數(shù)據(jù)庫的時(shí)候,需要配置mysql數(shù)據(jù)庫服務(wù)器的參數(shù)。數(shù)據(jù)庫的引擎應(yīng)該用InnoDB,關(guān)閉了自動(dòng)提交模式,也就是SET AUTOCOMMIT=0

           

          my.ini

          ------------------------------------

          #[WinMySQLAdmin]

          #Server=D:/mysql-5.0.37-win32/bin/mysqld.exe

           

          [mysqld]

          # set basedir to your installation path

          #basedir=D:/mysql-5.0.37-win32

          # set datadir to the location of your data directory

          port = 3306

          key_buffer = 16K

          max_allowed_packet = 1M

          table_cache = 4

          sort_buffer_size = 64K

          read_buffer_size = 256K

          read_rnd_buffer_size = 256K

          net_buffer_length = 2K

          thread_stack = 64K

          datadir=data

          default-character-set=gbk

          init_connect='SET AUTOCOMMIT=0'

          default-table-type=InnoDB

          init_connect='set completion_type=1'

           

          [client]

          default-character-set=gbk

          ------------------------------------

          二、通過myeclipse生成實(shí)體和配置文件:
          //Customers.java

          public
           class Customers implements java.io.Serializable {
           
              
          // Fields
           
              
          private Long id;
           
              
          private String name;
           
              
          // Constructors
           
              
          /** default constructor */
              
          public Customers() {
              }
           
              
          /** full constructor */
              
          public Customers(String name) {
                  
          this.name = name;
              }
           
              
          // Property accessors
           
              
          public Long getId() {
                  
          return this.id;
              }
           
              
          public
           void setId(Long id) {
                  
          this
          .id = id;
              }
           
              
          public String getName() {
                  
          return
           this.name;
              }
           
              
          public
           void setName(String name) {
                  
          this
          .name = name;
              }
          }

          //Orders.java

          public
           class Orders implements java.io.Serializable {
           
              
          // Fields
           
              
          private Long id;
           
              
          private Customers customers;
           
              
          private String orderNumber;
           
              
          // Constructors
           
              
          /** default constructor */
              
          public Orders() {
              }
           
              
          /** minimal constructor */
              
          public Orders(Customers customers) {
                  
          this.customers = customers;
              }
           
              
          /** full constructor */
              
          public Orders(Customers customers, String orderNumber) {
                  
          this.customers = customers;
                  
          this.orderNumber = orderNumber;
              }
           
              
          // Property accessors
           
              
          public Long getId() {
                  
          return this.id;
              }
           
              
          public void setId(Long id) {
                  
          this.id = id;
              }
           
              
          public Customers getCustomers() {
                  
          return this.customers;
              }
           
              
          public void setCustomers(Customers customers) {
                  
          this.customers = customers;
              }
           
              
          public String getOrderNumber() {
                  
          return this.orderNumber;
              }
           
              
          public void setOrderNumber(String orderNumber) {
                  
          this.orderNumber = orderNumber;
              }
           
          }

          Customers.hbm.xml

          <?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"
          >
          <!--
              Mapping file autogenerated by MyEclipse Persistence Tools
          -->
          <
          hibernate-mapping>
              
          <
          class name="org.lavasoft.Customers" table="customers">
                  
          <
          id name="id" type="java.lang.Long">
                      
          <
          column name="ID" />
                      
          <
          generator class="increment" />
                  
          </
          id>
                  
          <
          property name="name" type="java.lang.String">
                      
          <
          column name="NAME" length="15" />
                  
          </
          property>
              
          </
          class>
          </
          hibernate-mapping>

          Orders.hbm.xml
          <?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"
          >
          <!--
              Mapping file autogenerated by MyEclipse Persistence Tools
          -->
          <hibernate-mapping>
              
          <class name="org.lavasoft.Orders" table="orders">
                  
          <id name="id" type="java.lang.Long">
                      
          <column name="ID" />
                      
          <generator class="increment" />
                  
          </id>
                  
          <many-to-one name="customers" class="org.lavasoft.Customers" fetch="select" cascade="save-update">
                      
          <column name="CUSTOMER_ID" not-null="true" />
                  
          </many-to-one>
                  
          <property name="orderNumber" type="java.lang.String">
                      
          <column name="ORDER_NUMBER" length="15" />
                  
          </property>
              
          </class>
          </hibernate-mapping>

          三、寫測試類進(jìn)行測試:
          import org.hibernate.HibernateException;
          import org.hibernate.Session;
          import org.hibernate.Transaction;
           
          public class Test {
           
              
          /**
               * 
          @param args
               
          */
              
          public
           static void main(String[] args) {
                  
          // TODO Auto-generated method stub
                  
          //if(HibernateSessionFactory.getSession()==null)System.out.println("null");
           
                  Session session
          =HibernateSessionFactory.getSession();
           
                  Transaction tx
          =session.beginTransaction();
           
                  Customers c
          =new Customers("c1");
                  Orders o1 
          =new Orders();
                  o1.setOrderNumber(
          "11");
                  Orders o2 
          =new Orders();
                  o2.setOrderNumber(
          "22");   
           
                  o1.setCustomers(c);
                  o2.setCustomers(c);
                 
                  
          try {
                      session.save(o1);
                      session.save(o2);
                      tx.commit();
                  } 
          catch (HibernateException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                      tx.rollback();
                  }
          finally{
                      session.close();
                  }
                 
              }
          }

          四、運(yùn)行測試類Test,控制臺(tái)打印信息:

          ------------------------------------------

          Hibernate: select max(ID) from orders

          Hibernate: select max(ID) from customers

          Hibernate: insert into customers (NAME, ID) values (?, ?)

          Hibernate: insert into orders (CUSTOMER_ID, ORDER_NUMBER, ID) values (?, ?, ?)

          Hibernate: insert into orders (CUSTOMER_ID, ORDER_NUMBER, ID) values (?, ?, ?)

           

           

          查看數(shù)據(jù)庫:

          ------------------------------------------

          D:\mysql-5.0.37-win32\bin>mysql -uroot -pleizhimin

          Welcome to the MySQL monitor.  Commands end with ; or \g.

          Your MySQL connection id is 10

          Server version: 5.0.37-community MySQL Community Edition (GPL)

           

          Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

           

          mysql> use testdb;

          Database changed

          mysql> describe customers;

          +-------+-------------+------+-----+---------+-------+

          | Field | Type        | Null | Key | Default | Extra |

          +-------+-------------+------+-----+---------+-------+

          | ID    | bigint(20)  | NO   | PRI |         |       |

          | NAME  | varchar(15) | YES  |     | NULL    |       |

          +-------+-------------+------+-----+---------+-------+

          2 rows in set (0.00 sec)

           

          mysql> describe orders;

          +--------------+-------------+------+-----+---------+-------+

          | Field        | Type        | Null | Key | Default | Extra |

          +--------------+-------------+------+-----+---------+-------+

          | ID           | bigint(20)  | NO   | PRI |         |       |

          | ORDER_NUMBER | varchar(15) | YES  |     | NULL    |       |

          | CUSTOMER_ID  | bigint(20)  | NO   | MUL |         |       |

          +--------------+-------------+------+-----+---------+-------+

          3 rows in set (0.01 sec)

           

          mysql> select * from customers;

          +----+------+

          | ID | NAME |

          +----+------+

          |  1 | c1   |

          +----+------+

          1 row in set (0.00 sec)

           

          mysql> select * from orders;

          +----+--------------+-------------+

          | ID | ORDER_NUMBER | CUSTOMER_ID |

          +----+--------------+-------------+

          |  1 | 11           |           1 |

          |  2 | 22           |           1 |

          +----+--------------+-------------+

          2 rows in set (0.00 sec)

           

          mysql>

           

          總結(jié): 從上面過程可以看出,myeclipse實(shí)現(xiàn)這個(gè)單向多對(duì)一的過程非常的簡單,雖然是自動(dòng)生成的SessionFactory hibernate.cfg.xml但是沒有一點(diǎn)問題。這就省去了大量的工作量。并且生成的映射文件和實(shí)體Bean(也叫PO,有很多叫法)質(zhì)量也不錯(cuò), 基本上不需要什么改動(dòng)。在此實(shí)現(xiàn)過程中,需要改動(dòng)地方有:

          1、生成的指定數(shù)據(jù)庫testdb要?jiǎng)h除掉,因?yàn)檫B接字符串里面有。

          2、在orders.hbm.xml中默認(rèn)不會(huì)自動(dòng)設(shè)置級(jí)聯(lián)保存和更新,可以自己加上cascade="save-update"

          posted on 2007-08-01 23:59 藍(lán)色幽默 閱讀(467) 評(píng)論(0)  編輯  收藏 所屬分類: Hibernate

          導(dǎo)航

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統(tǒng)計(jì)

          常用鏈接

          留言簿(4)

          隨筆分類

          文章分類

          相冊(cè)

          搜索

          最新評(píng)論

          主站蜘蛛池模板: 夏津县| 晋宁县| 苗栗县| 枣强县| 伊金霍洛旗| 阿坝| 锦屏县| 凤山县| 安国市| 聊城市| 福贡县| 新河县| 鹤峰县| 镇安县| 三河市| 甘南县| 上栗县| 庆云县| 肥城市| 进贤县| 嘉善县| 饶河县| 大洼县| 临江市| 海兴县| 昌吉市| 马尔康县| 榕江县| 宁远县| 肇源县| 娱乐| 赫章县| 金华市| 秦安县| 衡山县| 开鲁县| 绥宁县| 鹿泉市| 汤阴县| 正安县| 岢岚县|