一:创建一个java工程
hibernate支持透明持久化,从这个角度来看,它没有侵入性。
所谓侵入性:没有侵入hibernate任何API所以它也叫轻量级框架,轻量级框架的好处就是没有侵入性。另外的一个好处是测试很非常简单,测试hibernate就像普通的java应用程序一样不需要什么环境只需要几个jar在写个main函数就可以了。
二:导入所需jar
导入jar文件,为了方便下次导入,所以建立一个自定义jar库,以后直接导入引用
创建方式:Window-Preferences-Java-Build Path --User Libraries ->New
名称不固定。需要注意的是下面的那个单选框不要选中,下一步为这个库导入所需jar
主要jar
* hibernae3.jar 核心jar
* HIBERNATE_HOME/lib/*.jar
* 数据库驱动
三:为工程引入把所创建的User Libeaies库
引入方式:
工程名称-Properties---Java Build Path ----Libraries ---Add Library 找到User Library 然后Next 选中所创建User Libeaies库
四: 在src目录下创建hibernate配置文件 hibernate.cfg.xml 为了便于调试最好加入log4j配置文件
<!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.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate_01</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="show_sql">true</property>
<mapping resource="com/xinyang/DaoImpl/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
五 定义实体类
package com.xinyang.DaoImpl;
import java.util.Date;
public class User {
private String id;
private String name;
private String password;
private Date createTime;
private Date expireTime;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getExpireTime() {
return expireTime;
}
public void setExpireTime(Date expireTime) {
this.expireTime = expireTime;
}
}
六:定义User实体类映射文件 描述实体类、映射名称可以随便命名 ,标准名称规范为:实体+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">
<hibernate-mapping >
<class name="com.xinyang.DaoImpl.User">
<id name="id">
<generator class="uuid"/><!-- 全局的唯一标识 配置生成策略-->
</id>
<property name="name"/> <!-- 普通属性用property -->
<property name="password"/>
<property name="createTime"/><!-- hibernate有一套java到数据库的映射机制根据属性自己配置字段的数据类型 -->
<property name="expireTime"/>
</class>
</hibernate-mapping>
这就是一个映射过程 O-R 映射 ORMpping技术 指的就是它,Hibernate是一个ORM框架 M不是mapping是mapper,ORM包含了很多技术其中之一就是ORMPPING 映射技术并且包含缓存机制
注:当然表名和列名可以重新命名 它们默认的和属性名一致,表明和实体类名一致
七 编写hbm2ddl工具类将实体类生成数据库表
package com.xinyang.hibernate;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
/**
* 生成表-
* @author Administrator
*-
*/
public class ExportDB {
public static void main(String[] args){
//用到Hibernate API Configuration 作用 :读取配置文件-hibernate.cfg.xml
// Configuration cfg=new Configuration(); 读取hibernate.properties文件
Configuration cfg=new Configuration().configure();
SchemaExport export=new SchemaExport(cfg);
export.create(true, true);
}
}
注意在生成之前 要把数据库建立起来 ,数据库名称它不会自动创建 在这里使用的是mysql数据库
create database hibernate_01;
use hibernate_01;
show tables;
八: 开发一个客户端
package com.xinyang.servlet;
import java.util.Date;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.xinyang.bean.Users;
public class Client {
public static void main(String[] args){
//读取hibernate.cfg.xml文件
Configuration cfg=new Configuration().configure();
//一个数据库对应一个sessionFactory
//创建SessionFactory
SessionFactory factory=cfg.buildSessionFactory();
//session对connection进行封装
org.hibernate.Session session=null;
try{
session=factory.openSession();
//开启事物
session.beginTransaction();
Users user=new Users();
user.setName("张三");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
session.save(user);
//提交事物
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
//回滚事物
session.getTransaction().rollback();
}finally{
if(session!=null){
if(session.isOpen()){
session.close();
}
}
}
}
}