`

hibernate annotation(三)

阅读更多

Hibernate是ORM的解决方案,其底层对数据库的操作依赖于JDBC,所以您必须先取得JDBC驱动程序,在这边所使用的是MySQL,所以您必须至 MySQL® Connector/J 取得MySQL的JDBC驱动程序。

接下来至 Hibernate 官方网站 取得Hibernate 3.2、Hibernate Annotations 3.2。

您必须安装JDK 5.0才可以使用Hibernate Annotations的功能。

解开Hibernate 3.2的zip档案后,当中的hibernate3.jar是必要的,而在lib目录中还包括了许多jar档案,您可以在 Hibernate 3.0官方的参考手册 上找到这些jar的相关说明,其中必要的是 antlr、dom4j、CGLIB、asm、Commons Collections、Commons Logging、 EHCache,Hibernate底层还需要Java Transaction API,所以您还需要jta.jar。

解开Hibernate Annotations 3.2的zip档案后,您需要hibernate-annotations.jar、ejb3-persistence.jar这两个档案。

到这边为止,总共需要以下的jar档案:

Hibernate可以运行于单机之上,也可以运行于Web应用程序之中,如果是运行于单机,则将所有用到的jar档案(包括JDBC驱动程序)设定至CLASSPATH中,如果是运行于Web应用程序中,则将jar档案置放于WEB-INF/lib中。

如果您还需要额外的Library,再依需求加入,例如JUnit、Proxool等等,接下来可以将etc目录下的 log4j.properties复制至Hibernate项目的Classpath下,并修改一下当中的 log4j.logger.org.hibernate为error,也就是只在在错误发生时显示必要的讯息。

接着设置基本的Hibernate配置文件,可以使用XML或Properties档案,这边先使用XML,档名预设为hibernate.cfg.xml:

Xml代码 复制代码
  1. <?xml version="1.0" encoding="utf-8"?>    
  2. <!DOCTYPE hibernate-configuration PUBLIC   
  3.   "-//Hibernate/Hibernate Configuration DTD 3.0//EN"   
  4.   "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  5.      
  6. <hibernate-configuration>    
  7.     <session-factory>    
  8.         <!-- 显示实际操作数据库时的SQL -->    
  9.         <property name="show_sql">true</property>    
  10.         <!-- SQL方言,这边设定的是MySQL -->    
  11.         <property name="dialect">org.hibernate.dialect.MySQLDialect</property>    
  12.         <!-- JDBC驱动程序 -->    
  13.         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>    
  14.         <!-- JDBC URL -->    
  15.         <property name="connection.url">jdbc:mysql://localhost/demo</property>    
  16.         <!-- 数据库使用者 -->    
  17.         <property name="connection.username">root</property>    
  18.         <!-- 数据库密码 -->    
  19.         <property name="connection.password">123456</property>    
  20.     
  21.         <!-- 以下设置对象与数据库表格映像类别 -->  
  22.         <mapping class="onlyfun.caterpillar.User"/>    
  23.     </session-factory>    
  24. </hibernate-configuration>  
<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC
  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  
<hibernate-configuration> 
    <session-factory> 
        <!-- 显示实际操作数据库时的SQL --> 
        <property name="show_sql">true</property> 
        <!-- SQL方言,这边设定的是MySQL --> 
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
        <!-- JDBC驱动程序 --> 
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
        <!-- JDBC URL --> 
        <property name="connection.url">jdbc:mysql://localhost/demo</property> 
        <!-- 数据库使用者 --> 
        <property name="connection.username">root</property> 
        <!-- 数据库密码 --> 
        <property name="connection.password">123456</property> 
 
        <!-- 以下设置对象与数据库表格映像类别 -->
        <mapping class="onlyfun.caterpillar.User"/> 
    </session-factory> 
</hibernate-configuration>

 

这边以一个简单的单机程序来示范Hibernate的配置与功能,首先作数据库的准备工作,在MySQL中新增一个demo数据库,并建立user表格:
CREATE TABLE user (    id INT(11) NOT NULL auto_increment PRIMARY KEY,    name VARCHAR(100) NOT NULL default '',    age INT);
对于这个表格,您有一个User类别与之对应,表格中的每一个字段将对应至User实例上的Field成员。

Java代码 复制代码
  1. package onlyfun.caterpillar;   
  2.     
  3. import javax.persistence.*;   
  4.     
  5. @Entity  
  6. @Table(name="user"// 非必要,在表格名称与类别名称不同时使用   
  7. public class User {   
  8.   @Id  
  9.   @GeneratedValue(strategy=GenerationType.AUTO)   
  10.     private Integer id;   
  11.      
  12.   @Column(name="name"// 非必要,在字段名称与属性名称不同时使用   
  13.     private String name;   
  14.      
  15.   @Column(name="age")    
  16.     private Integer age; // 非必要,在字段名称与属性名称不同时使用   
  17.        
  18.     // 必须要有一个预设的建构方法   
  19.     // 以使得Hibernate可以使用Constructor.newInstance()建立对象   
  20.     public User() {   
  21.     }   
  22.     
  23.     public Integer getId() {   
  24.         return id;   
  25.     }   
  26.     
  27.     public void setId(Integer id) {   
  28.         this.id = id;   
  29.     }   
  30.     
  31.     public String getName() {   
  32.         return name;   
  33.     }   
  34.     
  35.     public void setName(String name) {   
  36.         this.name = name;   
  37.     }   
  38.        
  39.     public Integer getAge() {   
  40.         return age;   
  41.     }   
  42.     
  43.     public void setAge(Integer age) {   
  44.         this.age = age;   
  45.     }   
  46. }  
package onlyfun.caterpillar;
 
import javax.persistence.*;
 
@Entity
@Table(name="user") // 非必要,在表格名称与类别名称不同时使用
public class User {
  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;
  
  @Column(name="name") // 非必要,在字段名称与属性名称不同时使用
    private String name;
  
  @Column(name="age") 
    private Integer age; // 非必要,在字段名称与属性名称不同时使用
    
    // 必须要有一个预设的建构方法
    // 以使得Hibernate可以使用Constructor.newInstance()建立对象
    public User() {
    }
 
    public Integer getId() {
        return id;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
    
    public Integer getAge() {
        return age;
    }
 
    public void setAge(Integer age) {
        this.age = age;
    }
}

 

其中id是个特殊的属性,Hibernate会使用它来作为主键识别,您可以定义主键产生的方式,这边设定为自动产生主键,可以看到,实体标识,主键生成,以及相关映像,都可以使用Annotation来完成。

接下来撰写一个测试的程序,这个程序直接以Java程序设计人员熟悉的语法方式来操作对象,而实际上也直接完成对数据库的操作,程序将会将一笔数据存入表格之中:

Java代码 复制代码
  1. package onlyfun.caterpillar;   
  2.     
  3. import org.hibernate.SessionFactory;   
  4. import org.hibernate.Session;   
  5. import org.hibernate.Transaction;    
  6. import org.hibernate.cfg.AnnotationConfiguration;   
  7. import org.hibernate.cfg.Configuration;    
  8.     
  9. public class HibernateAnnotationDemo {   
  10.     
  11.     public static void main(String[] args) {   
  12.         // 需要AnnotationConfiguration读取Annotation讯息   
  13.         Configuration config = new AnnotationConfiguration().configure();   
  14.         // 根据 config 建立 SessionFactory   
  15.         // SessionFactory 将用于建立 Session   
  16.         SessionFactory sessionFactory = config.buildSessionFactory();    
  17.     
  18.         // 将持久化的物件   
  19.         User user = new User();    
  20.         user.setName("caterpillar");    
  21.         user.setAge(new Integer(30));        
  22.     
  23.         // 开启Session,相当于开启JDBC的Connection   
  24.         Session session = sessionFactory.openSession();    
  25.         // Transaction表示一组会话操作   
  26.         Transaction tx= session.beginTransaction();    
  27.         // 将对象映像至数据库表格中储存   
  28.         session.save(user);    
  29.         tx.commit();    
  30.         session.close();    
  31.         sessionFactory.close();    
  32.           
  33.         System.out.println("新增资料OK!请先用MySQL观看结果!");    
  34.     }   
  35. }  
package onlyfun.caterpillar;
 
import org.hibernate.SessionFactory;
import org.hibernate.Session;
import org.hibernate.Transaction; 
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration; 
 
public class HibernateAnnotationDemo {
 
    public static void main(String[] args) {
        // 需要AnnotationConfiguration读取Annotation讯息
        Configuration config = new AnnotationConfiguration().configure();
        // 根据 config 建立 SessionFactory
        // SessionFactory 将用于建立 Session
        SessionFactory sessionFactory = config.buildSessionFactory(); 
 
        // 将持久化的物件
        User user = new User(); 
        user.setName("caterpillar"); 
        user.setAge(new Integer(30));     
 
        // 开启Session,相当于开启JDBC的Connection
        Session session = sessionFactory.openSession(); 
        // Transaction表示一组会话操作
        Transaction tx= session.beginTransaction(); 
        // 将对象映像至数据库表格中储存
        session.save(user); 
        tx.commit(); 
        session.close(); 
        sessionFactory.close(); 
       
        System.out.println("新增资料OK!请先用MySQL观看结果!"); 
    }
}

 注意,使用Annotation时,需要的是AnnotationConfiguration类别。

如您所看到的,程序中只需要直接操作User对象,并进行Session与Transaction的相关操作,Hibernate就会自动完成对数据库的操作,您看不到任何一行JDBC或SQL的陈述,撰写好以上的各个档案之后,各档案的放置位置如下:


接着可以开始运行程序,结果如下:

Hibernate: insert into user (name, age) values (?, ?)
新增资料OK!请先用MySQL观看结果!

分享到:
评论

相关推荐

    Hibernate Annotation jar

    这里面包涵了需要用Hibernate Annotation时,所需要的所有jar包! 现在我们公司在做web项目的时候,已经不用*.hbm.xml这种映射文件了,都是用Annotation(注解)方式来完成实体与表之间的映射关系,这样看起来比用...

    hibernate annotation中文文档

    hibernate annotation中文文档

    hibernate annotation hibernate3

    三、字段级注解 1. 基本类型注解:`@Column` `@Column`注解用于定义字段如何映射到数据库表的列,可以设置列名、长度、是否允许为空等属性。例如: ```java @Column(name="USER_NAME", nullable=false, length=50...

    hibernate annotation 中文文档

    《Hibernate Annotation 中文文档》是Java开发者们的重要参考资料,它详细介绍了如何在Hibernate框架中使用注解进行对象关系映射(ORM)。Hibernate是一款强大的开源Java持久化框架,它简化了数据库与Java对象之间的...

    最全的Hibernate Annotation API文档

    在Hibernate中,注解(Annotation)是一种声明式的方法,用于配置实体类、属性以及它们与数据库表之间的映射关系。本文将深入探讨“最全的Hibernate Annotation API文档”中的关键知识点。 一、实体类(Entity) 在...

    Hibernate Annotation 中文文档

    **Hibernate Annotation 中文文档** 在Java的持久化框架中,Hibernate是一个非常重要的工具,它极大地简化了数据库操作。随着技术的发展,Hibernate Annotation逐渐成为主流,因为它提供了更直观、更简洁的方式来...

    Hibernate Annotation库

    这三个特定的jar包是Hibernate ORM框架中用于实现注解驱动功能的核心依赖。 1. **hibernate-annotations.jar**: 这个jar文件包含了Hibernate的注解API,提供了各种注解如`@Entity`、`@Table`、`@Id`、`@...

    Hibernate Annotation 学习笔记

    《Hibernate Annotation 学习笔记》 在Java的持久化框架中,Hibernate以其强大的功能和易用性成为开发者首选之一。而Hibernate Annotation则是Hibernate提供的一种基于注解的实体映射方式,它极大地简化了传统XML...

    Hibernate Annotation入门

    **Hibernate Annotation 入门** Hibernate 是一款非常流行的Java对象关系映射(ORM)框架,它允许开发者使用面向对象的方式操作数据库。而Hibernate Annotation是Hibernate的一个重要特性,它通过在Java类和字段上...

    Hibernate Annotation

    Hibernate Annotation

    hibernate 注解 annotation 教程

    hibernate 注解 annotation 教程

    Hibernate_annotation3.4_api.CHM

    Hibernate annotation 3.4 api CHM

    sping hibernate Annotation(注释配置) demo(例子)

    总结来说,这个 "Spring Hibernate Annotation demo" 展示了如何在 Spring 框架中使用注解配置来管理依赖,以及如何利用 Hibernate 的注解进行数据持久化。同时,它还涉及到了 Flex 前端与后端的交互。通过学习这个 ...

    hibernate annotation api chm文件

    《Hibernate Annotation API详解》 Hibernate是一个流行的Java持久化框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是底层的数据访问细节。在Hibernate 3.3版本中,引入了Annotation API,这是一种...

    Hibernate Annotation 笔记 总结 注解

    【标题】:深入理解Hibernate Annotation及其使用 【描述】:本文将全面介绍Hibernate Annotation的使用,包括事务管理和声明式事务处理,以及如何通过注解简化数据库持久化操作。 【标签】:Hibernate, ...

    HibernateAnnotation

    ### HibernateAnnotation 技术概述 在Java开发领域中,Hibernate框架是进行对象关系映射(Object-Relational Mapping,简称ORM)的一种非常流行的工具。它能够帮助开发者将面向对象的模型与关系型数据库进行桥接,...

    Hibernate-Annotation中文教程.pdf

    Hibernate Annotation中文教程 Hibernate 是 Java 数据库持久性的事实标准之一,它非常强大、灵活,而且具备了优异的性能。传统上,Hibernate 的配置依赖于外部 XML 文件,而最近发布的几个 Hibernate 版本中,...

    Hibernate Annotation 唯一外键一对一双向关联

    通过阅读《Hibernate_annotation_1to1_foreignKey》文档或博客,你可以更详细地了解如何配置和使用这种关联,包括示例代码、注意事项以及可能遇到的问题和解决方案。理解并熟练运用这些知识,能帮助你在使用...

Global site tag (gtag.js) - Google Analytics