一 认识hibernate3
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="dao.service">
<class name="User">
<id name="id">
<generator
"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 !
?