一 认识hibernate3
hibernate3.jar是hibernate的核心包
doc文档
eg例子程序
etc配置文件
grammar语法
lib依赖的包
srchibernate源代码
test测试用例
ORMObjectRelationMapping对象关系映射主流的ORM框架有Hibernate、TopLink、OJB。
配置文件hibernate.cfg.xml和hibernate.properties两种一般使用xml形式
开发一个小例子
新建一个java项目把hibernate的包全都引入到工程中
创建一个实体类User
packagedao.service;
importjava.util.Date;
publicclassUser{
privateintid;
privateStringname;
privateDatebirthday;
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicDategetBirthday(){
returnbirthday;
}
publicvoidsetBirthday(Datebirthday){
this.birthday=birthday;
}
}
实体类的映射文件User.hbm.xml这个文件有点复杂可以从hibernate的eg目录下找一个同样
的模板修改下即可
<?xmlversion="1.0"?>
<!DOCTYPEhibernate-mappingPUBLIC
"-//Hibernate/HibernateMappingDTD3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mappingpackage="dao.service">
<classname="User">
<idname="id">
<generatorclass="native"/>
</id>
<propertyname="name"/>
<propertyname="birthday"/>
</class>
</hibernate-mapping>
引入配置文件把模板程序拷贝到包的根目录下hibernate.cfg.xml
<!DOCTYPEhibernate-configurationPUBLIC
"-//Hibernate/HibernateConfigurationDTD3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<propertyname="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<propertyname="connection.url">jdbc:mysql:///test</property>
<propertyname="connection.username">root</property>
<propertyname="connection.password">root</property>
<!--指定其方言方言的作用就是告诉hibernate是哪种数据库-->
<propertyname="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!--指定其hibernate是否根据映射文件自动创建表-->
<propertyname="hbm2ddl.auto">update</property>
<mappingresource="dao/service/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
创建测试类
packagedao.test;
importjava.util.Date;
importorg.hibernate.Session;
importorg.hibernate.SessionFactory;
importorg.hibernate.Transaction;
importorg.hibernate.cfg.Configuration;
importdao.service.User;
publicclassBase{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
//对hibernate进行初始化操作
Configurationctf=newConfiguration();
ctf.configure();
//获取连接工厂
SessionFactorysf=ctf.buildSessionFactory();
//获取连接对象
Sessions=sf.openSession();
Transactiontx=s.beginTransaction();
Useruser=newUser();
user.setBirthday(newDate());
user.setName("name");
s.save(user);
tx.commit();
s.close();
System.out.print("end");
}
}
注意对hibernate的配置文件的引入可以参考etc下的hibernate.properties
这里可以找到完整的配置信息
注意点1
##autoschemaexport
#hibernate.hbm2ddl.autocreate-drop
#hibernate.hbm2ddl.autocreate
#hibernate.hbm2ddl.autoupdate
#hibernate.hbm2ddl.autovalidate
这是指定其hibernate是否可以根据映射文件建表
create-drop这种形似指的是在程序在运行的时候就自动把以往同样的表给删除只可以在测试环境下使用
create这种跟create-drop一样
update这种最实用hibernate可以自动检查数据库中的表是否存在如果不存在,就创建存在,就更新其表中数据
validate验证映射文件跟表是否一致,不一致就异常
注意点2
映射文件必须配置到hibernate配置文件中不然hibernate会找不到该映射文件
注意点3必须指定其方言告诉其hibernate是采用的是什么数据库
注意点4hibernate其实底层是基于jdbc操作的
注意点5jdbc的事务是自动提交的但是在hibernate中,事务的自动关闭了,但是有时候不开启事务发现数据也
能插入到数据库中这是为什么呢,这是由表结构的引擎所决定的查看表结构的方法在命令行中
输入showcreatetableuser;有些引擎是不支持事务的所以你开启事务和不开启事务是没什么区别的
mysql5版本后的数据库表结构的默认引擎是InnoDB这种是支持事务的
查看所有引擎的方法在命令行输入showengines;
完毕end!