Hibernate搭建开发环境

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/pan_junbiao/article/details/100895044

Hibernate作为一个优秀的持久化层框架,充分体现了ORM的设计理念,提供了高效的对象到关系型数据库的持久化服务。下面将介绍如何搭建Hibernate的开发环境。

1、下载相关jar包

1.1 下载Hibernate

从Hibernate的官方网站获取所需的jar包,官方网址为http://www.hibernate.org,在该网站可以免费获取Hibernate的帮助文档和jar包。

(1)Hibernate的官方网站。

(2)选择稳定的Hibernate版本。

(3)点击下载。

1.2 下载JDBC数据库驱动

本示例以MySQL数据库为例。

(1)进入下载MySQL数据库驱动的地址:https://dev.mysql.com/downloads/connector/j/

选择:Platform Independent

TAR包是Linux操作系统下的,ZIP包是Windows操作系统下的,这里我们选择ZIP包。

2、搭建Hibernate开发环境

首先创建一个Java项目,并添加上述下载的jar包文件。

(1)解压下载后的Hibernate文件,将目录:hibernate-release-5.4.4.Final\lib\required 下的所有jar包文件添加到项目中。

(2)解压下载后的JDBC数据库驱动文件,将mysql-connector-java-8.0.17.jar文件添加到项目中。

2.1 Hibernate配置文件

Hibernate通过读取默认的XML配置文件 hibernate.cfg.xml 加载数据库的配置信息,该配置文件默认放于项目的根目录下(src目录下)。

【示例】连接应用的MySQL数据库,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">
 <hibernate-configuration>
 	<session-factory>
 		<!-- 数据库驱动 -->
		<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
		<!-- 数据库连接的URL -->
		<property name="connection.url">jdbc:mysql://localhost:3306/db_admin?useSSL=false&amp;serverTimezone=GMT%2b8</property>
		<!-- 数据库连接用户名 -->
		<property name="connection.username">root</property>
		<!-- 数据库连接密码 -->
		<property name="connection.password">123456</property>
		<!-- Hibernate方言 -->
		<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
		<!-- 打印SQL语句 -->
		<property name="show_sql">true</property>
		<!-- 映射文件  -->
		<mapping resource="com/pjb/entity/User.hbm.xml"/>
 	</session-factory>
 </hibernate-configuration>

2.2 编写Hibernate初始化类

Session对象是Hibernate中数据库持久化操作的核心,它将负责Hibernate所有的持久化操作,通过它开发人员可以实现数据库基本的增、删、改、查的操作。而Session对象又是通过SessionFactory对象获取的,那么SessionFactory对象又是如何创建的呢?可以通过Configuration对象创建SessionFactory,关键代码如下:

Configuration cfg = new Configuration().configure(); // 加载Hibernate配置文件
factory = cfg.buildSessionFactory();                 // 实例化SessionFactory

【示例】创建HibernateUtil类,用于实例化对Hibernate的初始化。

package com.pjb.hibernate;

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

/**
 * Hibernate公共类
 * @author pan_junbiao
 **/
public class HibernateUtil {
    private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();//ThreadLocal对象
    private static SessionFactory sessionFactory = null;//SessionFactory对象
    //静态块
	static {
    	try {
    		// 加载Hibernate配置文件
			Configuration cfg = new Configuration().configure();
			sessionFactory = cfg.buildSessionFactory();
		} catch (Exception e) {
			System.err.println("创建会话工厂失败");
			e.printStackTrace();
		}
    }
	/**
     *	获取Session
     *  @return Session
     *  @throws HibernateException
     */
    public static Session getSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
		if (session == null || !session.isOpen()) {
			if (sessionFactory == null) {
				rebuildSessionFactory();
			}
			session = (sessionFactory != null) ? sessionFactory.openSession(): null;
			threadLocal.set(session);
		}

        return session;
    }
	/**
     * 重建会话工厂
     */
	public static void rebuildSessionFactory() {
		try {
			// 加载Hibernate配置文件
			Configuration cfg = new Configuration().configure();
			sessionFactory = cfg.buildSessionFactory();
		} catch (Exception e) {
			System.err.println("创建会话工厂失败");
			e.printStackTrace();
		}
	}
	/**
	 * 获取SessionFactory对象
	 * @return SessionFactory对象
	 */
	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}
	/** 
     *	关闭Session
     *  @throws HibernateException
     */
    public static void closeSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        threadLocal.set(null);
        if (session != null) {
            session.close();//关闭Session
        }
    }
}

2.3 编写持久化类

在Hibernate中持久化类是Hibernate操作的对象,也就是通过对象-关系映射(ORM)后数据库表所映射的实体类,用来描述数据库表的结构信息。在持久化类中的属性应该与数据库表中的字段相匹配。

【示例】创建名称为User的JavaBean。

package com.pjb.entity;

/**
 * 用户信息实体类
 * @author pan_junbiao
 **/
public class User
{
    private int id;        //用户编号
    private String name;   //用户姓名
    private String blog;   //博客地址
    private int age;       //年龄
    private String remark; //备注

    //默认的构造方法
    public User() {
    }

    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 getBlog()
    {
        return blog;
    }

    public void setBlog(String blog)
    {
        this.blog = blog;
    }

    public int getAge()
    {
        return age;
    }

    public void setAge(int age)
    {
        this.age = age;
    }

    public String getRemark()
    {
        return remark;
    }

    public void setRemark(String remark)
    {
        this.remark = remark;
    }
}

2.4 创建Hibernate映射

Hibernate的核心就是对象关系映射,对象和关系型数据库之间的映射通常是用XML文档来实现的。这个映射文档被设计成易读的,并且可以手工修改。映射文件的命名规则为*.hbm.xml,以User的持久化类的映射文件为例,代码如下:对User对象进行配置。

【示例】创建文件名为User.hbm.xml的配置文件,对User对象进行配置。

<?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>
    <class name="com.pjb.entity.User" table="tb_user">
        <!-- 用户编号id值 -->
        <id name="id" column="id" type="int">
            <!-- 持久化类的唯一性标识 -->
            <generator class="native"/>
        </id>
        <!-- 用户姓名 -->
        <property name="name" type="string" not-null="true" length="20">
            <column name="name"/>
        </property>
        <!-- 博客地址 -->
        <property name="blog" type="string" not-null="true" length="20">
            <column name="blog"/>
        </property>
        <!-- 年龄 -->
        <property name="age" type="int">
            <column name="age"/>
        </property>
        <!-- 备注 -->
        <property name="remark" type="string" length="50">
            <column name="remark"/>
        </property>
    </class>
</hibernate-mapping>

3、运行测试

【示例】使用Hibernate框架获取用户信息。

(1)在MySQL数据库中创建tb_user用户信息表,并添加一条用户数据。

-- 判断数据表是否存在,存在则删除
DROP TABLE IF EXISTS tb_user;
 
-- 创建“用户信息”数据表
CREATE TABLE IF NOT EXISTS tb_user
( 
	id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户编号',
	name VARCHAR(20) NOT NULL COMMENT '用户姓名',
	blog VARCHAR(50) NOT NULL COMMENT '博客地址',
	age INT COMMENT '年龄',
	remark VARCHAR(50) COMMENT '备注'
) COMMENT = '用户信息表';

-- 添加数据
INSERT INTO tb_user(NAME,blog,age,remark) 
VALUES('pan_junbiao的博客','https://blog.csdn.net/pan_junbiao',32,'您好,欢迎访问 pan_junbiao的博客!')

(2)创建GetUser类,使用Hibernate获取用户信息。

package com.pjb.main;

import org.hibernate.Session;
import com.pjb.hibernate.HibernateUtil;
import com.pjb.entity.User;

/**
 * 获取用户信息
 * @author pan_junbiao
 **/
public class GetUser
{
    public static void main(String[] args)
    {
        Session session = null;	 //声明Session对象
        try {
            //Hibernate的持久化操作
            session = HibernateUtil.getSession();//获取Session
            User user = (User) session.get(User.class, 1); //装载对象
            System.out.println("用户编号:"+user.getId());
            System.out.println("用户姓名:"+user.getName());
            System.out.println("博客地址:"+user.getBlog());
            System.out.println("年龄:"+user.getAge());
            System.out.println("备注:"+user.getRemark());
        } catch (Exception e) {
            System.out.println("对象装载失败");
            e.printStackTrace();
        } finally{
            HibernateUtil.closeSession();//关闭Session
        }
    }
}

执行结果:

猜你喜欢

转载自blog.csdn.net/pan_junbiao/article/details/100895044