最近在学习hibernate框架,所有例子开发所使用的IDE为eclipse,数据库为mysql 5.5,为了方便创建hibernate的配置文件,可以在eclipse上安装hibernate tools,步骤为:Help-->Eclipse Marketplace,输入hibernate进行搜索,找到Hibernate Tools,然后点击安装即可。安装好之后重启eclipse,就可以在File-->New-->Other...下面找到Hibernate相关的了。
然后去hibernate官网下载hibernate压缩包,我所使用的版本为hibernate-release-4.2.7.final,这样准备工作就基本上是完成了。
首先建立数据库。新建一个名字为test的schema,在其中建一张student的表,sql语句如下:
CREATE TABLE `student` (
`stuID` varchar(20) NOT NULL,
`stuName` varchar(20) NOT NULL,
PRIMARY KEY (`stuID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然后新建一个project,导入相关的jar包,具体包括:mysql的connctor,以及hibernate压缩包内lib/required/下的所有jar包。然后再src目录下建立hibernate的配置文件,即hibernate.cfg.xml,因为安装了Hibernate Tools,因此可以File-->New-->Other...-->Hibernate configuration File(cfg.xml),具体配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">password</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<property name="hibernate.show_sql">true</property>
<mapping resource="test/Student.hbm.xml"/>
</session-factory>
</hibernate-configuration>
driver_class、url、username和password是必不可少的,dialect制定了方言种类,由于不同的数据库对于SQL的实现有所不同,因此hibernate针对大多数主流的数据库提供了方言,show_sql为true表示要在控制台上打印出sql语句。至于mapping,是之后加上去的,稍后将做解释。
现在hibernate的数据库连接已经配置好了,然后我们创建java实体类,新建一个名字为test的包,创建一个Student类,代码如下:
package test;
public class Student {
private String stuID;
private String stuName;
public Student() {
}
public String getStuID() {
return stuID;
}
public void setStuID(String stuID) {
this.stuID = stuID;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
}
然后再test包下创建一个Student.hbm.xml的配置文件,具体内容如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2013-11-26 21:37:44 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="test.Student" table="student">
<id name="stuID" type="java.lang.String">
<column name="stuID" />
<generator class="assigned" />
</id>
<property name="stuName" type="java.lang.String">
<column name="stuName" />
</property>
</class>
</hibernate-mapping>
到现在就可以理解hibernate.cfg.xml里的mapping的来历了。Student.hbm.xml指定了test.Student类与数据库中的student表进行映射,其中id制定了逐渐,name为java实体类的属性,column为对应的表的字段。
到此为止,所有的准备工作都做好了,下面我们开始写一个测试类,代码如下:
package test;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
public class Test {
public static void main(String[] args) {
try {
//load configuration file, the default is hibernate.cfg.xml
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties())
.buildServiceRegistry();
//get session factory
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
//open a session
Session session=sessionFactory.openSession();
//build an entity
Student student=new Student();
student.setStuID("100000");
student.setStuName("张三");
session.beginTransaction();
session.save(student);
session.getTransaction().commit();
session.close();
} catch (HibernateException e) {
e.printStackTrace();
}
}
}
在Hibernate4之前的版本中,SessionFactory的获取是:
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
但是在hibernate4中该方法已经被废弃。然后我们执行该类,即可在数据库中插入一条新的记录。注意在commit的时候将student持久化。操作完成后要将session关闭。