(1)在使用之前要下载好hibernatejar包,还有数据库的jar包,比如mysql的或者oracle的jar包。并且build path。
hrbernate.cfg.xml是一个总的配置文件,这个配置文件放在哪里都可以,只要设置好路径,在这里将它放到src路径下,这样就不必进行设置能够直接调用。在里面配置和数据库相关的信息。做一个例子,并且配置相关信息如下:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings,这里com.mysql.jdbc.Driver是mysql的数据库-->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- hibernate_xml表示自己创建的数据库名称 -->
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate_xml?characterEncoding=utf-8</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect,根据什么数据库进行相关的配置,
在D:\Java相关程序\hibernate-release-4.3.11.Final\documentation\devguide\en-US\html_single中的index.html中可以找到dialect,找到mysql的,因为这里用mysql 数据库-->
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout ,true表示能看到自动生成的sql语句是什么样子的-->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<!-- 为了让Hibernate能够处理User对象的持久化,需要将它的映射信息加到Hibernate中,这种是用于对基于xml的时候的配置 -->
<mapping resource="com/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
然后创建一个持久化类User:
package com;
public class User {
private Long id;
private String userName;
private String pwd;
private String sex;
private Integer age;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
在这之后,还要创建一个User.hbm.xml,用于向Hibernate提供关于将对象持久化到关系数据库中的信息.注意这个文件要放到和User一样的包名下面。代码如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<!-- 一个class对应一个实体类 ,name="com.User"表示实体类的路径,table="t_user"是数据库中对应的实体类的表名称-->
<class name="com.User" table="t_user">
<!-- 在这里id是作为主键的 ,native:跨数据库时使用,由底层方言产生。 使用native时Hibernate默认会去查找Oracle中的hibernate_sequence序列。
如果Oracle中没有该序列,连Oracle数据库时会报错。如果是uuid,则要使得id为String类型,否则会报错。如果为sequence,则用该加上<param name="sequence">seq_user</param>这样在oracle数据库中机会生成一个seq_user的序列-->
<id name="id">
<generator class="native"/>
</id>
<!-- 下面是对普通属性的配置,name表示在实体类中的名称,column表示对应的数据库中的名称,如果不写,则默认和实体类中一样 -->
<property name="userName" column="user_name"></property>
<property name="pwd" ></property>
<property name="sex" ></property>
<property name="age" ></property>
</class>
</hibernate-mapping>
需要注意的是,为了让Hibernate能够处理User对象的持久化,需要将它的映射信息加到Hibernate中,加上如下的配置
<mapping resource="com/User.hbm.xml"/>
然后,配置基本上完成,接下来需要创建数据库。在这里我们可以通过创建一个CreateTable文件创建数据库表,而不是在数据库的工具中进行配置:
package test;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class CreateTable {
public static void main(String[] args) {
//读取配置文件hibernate.cfg.xml,hibernate.cfg.xml会读取User.hbm.xml文件
Configuration cfg=new Configuration().configure();
SchemaExport se=new SchemaExport(cfg);
se.create(true, true);
}
}
结果如下图:
当然,如果我们不仅没有将hibernate.cfg.xml直接放到src下,而且放到了其他包下面,并且改成了hb.cfg.xml,则如下做:
(2)接下来在上面的基础上,我们实现将对象保存到数据的一个简单演示。
可以在test包下面创建一个TestSave文件:
package test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import com.User;
public class TestSave {
public static void main(String[] args) {
//读取配置文件hibernate.cfg.xml,hibernate.cfg.xml会读取User.hbm.xml文件
Configuration cfg=new Configuration().configure();
//创建一个注册类
StandardServiceRegistry srb=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties())
.build();
//创建sessionFactory
SessionFactory sessionFactory=cfg.buildSessionFactory(srb);
//创建session,因为session封装的方法是用来操作对象的,这里将对象保存到数据库中,所以也是操作数据库的
Session session=sessionFactory.openSession();
//开启事务
session.beginTransaction();
//保存数据到数据库中
User u=new User();
u.setAge(20);
u.setPwd("342");
u.setUserName("张飒");
session.save(u);//将数据保存到数据库,这里hibernate会自动创建sql语句。
//结束事务
session.getTransaction().commit();
//关闭事务
session.close();
}
}
hibernate自动创建sql语句如下:
这样,上述操作成功保存到了数据表中。