Hibernate 快速开始示例

Hibernate是一个开放源代码对象关系映射ORM】框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

下面就如何快速搭建Hibernate环境,完成一个项目进行总结:

1.下载解压文件

官网下载地址:http://hibernate.org/orm/
   本地使用hibernate-release-4.3.8.Final.zip

2.创建项目

    【本地创建java项目hibernate_01作为示例】

3.导入必须依赖的jar包

 

 【Hibernate依赖的jar包】
  hibernate-release-4.3.8.Final/lib/antlr-2.7.7.jar
  hibernate-release-4.3.8.Final/lib/dom4j-1.6.1.jar
  hibernate-release-4.3.8.Final/lib/hibernate-commons-annotations-4.0.5.Final.jar
  hibernate-release-4.3.8.Final/lib/hibernate-core-4.3.8.Final.jar
  hibernate-release-4.3.8.Final/lib/hibernate-jpa-2.1-api-1.0.0.Final.jar
  hibernate-release-4.3.8.Final/lib/jandex-1.1.0.Final.jar
  hibernate-release-4.3.8.Final/lib/javassist-3.18.1-GA.jar
  hibernate-release-4.3.8.Final/lib/jboss-logging-3.1.3.GA.jar
  hibernate-release-4.3.8.Final/lib/jboss-logging-annotations-1.2.0.Beta1.jar
  hibernate-release-4.3.8.Final/lib/jboss-transaction-api_1.2_spec-1.0.0.Final.jar
 【mysql数据库连接jar包】
  mysql-connector-java-5.1.30-bin.jar】

 

4.创建测试数据库

 

 

CREATE DATABASE hiber;
    USERhiber;

 

 

5.配置映射文件[Event.hbm.xml]

 

  映射文件主要是用来描述java中的实体类和数据库中的表的对应关系。

 

  映射文件命名规范:ClassName.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!-- 
      定义一个class 
      1.name属性值为class的全名称,同时配置在数据库中映射的表名称table的值
      2.如果table和java类名称一致,table属性可省略
    -->
   <class name="com.lcd.model.Event" table="events" >
       <!-- id用来配置实体类的主键,column对应数据库中列名称 -->
       <id name="id" column="eid">
             <!-- generator主键生成策略,native表示本地化~~由数据库决定 -->
             <generator class="native"/>
       </id>

       <!-- property的name配置实体类的普通属性,type表示属性类型,column表示数据库中对应列名称 -->
       <property name="date" type="timestamp" column="EVENT_DATE" />
       <!-- 如果属性和数据库中列名称一致,column省略 -->
       <property name="title" />

 

   </class>

 

</hibernate-mapping>

7.创建Hibernate主配置文件【hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <!-- 配置sessionfactory -->
    <session-factory>

        <!-- 连接配置 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hiber</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>

        <!-- jdbc连接池 -->
        <property name="connection.pool_size">1</property>

        <!-- SQL 方言 :使用mysql5数据库的sql语言规范-->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>

        <!-- 显示由hibernate生成的sql语句 -->
        <property name="show_sql">true</property>
        <!-- 格式化按照标准结构显示sql语句 -->
        <property name="format_sql">true</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache -->
        <property name="cache.provider_class">
         org.hibernate.cache.internal.NoCacheProvider
        </property>

        <!-- 更新或者创建数据库对象 -->
        <property name="hbm2ddl.auto">update</property>

  <!-- 包含映射文件 -->
        <mapping resource="com/lcd/model/Event.hbm.xml"/>

 

 

    </session-factory>

 

 

</hibernate-configuration>

 

6.创建实体类【Event.java】

package com.lcd.model;

import java.util.Date;
/**
 * 实体类
 * @author Administrator
 *
 */
public class Event {
	private Long id;// 编号
	private String title;// 事件主题                                                                                                   
	private Date date;// 发生时间
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public Date getDate() {
		return date;
	}
	public void setDate(Date date) {
		this.date = date;
	}
	@Override
	public String toString() {
		return "Event [id=" + id + ", "
				+ "title=" + title + ", "
				+ "date=" + date + "]";
	}
}

测试类【Main.java】

package com.lcd.main;

import java.util.Date;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import com.lcd.model.Event;
/**
 * 测试类
 * @author Administrator
 *
 */
public class Main {
	public static void main(String[] args) {
		//1.加载配置文件初始化sessionFactory
		SessionFactory factory = 
				new Configuration().configure().buildSessionFactory();     
		//2.获取session,保存对象【事务】
		Session session = factory.openSession();//打开session
		session.beginTransaction();//开启事务
		
		Event e = new Event();
		e.setDate(new Date());
		e.setTitle("测试Hibernate事件");
		
		session.save(e);//保存对象
		
		//3.关闭session/sessionFactory
		session.getTransaction().commit();//提交事务
		session.close();
		factory.close();
	}
}

附:测试方法2——保持以上步骤不变,只替换测试类,如下所示:

增加工具类HibernateUtils.java

package com.lcd.utils;

import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
/**
 * HibernateUtils工具类
 * @author Administrator
 *
 */
public class HibernateUtils {
	// 方法回调,通过本类的方法,构建sessionFactory对象
    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // 通过hibernate.cfg.xml配置文件,创建一个sessionFactory对象
        	Configuration cfg = new Configuration().configure();
        	StandardServiceRegistry serviceRegistry 
        			= new StandardServiceRegistryBuilder()
        				.applySettings(cfg.getProperties()).build();
        	return cfg.buildSessionFactory(serviceRegistry);
        }
        catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    /**
     * 获取sessionFactry对象
     * @return
     */
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

替换测试类【Main2.java

package com.lcd.main;

import java.util.Date;

import org.hibernate.Session;

import com.lcd.model.Event;
import com.lcd.utils.HibernateUtils;

public class Main2 {
	public static void main(String[] args) {
		
		Session session = HibernateUtils.
				getSessionFactory().getCurrentSession();
		
		session.beginTransaction();
		
		/*
		 * session增删改查{CRUD}
		 */
		Event e = new Event();
		//e.setTitle("事件触发");
		//e.setDate(new Date());
		/*
		 *  保存
		 */
		// session.save(e);// 面向对象的保存
		/*
		 *  修改
		 */
		//e.setTitle("老王去了隔壁");
		//e.setId(new Long(1));
		//session.update(e);
		/*
		 * 查询get/load
		 * 1.查询的对象不存在时
		 * get查询返回null
		 * load查询抛出异常
		 * 2. 查询到对象后
		 * get查询:在查询时直接发送查询SQL进行对象获取
		 * load查询:在查询的对象第一次使用的时候,发送SQL语句进行对象获取
		 */
		// e = (Event) session.get(Event.class, new Long(2));
	    //e = (Event) session.load(Event.class, new Long(1));
		//System.err.println(e);
		
		/*
		 * 删除
		 * 删除带有id主键值的对象
		 */
		e.setId(new Long(1));
		session.delete(e);
		
		session.getTransaction().commit();
	}
}



以上就是一个Hibernate框架搭建的基本流程,Hibernate通过配置文件简化了原有java开发中常用的映射类Mapper,它通过配置文件自动创建对应的数据库关系,大大提高了开发效率。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值