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 知道应该去访问哪张表,使用哪一个字段。
每个持久化类对应一张表,每个持久化对象对应表中的一行数据。
一个映射文件基本结构长这样:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

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

    <class name="Event" table="EVENTS">

    </class>

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

    <class name="Event" table="EVENTS">
        <id name="id" column="EVENT_ID">
            <generator class="increment"/>
        </id>
    </class>

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

    <class name="Event" table="EVENTS">
        <id name="id" column="EVENT_ID">
            <generator class="increment"/>
        </id>
        <property name="date" type="timestamp" column="EVENT_DATE"/>
        <property name="title"/>
    </class>

</hibernate-mapping>
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 的配置文件。配置内容如下:
<?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>
  
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
    <property name="connection.username">root</property>    
    <property name="connection.password">root</property>    
          
        <property name="connection.pool_size">1</property>
        
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        
        <property name="show_sql">true</property>
        
        <property name="hbm2ddl.auto">create</property>
        
        <mapping resource="Event.hbm.xml" />    
    
    </session-factory>    
    
</hibernate-configuration>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值