`

hibernate~~~xml and annotations

阅读更多
Hibernate Annotations 实战介绍
 
<script language="javascript" src="http://java.chinaitlab.com/JS/und_title_left.js"></script><script language="javascript" src="http://security.chinaitlab.com/JS/tech_title_safe3.js"></script> 全球最大事件 4千万信用卡资料被盗
 小心!黑客利用Google挖掘你的隐私
 GOOGLE对SSL VPN安全性造成威胁
  <script language="javascript" src="http://java.chinaitlab.com/JS/und_title_right.js"></script>西门子新款上市报价
<script language="javascript" src="http://server.chinaitlab.com/JS/tech_title_s3.js"></script> 刀片服务器与机架服务器优势完全对比
 惠普机架式服务器促销中仅售91520元
 
ChinaITLab 收集整理  2006-1-8  保存本文  推荐给好友  QQ上看本站  收藏本站

从 hbm.xml 到 Annotations

  下面让我们先看一个通常用 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)

分享到:
评论

相关推荐

    hibernate annotations3.4.0 GA.rar

    都是用Annotation(注解)方式来完成实体与表之间的映射关系,这样看起来比用xml文件来映射更具有可读性,自我感觉以后Hibernate Annotation的映射方式将代替hibernate 的*.hbm.xml映射方式

    hibernate-annotations-3.4.0.GA

    Hibernate Annotations是Hibernate 3.x系列引入的新特性,它允许开发者在Java实体类上直接使用注解来定义对象关系映射信息,替代了传统的Hibernate XML配置文件。这种注解方式提高了开发效率,减少了配置文件的维护...

    hibernate annotations

    Hibernate Annotations是Hibernate框架的一个重要组成部分,它允许开发人员通过在Java实体类上使用注解来定义数据模型,从而避免了传统的XML配置文件。这种做法提高了代码的可读性和维护性。 **核心概念** 1. **...

    Hibernate Annotations 中文文档

    Hibernate Annotations API 中文文档 前言 1. 创建一个注解项目 1.1. 系统需求 1.2. 系统配置 2. 实体Bean 2.1. 简介 2.2. 用EJB3注解进行映射 2.2.1. 声明实体bean 2.2.1.1. 定义表(Table) 2.2.1.2. 乐观...

    HibernateAnnotations 中文版

    Hibernate Annotations 是 Hibernate 的一个重要组成部分,它引入了注解(Annotation)机制,使得开发者无需编写 XML 配置文件,就可以实现对象和数据库表之间的映射。 ### Hibernate ORM 基础 1. **对象关系映射...

    hibernate annotations 中文参考手册

    ### Hibernate Annotations 中文参考手册概览 #### 版本说明 根据提供的信息,这份文档的版本为3.2.0CR1。此版本标志着Hibernate框架中的一个特定阶段,特别是关于如何利用注解(Annotations)来简化Java对象与...

    hibernate xml annotations

    Hibernate XML annotations是Hibernate早期版本中使用的一种方式,它结合了XML配置文件和注解,用于定义实体类与数据库表之间的映射关系。 在Hibernate中,XML配置文件通常命名为`hibernate.cfg.xml`,它包含了...

    hibernate-annotations.jar

    《Hibernate Annotations 框架详解》 在Java领域,Hibernate是一个广泛应用的对象关系映射(ORM)框架,它极大地简化了数据库操作。而`hibernate-annotations.jar`是Hibernate框架中的一个重要组件,主要负责处理...

    hibernate-annotations

    Hibernate Annotations是Hibernate 3.x引入的一个模块,它允许开发者使用Java 5及以上版本的注解来定义对象关系映射,替代传统的XML配置文件。3.4.0.GA版本是该组件的一个稳定版本,修复了大量已知问题,提高了性能...

    hibernate-annotations-3.4.0.GA and hibernate-entitymanager-3.4.0.GA

    本篇将详细探讨`hibernate-annotations-3.4.0.GA`和`hibernate-entitymanager-3.4.0.GA`这两个版本中的核心知识点,尤其是它们在注释和枚举映射方面的应用。 首先,`hibernate-annotations`是Hibernate提供的一套...

    hibernate-annotations 相关jar包

    在Hibernate中,Hibernate Annotations是一个重要的组成部分,它引入了JPA(Java Persistence API)的注解,使得对象-关系映射更加简洁且无需XML配置。 **一、Hibernate Annotations简介** Hibernate Annotations是...

    Hibernate-annotations-3.4最新版本

    Hibernate-annotations-3.4.0.GA是Hibernate的一个重要分支,它引入了注解功能,使得开发者无需编写XML配置文件,就能完成对象与数据库表的映射。这一改进不仅降低了项目的复杂性,也提高了开发效率,尤其在处理大型...

    hibernate3.3.2所有jar包及xml配置文件

    "hibernate3.3.2所有jar包及xml配置文件" 这个标题表明我们要讨论的是关于Hibernate ORM框架的3.3.2版本,它包括了所有必要的jar包以及一个预配置的`hibernate.cfg.xml`文件。Hibernate是一个流行的Java框架,用于将...

    Hibernate3.2 Annotations中文文档

    在Hibernate 3.2版本中,引入了Annotations特性,这是一种更加简洁、直观的方式来描述对象与数据库表之间的映射关系,取代了之前的XML配置文件。这个文档提供了详细的中文指南,帮助开发者理解和应用Hibernate 3.2的...

    hibernate-annotations-3.4.0(参考文档,doc/../index.html)

    Hibernate Annotations是Hibernate框架的一个扩展,它允许开发者使用Java语言的注解(Annotations)来定义对象与数据库表之间的映射关系,替代传统的Hibernate XML配置文件。这使得代码更加简洁,更易于维护,并且与...

    hibernate_annotations.rar

    Hibernate注解是Hibernate框架的一个关键特性,它允许开发者通过在Java类和属性上添加元数据注解,来定义对象与数据库表之间的映射关系,替代了传统的XML配置方式。以下是关于Hibernate注解的一些重要知识点: 1. ...

    hibernate-annotations-3.4.0.jar

    Hibernate Annotations是Hibernate框架的一个扩展,引入了JPA(Java Persistence API)的注解,使得开发人员无需编写XML配置文件即可进行对象持久化。`3.4.0`版本是Hibernate Annotations的一个稳定版本,它包含了...

    hibernate-annotations-3.4.0.GA+hibernate-distribution-3.3.2.GA-dist

    而Hibernate Annotations则是Hibernate框架的重要组成部分,它使得我们可以在实体类上直接使用注解进行对象关系映射,避免了XML配置文件的繁琐。本文将深入探讨Hibernate 3.3.2和Hibernate Annotations 3.4.0的核心...

    hibernate3-[annotations-commons-annotations].rar

    《Hibernate3:注解与Commons Annotations的深度解析》 Hibernate3是一款强大的Java持久化框架,它极大地简化了数据库操作,使得开发者可以专注于业务逻辑,而不是底层的数据访问细节。本篇将深入探讨Hibernate3中...

Global site tag (gtag.js) - Google Analytics