`

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

    学习JPA——Hibernate_Annotation使用实例

    学习JPA——Hibernate_Annotation使用实例学习JPA——Hibernate_Annotation使用实例学习JPA——Hibernate_Annotation使用实例

    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