【Hibernate示例】

来源:互联网 发布:java中抽象类和接口 编辑:程序博客网 时间:2024/04/30 05:22

一:创建一个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();
    }
   }
  }
}
}