一 认识hibernate3

写道
下载的hibernate解压目录
hibernate3.jar是hibernate的核心包

doc 文档
eg 例子程序
etc 配置文件
grammar 语法
lib 依赖的包
src hibernate源代码
test 测试用例

ORM Object Relation Mapping对象关系映射 主流的ORM框架有Hibernate、TopLink、OJB。

配置文件 hibernate.cfg.xml和hibernate.properties两种 一般使用xml形式

开发一个小例子
新建一个java项目 把hibernate的包全都引入到工程中
创建一个实体类 User

package dao.service;

import java.util.Date;

public class User {
private int id;
private String name;
private Date birthday;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}


实体类的映射文件 User.hbm.xml 这个文件有点复杂 可以从hibernate的eg目录下找一个同样
的模板 修改下即可

<?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 package="dao.service">
<class name="User">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<property name="birthday"/>
</class>

</hibernate-mapping>

引入配置文件 把模板程序拷贝到包的根目录下 hibernate.cfg.xml

<!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:///test</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<!-- 指定其方言 方言的作用就是告诉hibernate是哪种数据库 -->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!-- 指定其hibernate是否根据映射文件自动创建表 -->
<property name="hbm2ddl.auto">update</property>
<mapping resource="dao/service/User.hbm.xml" />

</session-factory>
</hibernate-configuration>





创建测试类


package dao.test;

import java.util.Date;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import dao.service.User;

public class Base {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//对hibernate进行初始化操作
Configuration ctf=new Configuration();
ctf.configure();
//获取连接工厂
SessionFactory sf=ctf.buildSessionFactory();
//获取连接对象
Session s=sf.openSession();
Transaction tx=s.beginTransaction();
User user=new User();
user.setBirthday(new Date());
user.setName("name");

s.save(user);
tx.commit();
s.close();
System.out.print("end");
}

}

注意 对hibernate的配置文件的引入可以参考etc下的hibernate.properties
这里可以找到完整的配置信息
注意点1
## auto schema export
#hibernate.hbm2ddl.auto create-drop
#hibernate.hbm2ddl.auto create
#hibernate.hbm2ddl.auto update
#hibernate.hbm2ddl.auto validate
这是指定其hibernate是否可以根据映射文件建表

create-drop 这种形似指的是在程序在运行的时候就自动把以往同样的表给删除 只可以在测试环境下使用
create 这种跟create-drop一样
update 这种最实用 hibernate可以自动检查数据库中的表是否存在 如果不存在,就创建 存在,就更新其表中数据
validate 验证映射文件跟表是否一致,不一致就异常

注意点2
映射文件必须配置到hibernate配置文件中 不然hibernate会找不到该映射文件

注意点3 必须指定其方言 告诉其hibernate是采用的是什么数据库

注意点4 hibernate其实底层是基于jdbc操作的

注意点5 jdbc的事务是自动提交的 但是在hibernate中,事务的自动关闭了,但是有时候不开启事务发现数据也
能插入到数据库中 这是为什么呢,这是由表结构的引擎所决定的 查看表结构的方法 在命令行中
输入 show create table user; 有些引擎是不支持事务的 所以你开启事务和不开启事务是没什么区别的
mysql5版本后的数据库表结构的默认引擎是 InnoDB 这种是支持事务的
查看所有引擎的方法 在命令行输入 show engines;

完毕 end !

猜你喜欢

转载自itil-rong.iteye.com/blog/1020488