`

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 中文文档

    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. 乐观...

    hibernate xml annotations

    hibernate xml annotations 代码 的例子 两种实例 。

    java persistence with hibernate

    All possible basic and advanced Hibernate mappings are shown in this book, with hundreds of examples in Hibernate's XML format, including Java Persistence annotations for JDK 5.0. Readers can get ...

    hibernate-annotations_中文帮助文档

    在Hibernate 2.x里,多数情况下表示映射关系的元数据保存在XML文本文件中. 还有一种方式就是Xdoclet,它可以在编译时利用Javadoc中的源码注释信息来进行预处理. 现在新的JDK标准(JDK1.5以上)也支持类似的注解功能,...

    hibernate annotations

    Hibernate 注解的说明文档 第 1 章 创建一个注解项目 第 2 章 实体Bean 第 3 章 通过XML覆写元数据 第 4 章 Hibernate验证器 第 5 章 Hibernate与Lucene集成

    hibernate_annotation_所需jar包

    myeclipse的自带hibernate jar包不支持注解;自己找的hibernate注解所需的jar包:hibernate-core;hibernate-annotation;hbm-cfg-xml;log4j.properties

    Hibernate搜索框架HibernateSearch.zip

    Hibernate Search主要有以下功能特点:1,功能强大,配置简单 - 配置只需要修改persistence.xml(JPA),hibernate.cfg.xml(Hibernate)2,支持Hibernate,以及EJB3 JPA标准应用3,集成全文搜索引擎Lucene - Lucene...

    Hibernate注释大全收藏

    Hibernate注释大全收藏 声明实体Bean @Entity public class Flight implements Serializable { Long id; @Id public Long getId() { return id; } public void setId(Long id) { this.id = id; } } @Entity ...

    Beginning Hibernate, 3rd Edition

    Hibernate XML files, and more How to search and query with the new version of Hibernate How to integrate with MongoDB using NoSQL Who this book is for This book is for Java developers who want to ...

    hibernate-jpa-named-query-xml-annotation-example.zip

    This tutorial show how to use Hibernate/JPA Named Queries. We start by explaining why we would use ... Next, we show an example of how to use named queries, either with annotations or XML configuration.

    最新Hibernate jar 架包(9个)

    dom4j-1.6.1.jar dom4j是一个Java的XML API,类似于jdom, 用来读写XML文件的,这是必须使用的jar包,Hibernate用它来读写配置文件 commons-collections-3.2.jar Apache Commons包中的一个, 包含了一些Apache开发的...

    hibernate笔记

    2 下载hibernate-annotations-3[1].4.0.GA 5 3 注意阅读hibernate compatibility matrix(hibernate 网站download) 5 4 下载slf4jl.5.8 6 Hibernate HelloWorld 6 1 建立新java 项目,名为hibernate_0100_HelloWorld 6...

    hibernate_jar.zip

    hibernate-commons-annotations-5.0.1.Final.jar hibernate-core-5.0.7.Final.jar hibernate-ehcache-5.0.7.Final.jar hibernate-entitymanager-5.0.7.Final.jar hibernate-envers-5.0.7.Final.jar hibernate-...

    Hibernate Reference Documentation3.1

    18.1.1. Specifying XML and class mapping together 18.1.2. Specifying only an XML mapping 18.2. XML mapping metadata 18.3. Manipulating XML data 19. Improving performance 19.1. Fetching strategies ...

    Hibernate 注解(总结).docx

    解析:来源:Hibernate提供了Hibernate Annotations扩展包,它可以替换复杂的hbm.xml文件( Annotations扩展包是hibernate-annotation-3.4.0GA.zip) 作用:使得Hibernate程序的开发大大的简化。利用注解后,可不用...

    Android代码-hibernate-validator

    The default metadata source are annotations, with the ability to override and extend the metadata through the use of XML validation descriptors. Documentation The documentation for this release is ...

    Hibernate实战(第2版 中文高清版)

     2.2.1 使用Hibernate Annotations   2.2.2 使用Hibernate EntityManager   2.2.3 引入EJB组件   2.2.4 切换到Hibernate接口   2.3 反向工程遗留数据库   2.3.1 创建数据库配置   2.3.2 定制反向工程 ...

    Struts2+Spring+Hibernate+Ehcache+AJAX+JQuery+Oracle 框架集成用户登录注册Demo工程

    1)Demo 学习要点简介: ...2.Eclipse 导入后可能需要在 Xml Catalog 手动添加:ehcache-spring-1.2.xsd(ehcache-spring-annotations-1.2.0-sources.jar里面有,自己找下)。 3.内附Oracle建表等可执行语句。

    cxf(jax-ws)+spring+hibernate整合包

    FastInfoset-1.2.12.jar,geronimo-javamail_1.4_spec-1.7.1.jar,geronimo-jaxws_2.2_spec-1.1.jar,geronimo-jms_1.1_spec-1.1.1.jar,geronimo-servlet_3.0_spec-1.0.jar,hibernate-annotations.jar,hibernate-...

Global site tag (gtag.js) - Google Analytics