Hibernate 是一个持久层框架,是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,
它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员
可以随心所欲的使用对象编程思维来操纵数据库。
Hibernate可以应用在任何使用JDBC的场合
Hibernate 开发环境搭建步骤:
1) 创建一个 web工程
2) 导入相关的 jar包
3) 创建一个 Student类
这个类为普通的Java类,写入getter setter方法。
package com.hibernate.vo;
public class Student {
private Integer studentId;//必须提供一个ID
private String studentName;
private String homeAddress;
private String schoolAddress;
private Integer age;
public Integer getStudentId() {
return studentId;
}
public void setStudentId(Integer studentId) {
this.studentId = studentId;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public String getHomeAddress() {
return homeAddress;
}
public void setHomeAddress(String homeAddress) {
this.homeAddress = homeAddress;
}
public String getSchoolAddress() {
return schoolAddress;
}
public void setSchoolAddress(String schoolAddress) {
this.schoolAddress = schoolAddress;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(Integer studentId, String studentName, String homeAddress,
String schoolAddress, Integer age) {
super();
this.studentId = studentId;
this.studentName = studentName;
this.homeAddress = homeAddress;
this.schoolAddress = schoolAddress;
this.age = age;
}
}
4) 写一个Student类的映射文件
写一个 *.hbm.xml的配置文件,*表示要映射的实体类(Student)
导入约束(如果没有可复制的,需要与你导入的 jar包的版本一致)
找到 hibernate的核心包,我这里是hibernate3.jar。打开,找到dtd文件
选择 hibernate-mapping-3.0.dtd,打开即可找到约束
类名映射表名、属性映射列名
每个实体类都要一个映射文件,需放在与实体类同一个地方
<?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-mapping package = "com.hibernate.vo">
<class name = "Student" table = "student_sh">
<!-- type属性和column属性都可以不写 -->
<!-- type属性表示属性类型,不写会自动扫描。column属性映射到表中的列名,不写则自动补充为属性名 -->
<id name = "studentId" type = "java.lang.Integer" column = "ID">
<generator class="increment"></generator>
</id>
<property name="studentName" type="java.lang.String" column="name"></property>
<property name="homeAddress" type="java.lang.String" column="home"></property>
<property name="schoolAddress" type="java.lang.String" column="school"></property>
<property name="age" type="java.lang.Integer" column="age"></property>
</class>
</hibernate-mapping>
5) 写一个Hiberante的核心配置文件
必须使用 hibernate.cfg.xml作为主配置文件名,放在src目录下。
导入约束(如果没有可复制的,需要与你导入的 jar包的版本一致)
找到 hibernate的核心包,我这里是hibernate3.jar。打开,找到dtd文件
选择hibernate-configuration-3.0.dtd,打开即可找到约束
根据自己的数据库类型配置用于连接数据库的基本信息包括方言,可选配置可写可不写
指定对象映射文件的位置
<?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>
<!-- 配置数据库方言,告诉hibernate将对象的操作转换成底层数据库支持的标准的sql语句 -->
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<!-- 连接数据库的基本信息,根据自动的数据库类型填写-->
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="connection.username">scott</property>
<property name="connection.password">tiger</property>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<!-- 可选配置 -->
<!-- 自动建表 -->
<property name="hbm2ddl.auto">update</property>
<!-- 显示Hibernate持久化操作所生成的SQL语句 -->
<property name="show_sql">true</property>
<!-- 将SQL脚本进行格式化后再输出 -->
<property name="hibernate.format_sql">true</property>
<!-- 配置映射文件的位置 -->
<mapping resource = "com/hibernate/vo/student.hbm.xml"/>
</session-factory>
</hibernate-configuration>
6) 测试
具体看测试类代码
package com.hibernate.vo;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class StudentHB {
public static void main(String[] args) {
//实例化一个 Configuration 调用该方法默认加载 src/hibernate.cfg.xml
Configuration cfg = new Configuration().configure();
//生成接口对象
SessionFactory sf = cfg.buildSessionFactory();
//从工厂中获取并打开session
Session session = sf.openSession();
//开启事务
Transaction tr = session.beginTransaction();
Student s = new Student(01, "xiao", "jiangxi", "hunan", 24);//创建对象
Student s2 = new Student(02, "Linda", "beijing", "xiaoxue", 24);
try {
session.save(s);//保存对象
session.persist(s2);
tr.commit();
System.out.println("success");
} catch(HibernateException hs) {
hs.printStackTrace();
tr.rollback();//出错则回滚,保证事务的原子性
} finally {
session.close();//关闭资源
sf.close();
System.out.println("over");
}
}
}
运行完后,就可以去数据库中查看数据是否成功保存了。运行前记得打开数据库的监听器等服务,如果在主配置文件中没配置自动建表的,需要手动去数据库中建表