Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
Hibernate的核心接口一共有5个,分别为: Session、SessionFactory、Transaction、Query和 Configuration。这 5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。
下面写一个最简单的案例(以学生类为例):
Student.java
- package cn.zxf.domain;
- import java.io.Serializable;
- public class Student implements Serializable{
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- /** 学生的编号 */
- private int id;
- /** 学生的姓名 */
- private String name;
- /** 学生的班级 */
- private String classes;
- /** 学生的成绩*/
- private String score;
- public Student() {
- }
- public Student(String name, String classes, String score) {
- this.name = name;
- this.classes = classes;
- this.score = score;
- }
- 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 String getClasses() {
- return classes;
- }
- public void setClasses(String classes) {
- this.classes = classes;
- }
- public String getScore() {
- return score;
- }
- public void setScore(String score) {
- this.score = score;
- }
- }
package cn.zxf.domain;
import java.io.Serializable;
public class Student implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
/** 学生的编号 */
private int id;
/** 学生的姓名 */
private String name;
/** 学生的班级 */
private String classes;
/** 学生的成绩*/
private String score;
public Student() {
}
public Student(String name, String classes, String score) {
this.name = name;
this.classes = classes;
this.score = score;
}
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 String getClasses() {
return classes;
}
public void setClasses(String classes) {
this.classes = classes;
}
public String getScore() {
return score;
}
public void setScore(String score) {
this.score = score;
}
}
Student.hbm.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <!-- Hibernate对象关系映射文件的根元素 -->
- <hibernate-mapping>
- <!-- class元素用来定义一个持久化类及对应的数据库表 -->
- <class name="cn.zxf.domain.Student" table="student">
- <!--
- id元素:指定每个持久化类的唯一标识(即对象标识符OID)到数据库表主键字段的映射
- name属性:指定持久化类的OID名
- column属性:指定数据库表主键字段名。此属性的名和映射到数据库表的字段名相同时,可省略
- type属性:指定主键映射时所使用的Hibernate类型名。此属性的类型为基本数据类型和String类型时,可省略
- -->
- <id column="id" name="id" type="integer">
- <!-- generator元素:指定对象标识符的生成器名。
- native生成器把对象标识符值的生成工作交由底层数据库来完成
- -->
- <generator class="native"/>
- </id>
- <property name="name"></property>
- <property name="classes"></property>
- <property name="score"></property>
- </class>
- </hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Hibernate对象关系映射文件的根元素 -->
<hibernate-mapping>
<!-- class元素用来定义一个持久化类及对应的数据库表 -->
<class name="cn.zxf.domain.Student" table="student">
<!--
id元素:指定每个持久化类的唯一标识(即对象标识符OID)到数据库表主键字段的映射
name属性:指定持久化类的OID名
column属性:指定数据库表主键字段名。此属性的名和映射到数据库表的字段名相同时,可省略
type属性:指定主键映射时所使用的Hibernate类型名。此属性的类型为基本数据类型和String类型时,可省略
-->
<id column="id" name="id" type="integer">
<!-- generator元素:指定对象标识符的生成器名。
native生成器把对象标识符值的生成工作交由底层数据库来完成
-->
<generator class="native"/>
</id>
<property name="name"></property>
<property name="classes"></property>
<property name="score"></property>
</class>
</hibernate-mapping>
hibernate.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">
- <!-- Generated by MyEclipse Hibernate Tools. -->
- <hibernate-configuration>
- <session-factory>
- <!-- SQL方言,这边设定的是MySQL -->
- <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
- <!-- JDBC驱动程序 -->
- <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
- <!-- JDBC URL -->
- <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
- <!-- 用户名 -->
- <property name="connection.username">root</property>
- <!-- 密码 -->
- <property name="connection.password">123</property>
- <!-- 显示实际操作资料库时的SQL -->
- <property name="show_sql">true</property>
- <property name="format_sql">true</property>
- <property name="hibernate.hbm2ddl.auto">update</property>
- <!-- 物件与资料库表格映射文件 -->
- <mapping resource="cn/zxf/domain/Student.hbm.xml"/>
- </session-factory>
- </hibernate-configuration>
<?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"> <!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory> <!-- SQL方言,这边设定的是MySQL --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- JDBC驱动程序 --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- JDBC URL --> <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property> <!-- 用户名 --> <property name="connection.username">root</property> <!-- 密码 --> <property name="connection.password">123</property> <!-- 显示实际操作资料库时的SQL --> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 物件与资料库表格映射文件 --> <mapping resource="cn/zxf/domain/Student.hbm.xml"/> </session-factory> </hibernate-configuration>