参考资料来源于hibernate3.3.2 reference
1.实体类初识
下面是一个JavaBean,但是hibernate还不认识它
public class Event { private Long id; private String title; private Date date; public 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; } }
这个类遵循标准的JavaBean约定,使用私有的field,添加相应的get与set方法。
id属性用于标识特定的event,所有的持久化类必须有一个标识属性。持久化类必须有一个无参构造器,hibernate会通过反射机制来创建对象。
2.hiberante映射文件(xxx.hbm.xml)
EVENT类对应的hibernate映射文件,它告诉hibernate在操作EVENT类的对象时对数据库中什么表进行操作:
<hibernate-mapping package="org.hibernate.tutorial.domain">
<class name="Event" table="EVENTS">
<id name="id" column="EVENT_ID">
<generator class="native"/>//native表示跟据数据库本来所具有的能力来生成主键,如sqlserver可以自增,
那么在这里native就相当于identity,对于mysql,可用sequence来生成主键,那么native就对应sequence
</id>
<property name="date" type="timestamp" column="EVENT_DATE"/>
<property name="title"/>
</class>
</hibernate-mapping>
class属性用来告诉hibernate,Event类对应数据库中的EVENTS表
这里的id属性用于标识数据库中的主键。name=id表示JavaBean中的id属性是用于hibernate作为主键来访问的,coloumn=EVENT_ID表示数据库中该表的主键列名为EVENT_ID。
generator用于描述主键的生成策略。
property用于表示EVENT类中其它的属性。name表示EVENT类中属性的名称,type表示hibernate映射类型,它可以在java与sql类型之间转换。column表示该属性对应的数据库中表的名字。
那么像下面的title只有name,没有type与column,hibernate会自动通过反射机制得到title在EVENT类中的类型,然后给定一个相应的值,对于column,hibernate将默认表中的名称与类中的名称一致。
3.hibernate配置文件(xxx.cfg.xml)
有了hibernate映射文件,hibernate可以通过对对象的操作,进而操作数据库表,但是hibernate怎么知道你要操作什么数据库,及你的映射文件又放在什么地方呢?
所以这里就引出了hibernate配置文件,它有两种形式,hibernate.cfg.xml或hibernate.properties,一般以xml为主,
当你用new Configuration().configue()加载配置文件时,默认加载hibernate.cfg.xml,如果你的hibernate配置文件的名字为xxx.cfg.xml那么你必须为configue()方法加参数,即new Configuration().configue("xxx.cfg.xml")。
下面是一个配置文件的例子:
<hibernate-configuration>
一个session-factory对应一个数据库,在这里要配置数据库相关信息,并且hibernate映射文件信息必须在这里进行配置(指出映射文件所处的位置),只有这样,hibernate才能知道什么实体类与什么表对应。
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">org.hsqldb.jdbcDriver</property>数据库驱动
<property name="connection.url">jdbc:hsqldb:hsql://localhost</property>连接数据库的url
<property name="connection.username">sa</property>用户名
<property name="connection.password"></property>密码
<!-- 方言,每种数据库有自己的特性,你要跟它交流就得用与之相应的方式,就跟你跟中国人说话要用汉语一样-->
<property name="dialect">org.hibernate.dialect.HSQLDialect</property>
<!-- 是否显示sql -->
<property name="show_sql">true</property>
<mapping resource="org/zengge/hibernate/pojo/Event.hbm.xml"/>映射文件位置,这个很关键,如果定位不对,就会报错。
</session-factory>
</hibernate-configuration>