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

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

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

    鷹翔宇空

    學習和生活

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks
    原文引自:http://www.matrix.org.cn/resource/article/44/44141_Hibernate_Annotations.html

    從 hbm.xml 到 Annotations

    任何獲得Matrix授權的網站,轉載請保留以下作者信息和鏈接:
    作者:icess(作者的blog:http://blog.matrix.org.cn/page/icess)
    原文:http://www.matrix.org.cn/resource/article/44/44141_Hibernate_Annotations.html
      
    下面讓我們先看一個通常用 hbm.xml 映射文件的例子. 有3個類 .HibernateUtil.java 也就是 Hibernate文檔中推薦的工具類,Person.java 一個志沒睦? Test.java 測試用的類.都在test.hibernate 包中. 每個類的代碼如下:

    HibernateUtil:

    01 package test.hibernate;
    02
    03 import org.hibernate.HibernateException;
    04 import org.hibernate.Session;
    05 import org.hibernate.SessionFactory;
    06 import org.hibernate.cfg.Configuration;
    07
    08 public class HibernateUtil {
    09   public static final SessionFactory sessionFactory;
    10  
    11   static {
    12     try {
    13       sessionFactory = new Configuration()
    14               .configure()
    15               .buildSessionFactory();
    16     } catch (HibernateException e) {
    17       // TODO Auto-generated catch block
    18      
    19       e.printStackTrace();
    20       throw new ExceptionInInitializerError(e);
    21     }
    22   }
    23  
    24   public static final ThreadLocal<Session> session = new ThreadLocal<Session>();
    25  
    26   public static Session currentSession() throws HibernateException {
    27     Session s = session.get();
    28    
    29     if(s == null) {
    30       s = sessionFactory.openSession();
    31       session.set(s);
    32     }
    33    
    34     return s;
    35   }
    36  
    37   public static void closeSession() throws HibernateException {
    38     Session s = session.get();
    39     if(s != null) {
    40       s.close();
    41     }
    42     session.set(null);
    43   }
    44 }

    Person:

    01 package test.hibernate;
    02
    03 import java.util.LinkedList;
    04 import java.util.List;
    05
    06 /**
    07  *
    08  */
    09
    10 @SuppressWarnings("serial")
    11 public class Person implements java.io.Serializable {
    12
    13   // Fields
    14
    15   private Integer id;
    16
    17   private String name;
    18
    19   private String sex;
    20
    21   private Integer age;
    22
    23   private List list = new LinkedList();
    24
    25   // Collection accessors
    26
    27   public List getList() {
    28     return list;
    29   }
    30
    31   public void setList(List list) {
    32     this.list = list;
    33   }
    34
    35   /** default constructor */
    36   public Person() {
    37   }
    38
    39   /** constructor with id */
    40   public Person(Integer id) {
    41     this.id = id;
    42   }
    43
    44   // Property accessors
    45
    46   public Integer getId() {
    47     return this.id;
    48   }
    49
    50   public void setId(Integer id) {
    51     this.id = id;
    52   }
    53
    54   public String getName() {
    55     return this.name;
    56   }
    57
    58   public void setName(String name) {
    59     this.name = name;
    60   }
    61
    62   public String getSex() {
    63     return this.sex;
    64   }
    65
    66   public void setSex(String sex) {
    67     this.sex = sex;
    68   }
    69
    70   public Integer getAge() {
    71     return this.age;
    72   }
    73
    74   public void setAge(Integer age) {
    75     this.age = age;
    76   }
    77
    78 }

    Test:

    01 /*
    02  * Created on
    03  * @author
    04  */
    05 package test.hibernate;
    06
    07 import java.sql.SQLException;
    08
    09 import org.hibernate.FlushMode;
    10 import org.hibernate.HibernateException;
    11 import org.hibernate.Session;
    12 import org.hibernate.Transaction;
    13
    14 public class Test {
    15  
    16   public static void main(String [] args) {
    17     Session s = HibernateUtil.currentSession();
    18    
    19     Transaction tx = s.beginTransaction();   
    20    
    21 //    Person p = (Person) s.load(Person.class, 1);
    22 //    System.out.println(p.getName());
    23     Person p = new Person();
    24    
    25     p.setAge(19);
    26     p.setName("icerain");
    27     p.setSex("male");
    28     s.save(p);
    29     s.flush();
    30     /*
    31     Person p2 = (Person) s.get(Person.class, new Integer(1));
    32     System.out.println(p2.getName());
    33     p2.setName("ice..");
    34     s.saveOrUpdate(p2);
    35     s.flush();
    36     Person p3 = (Person) s.get(Person.class, new Integer(2));
    37     System.out.println(p3.getName());
    38     s.delete(p3);
    39     */
    40    
    41     tx.commit(); 
    42     try {
    43       System.out.println(p.getName());
    44     } catch (Exception e) {
    45       // TODO Auto-generated catch block
    46       e.printStackTrace();
    47     }
    48    
    49     HibernateUtil.closeSession();
    50   }
    51 }

    hibernate.cfg.xml 配置文件如下,利用mysql 數據庫.

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

    <hibernate-configuration>

    <session-factory>

    <property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>

    <property name="hibernate.connection.password">你的數據庫密碼</property>

    <property name="hibernate.connection.url">jdbc:mysql://localhost/數據庫名</property>

    <property name="hibernate.connection.username">用戶名</property>

    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

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

    <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>

    <property name="hibernate.transaction.auto_close_session">false</property>

    <property name="hibernate.hbm2ddl.auto">update</property>

    <mapping resource="test/hibernate/annotation/Person.hbm.xml"/>

    </session-factory>

    </hibernate-configuration>

    其中 配置了<property name="hibernate.hbm2ddl.auto">update</property>屬性 自動導入數據庫ddl.生產的ddl sql語句如下

    create table person (id integer not null auto_increment, name varchar(255), sex varchar(255), age integer, person integer, primary key (id))

    alter table person add index FKC4E39B5511C4A5C2 (person), add constraint FKC4E39B5511C4A5C2 foreign key (person) references person (id)

    Person.hbm.xml 文件如下:

    <?xml version="1.0"?>

    <hibernate-mapping>

    <class name="test.hibernate.Person" table="person">

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

    <column name="id" />

    <generator class="native"></generator>

    </id>

    <property name="name" type="string">

    <column name="name" />

    </property>

    <property name="sex" type="string">

    <column name="sex" />

    </property>

    <property name="age" type="integer">

    <column name="age" />

    </property>

    <bag name="list" cascade="all">

    <key column="person"></key>

    <one-to-many class="test.hibernate.Person"/>

    </bag>

    </class>

    </hibernate-mapping>

    下面讓我們看看利用 Hibernate Annotations 如何做,只要三個類 不再需要 hbm.xml配置文件:

    還要把用到的兩個jar文件 放入的類路徑中. 具體如何做,請參考  Hibernate Annotations 中文文檔

    http://hibernate.6644.net

    HibernateUtil.java 也就是 Hibernate文檔中推薦的工具類,Person.java 一個持久化的類, Test.java 測試用的類.都在test.hibernate.annotation 包中. 每個類的代碼如下:

    HibernateUtil

    01 package test.hibernate.annotation;
    02
    03 import org.hibernate.HibernateException;
    04 import org.hibernate.Session;
    05 import org.hibernate.SessionFactory;
    06 import org.hibernate.cfg.AnnotationConfiguration;
    07 import org.hibernate.cfg.Configuration;
    08
    09 public class HibernateUtil {
    10   public static final SessionFactory sessionFactory;
    11  
    12   static {
    13     try {
    14       sessionFactory = new AnnotationConfiguration()   //注意: 建立 SessionFactory于前面的不同
    15                 .addPackage("test.hibernate.annotation")
    16                 .addAnnotatedClass(Person.class)
    17                
    18                 .configure()
    19                 .buildSessionFactory();
    20         //new Configuration().configure().buildSessionFactory();
    21     } catch (HibernateException e) {
    22       // TODO Auto-generated catch block
    23      
    24       e.printStackTrace();
    25       throw new ExceptionInInitializerError(e);
    26     }
    27   }
    28  
    29   public static final ThreadLocal<Session> session = new ThreadLocal<Session>();
    30  
    31   public static Session currentSession() throws HibernateException {
    32     Session s = session.get();
    33    
    34     if(s == null) {
    35       s = sessionFactory.openSession();
    36       session.set(s);
    37     }
    38    
    39     return s;
    40   }
    41  
    42   public static void closeSession() throws HibernateException {
    43     Session s = session.get();
    44     if(s != null) {
    45       s.close();
    46     }
    47     session.set(null);
    48   }
    49 }

    Person:

    01 package test.hibernate.annotation;
    02
    03 import java.util.LinkedList;
    04 import java.util.List;
    05
    06 import javax.persistence.AccessType;
    07 import javax.persistence.Basic;
    08 import javax.persistence.Entity;
    09 import javax.persistence.GeneratorType;
    10 import javax.persistence.Id;
    11 import javax.persistence.OneToMany;
    12 import javax.persistence.Table;
    13 import javax.persistence.Transient;
    14
    15 /**
    16  *
    17  */
    18
    19 @SuppressWarnings("serial")
    20 @Entity(access = AccessType.PROPERTY) //定義該類為實體類
    21 @Table   //映射表
    22 public class Person implements java.io.Serializable {
    23
    24   // Fields
    25
    26   private Integer id;
    27
    28   private String name;
    29
    30   private String sex;
    31
    32   private Integer age;
    33
    34   private List list = new LinkedList();
    35
    36   // Constructors
    37   /** default constructor */
    38   public Person() {
    39   }
    40
    41   /** constructor with id */
    42   public Person(Integer id) {
    43     this.id = id;
    44   }
    45
    46   // Property accessors
    47   @Id
    48   public Integer getId() {
    49     return this.id;
    50   }
    51
    52   public void setId(Integer id) {
    53     this.id = id;
    54   }
    55
    56   @Basic
    57   public String getName() {
    58     return this.name;
    59   }
    60
    61   public void setName(String name) {
    62     this.name = name;
    63   }
    64
    65   @Basic
    66   public String getSex() {
    67     return this.sex;
    68   }
    69
    70   public void setSex(String sex) {
    71     this.sex = sex;
    72   }
    73
    74   @Basic
    75   public Integer getAge() {
    76     return this.age;
    77   }
    78
    79   public void setAge(Integer age) {
    80     this.age = age;
    81   }
    82   @Transient  //由于本例不打算演示集合映射 所有聲明該屬性為 Transient
    83   public List getList() {
    84     return list;
    85   }
    86
    87   public void setList(List list) {
    88     this.list = list;
    89   }
    90
    91 }

    注意該實體類中的屬性都使用了默認值.

    Test.java 代碼同上

    不需要了 hbm.xml 映射文件, 是不是簡單了一些 .給人認為簡化了一些不是主要目的.主要是可以了解一下 EJB3 的持久化機制 ,提高一下開發效率才是重要的.

    好了 .本例就完了 . 感覺怎么樣了 .歡迎你來批批.

    PS:

    生成的數據庫表 和 程序執行后的 數據庫情況如下

    mysql> describe person;
    +--------+--------------+------+-----+---------+----------------+
    | Field  | Type         | Null | Key | Default |          Extra |
    +--------+--------------+------+-----+---------+----------------+
    | id     | int(11)      | NO   | PRI | NULL    | auto_increment |
    | name   | varchar(255) | YES  |     | NULL    |                |
    | sex    | varchar(255) | YES  |     | NULL    |                |
    | age    | int(11)      | YES  |     | NULL    |                |
    | person | int(11)      | YES  | MUL | NULL    |                |
    +--------+--------------+------+-----+---------+----------------+
    5 rows in set (0.00 sec)

    mysql> select * from person;
    +----+---------+------+------+--------+
    | id | name    |  sex |  age | person |
    +----+---------+------+------+--------+
    |  1 | icerain | male |   19 |   NULL |
    +----+---------+------+------+--------+
    1 row in set (0.03 sec)

    posted on 2006-02-20 16:07 TrampEagle 閱讀(687) 評論(0)  編輯  收藏 所屬分類: hibernate
    主站蜘蛛池模板: 亚洲日韩国产精品第一页一区| 亚洲av无码乱码国产精品| 青青草97国产精品免费观看| 久久精品亚洲男人的天堂| 999zyz**站免费毛片| 4444亚洲国产成人精品| 日韩免费a级在线观看| 麻豆精品不卡国产免费看| 亚洲一级毛片在线播放| 亚洲免费无码在线| 59pao成国产成视频永久免费| 亚洲国产av玩弄放荡人妇| 亚洲精品自在在线观看| 国产一卡二卡3卡四卡免费| 美女露隐私全部免费直播| 久久久国产精品亚洲一区| 免费国产成人高清在线观看麻豆| 中国一级特黄的片子免费 | 爱爱帝国亚洲一区二区三区| 亚洲精品自产拍在线观看| 妞干网免费视频在线观看| 亚洲国产精品国自产拍AV| 午夜小视频免费观看| 免费人成网站在线观看不卡| 亚洲大码熟女在线观看| 久久精品国产亚洲av麻豆小说| 国产一区二区免费在线| 2021久久精品免费观看| 韩国免费a级作爱片无码| 亚洲国产欧洲综合997久久| 亚洲视频网站在线观看| 中文字幕亚洲电影| 在线观看永久免费视频网站| 亚洲大片免费观看| 免费观看一区二区三区| 疯狂做受xxxx高潮视频免费| 国产成人精品日本亚洲直接| 亚洲福利在线观看| 亚洲精品无码高潮喷水在线| mm1313亚洲精品无码又大又粗| 搡女人真爽免费视频大全|