感谢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 编译文件没搞懂,后面的更多的没接着看了。
再次感谢原教程的分享。