hibernate学习笔记--入门

感谢http://blog.csdn.net/pypy_lumin/article/details/1029375 的分享,我是在读这篇文章的时候做的笔记。

1. 随便建立个工程,在lib下面放入jar包,最小支持jar包如下:

  antlr.jar
  cglib-full.jar
  asm.jar
  asm-attrs.jars
  commons-collections.jar
  commons-logging.jar
  ehcache.jar
  hibernate3.jar
  jta.jar
  dom4j.jar
  log4j.jar 
2. 写一个类,比如说 Event.java ,类的内容如下:
 
  
public class Event {
    private Long id;
    private String title;
    private Date date;
Event() {}
    public Long getId() {
        return id;
    }
    private void setId(Long id) {
        this.id = id;
    }
    public Date getDate() {
        return date;
    }
    public void setDate(Date date) {
        this.date = date;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
}

这里有三个属性id,date,title,也有它们各自的get set方法,自己手打代码的话可以在写完三个属性后,右键 Source -> Generate Getters and Setters 生成。这里还要有一个构造方法,无参的构造方法,在java里是默认有一个无参构造方法的,我们还是写出来,右键 Source -> Generate Constructors from Superclass 可以生成。
id 为 Event 类的每一个实例提供标记,一般我们不会去直接操作标记符 id ,所以它的 set 方法是 private 
无参构造方法的存在是因为 hibernate 要求每一个持久类都需要一个无参的构造方法,hibernate 要用 java反射机制来实例化对象。
3. 编写映射文件,比如说 Event.hbm.xml
 
  
 
  
这个映射文件的位置应该和上面的 Event.java 在同级目录。xml 文件的命名理论上是随意的,不过hibernate开发者社区约定为 .hbm.xml 了,照写吧。
映射文件会告诉 hibernate 怎样去加载和存储持久化类的对象,从而 hibernate 知道应该去访问哪张表,使用哪一个字段。
每个持久化类对应一张表,每个持久化对象对应表中的一行数据。
一个映射文件基本结构长这样:




[...]
在 <hibernate-mapping> 标签中间,我们可以加上一个 class 元素,所有的持久化类都需要配置这么一个 class 元素,这用来映射到数据库里。
 
  
在这个例子里,加入 class 元素后,映射文件是这个样子的


    

    

这里 class 元素的 name 指的是持久化类, table 指的是数据库的表名。
 
  
接着把 class 里面的其他元素补上,补完之后是这个样子的


    
        
            
        
    

id 元素是 class 元素下的“唯一标记属性”,照写就是了。
 
  
 name="id" 对应的是 Event 类的属性 id ,hibernate 将会用 getId() 和 setId() 来访问它。
 column="EVENT_ID" 对应的是数据库 EVENTS 表的字段 EVENT_ID 。并且由于这是在 id 元素里,column 还指定了这个表主键是 "EVENT_ID"。
 generator 元素是标记符的生成策略,具体策略用 class 指定。这里的策略用的是内存直接生成数字,自增长。
接着把其他需要持久化的属性写进来,不写的属性都会被视为非持久化的。


    
        
            
        
        
        
    

property 元素跟 id 元素类似,都是告诉 hibernate 应该用 get set 方法去访问类里面的哪些属性,这些属性又对应表的哪些字段。
 
  
如果像 title 没有指定 column 的话,hibernate 默认直接使用属性名 title 作为 表的字段名。
这里的 date 是大多数数据库的保留关键字,如果不想操作数据库的时候出现莫名其妙的问题,最好把它映射为别的名字,比如这里的 EVENT_ID 。
type 属性是 Hibernate mapping types,这是告诉 hibernate 如何把数据类型从 java 转化为 sql 类型。如果没有缺省 type 的话, hibernate 会试着同类型转化,比如这里的 title 持久化属性,会从 java-String 转化为 sql-varchar ,这是成功的转化;但是如果没有指定日期类的话就会有问题了,比如这里的 date 持久化属性,hibernate 不知道把 java-Date 转化为 SQL date、timestamp,time 之中的哪一个,因此我们要指定个 timestamp 。
4.配置hibernate
 
  
 
  
配置hibernate,可以用hibernate.properties、hibernate.cfg.xml、或者程序配置。
我这里学习用的是 mysql 数据库,配置文件用的是 hibernate.cfg.xml,文件位置在源代码目录 src 下,实际上是位于classpath的root路径。Hibernate在启动时会自动 在它的根目录开始寻找名为 hibernate.cfg.xml 的配置文件。配置内容如下:
    
    
    
    
    
    
  
    com.mysql.jdbc.Driver
    jdbc:mysql://localhost:3306/test
    root    
    root    
          
        1
        
        org.hibernate.dialect.MySQLDialect
        
        true
        
        create
        
            
    
        
    


首先解释下各个元素的意义:
SessionFactory- 一个关联于特定数据库全局性的工厂。如果你要使用多个数据库,通常应该在多个配置文件中使用多个 进行配置。现在我的理解是一个 session-factory 对应一个数据库,比如我现在用 mysql 数据库,就只写了一个 .cfg.xml 文件。
 
  
property 前面四项是 JDBC 连接数据库的必要信息。
 表明 hibernate 应该产生针对哪种特定数据库语法的SQL语句。
 将自动生成数据库表定义(schema)- 直接插入数据库中。不写这一项的话表示关闭。
 数据库连接池大小。
是否在控制台显示 hibernate 用到的SQL语句,开发时设置为true,便于查错;项目部署后应设置为 false,提高运行效率
 
  
  指定 hibernate 要使用的映射文件
5. 用 Ant 编译
 
  
 
  
这个我刚学了下,跟 javac 一样是一个编译工具,编译速度很快。更多用法还在研究。
记一点额外的东西。安装Ant 非常简单:到官网http://ant.apache.org/bindownload.cgi下载压缩包 -> 解压 -> 配置环境变量 -> 完成
原教程看到这里后面不懂了,如何在 Eclipse 平台内使用 Ant 编译文件没搞懂,后面的更多的没接着看了。
再次感谢原教程的分享。

你可能感兴趣的:(Hibernate)