乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Hibernate Annotations 實戰(zhàn)

       不會游泳的魚 2006-04-25

      Hibernate Annotations 實戰(zhàn)

            -- 從 hbm.xml 到 Annotations

      任何獲得Matrix授權(quán)的網(wǎng)站,轉(zhuǎn)載請保留以下作者信息和鏈接:
      作者:icess(作者的blog:http://blog./page/icess)
      關(guān)鍵字:Hibernate Validator

      下面讓我們先看一個通常用 hbm.xml 映射文件的例子. 有3個類 .HibernateUtil.java 也就是 Hibernate文檔中推薦的工具類,Person.java 一個持久化的類, Test.java 測試用的類.都在test.hibernate 包中. 每個類的代碼如下:

      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 }

       

      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 }

       

      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 數(shù)據(jù)庫.

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

      <!DOCTYPE hibernate-configuration PUBLIC

      "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

      "http://hibernate./hibernate-configuration-3.0.dtd">

      <hibernate-configuration>

      <session-factory>

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

      <property name="hibernate.connection.password">你的數(shù)據(jù)庫密碼</property>

      <property name="hibernate.connection.url">jdbc:mysql://localhost/數(shù)據(jù)庫名</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>屬性 自動導(dǎo)入數(shù)據(jù)庫ddl.生產(chǎn)的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"?>

      <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

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

      <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://hb.

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

      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 }

       

      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 }

      注意該實體類中的屬性都使用了默認(rèn)值.

      Test.java 代碼同上

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

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

      PS:

      生成的數(shù)據(jù)庫表 和 程序執(zhí)行后的 數(shù)據(jù)庫情況如下

      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)

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多