Hibernate3.x 1-快速搭建实例实验

前言

本实验将 仅通过导入相关jar包的方式手动搭建Hibernate简单实例,演示数据实体类->关系数据表,对象数据->相应数据记录,两个基本操作。

本实验在 IDEA 2021.2.2(UItimate Edition) 下运行。
使用以下软件、框架、环境版本:
Hibernate3.2.0.ga
你若问为什么2021年了还用Hibernate3.x?? 我也不知道的╮(╯▽╰)╭,憨憨学校要这么教,还要这么考,我也没办法
之所以使用3.x:
           1、课程大纲、内容要求
           2、新版本5.x的部分API、语法与3.x差异较大
亲测5.x会有API问题,3.2.0无问题,其它不知

JDK-1.8.0_301
该JDK版本可完全兼容。另外亲测使用JDK11、JDK14会报一些警告,但功能可以正常运行,本文使用JDK8进行相关实验

mysql-connector-java-8.0.26
请选择与MySQL数据库对应的版本,一般大版本下相互兼容。本文使用的MySQL数据库版本为8.0.25
具体的MySQL与mysql-connector-java的版本对应关系参见:
https://blog.csdn.net/xunxue1523/article/details/105524758

注:本文仅作为学习,不考虑任何生产环境,谨以此文记录所学,造福后人


环境配置

下载Hibernate3.2.0.ga

官网链接:不建议,太太太~慢,挂迅雷都慢
https://sourceforge.net/projects/hibernate/files/hibernate3/
在这里插入图片描述
请在CSDN,Hibernate3.2.0.ga资源链接:推荐,免费
https://download.csdn.net/download/SWULWJ/58845742

下载mysql-connector-java-8.0.26

官网链接:https://dev.mysql.com/downloads/connector/j/
选择平台独立,Platform Independent



实验步骤

创建项目

创建普通项目,选择“java模块”,SDK选择jdk8
若本机未安装,可以参考其他相关教程,
或者,使用IDEA的==“下载JDK”==选项,下载 jdk8
不用选择任何其他的“库和框架”直接创建项目 “Hibernate-leaning”
在这里插入图片描述
在这里插入图片描述
创建成功后,文件结构如图所示:
在这里插入图片描述

配置Hibernate

导入Hibernate库

选择 “文件”->“项目结构”
在这里插入图片描述
如下图所示操作,以添加库:
在这里插入图片描述
选择 “新建库”-> java

在这里插入图片描述
选择 hibernate-3.2.0.ga\lib下所有文件,以及 hibernate-3.2.0.ga下的hibernate3.jar文件
在这里插入图片描述
点击“确定”,然后修改其默认库名为Hibernate3.2.0.ga
在这里插入图片描述
然后点击“确定”,创建该新库

然后点击“添加”,导入该库
在这里插入图片描述
点击“确定”
在这里插入图片描述

导入mysql-connector

点击 “+”->“JAR”
在这里插入图片描述
选择jar文件
在这里插入图片描述

文件结构如图,则导入成功:
在这里插入图片描述
在这里插入图片描述

Hibernate配置文件引入

同样打开 ==“项目结构”->“Facet”==添加Hibernate配置文件
如图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置成功后,项目结构如图,并删除无用的部分xml内容
在这里插入图片描述
<session-factory></session-factory>中添加:

    <!-- 教材中使用的驱动为com.mysql.jdbc.Driver, 但是在适配新版本MySQL数据库的jdbc中该驱动已被弃用。
         所以, 的应修改为使用com.mysql.cj.jdbc.Driver作为驱动。
         同时, 使用新的URL规范来指明数据库位置。
    -->
    <!-- 旧版本
        <property name="hibernate.connection.url">jdbc:mysql://ip/数据库名称</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    -->
    <property name="hibernate.connection.url">jdbc:mysql://ip:3306/数据库名称?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=GMT%2B8</property>
    <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">mysql</property>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

创建相关的类

创建数据实体类

src路径下创建软件包路径com.example.hibernate.user
创建User.java文件

package com.example.hibernate.user;

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.java同级目录下创建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.example.hibernate.user.User">
        <id name="id">
            <!--主键生成规则(自动递增,手动生成,UUID等等)-->
            <generator class="uuid"/>
        </id>
        <!--
        <property name="name"  column="user_name"/>
            将类成员name映射到关系数据库中的user_name属性上,
            默认情况下column的值与name相同
        -->
        <property name="name"/>
        <property name="password"/>
        <property name="createTime"/>
        <property name="expireTime"/>
    </class>
</hibernate-mapping>

需要让Hibernate知道根据此规则创建相应的表,
还需在hibernate.cfg.xml文件中添加映射,即:

<mapping resource="com/example/hibernate/user/User.hbm.xml"/>

创建手动导入数据实体类

可以直接通过IDEA中的自动化构建,来使数据实体类映射生成到数据库中,形成数据表
本文以学习为目的,不进行如此操作,采用手动编写类方法来实现
User.java同级目录下创建ExportToDB类,如下:

package com.example.hibernate.user;

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class ExportToDB {

    public static void main(String[] args) throws Exception{
        //读取配置文件(默认读取hibernate.cfg.xml)
        Configuration cfg = new Configuration().configure();

        //创建SchemaExport对象(解析映射文件)
        SchemaExport export = new SchemaExport(cfg);

        //创建数据库表
        export.create(true,true);
    }
}

运行导入数据表

点击运行
在这里插入图片描述
输出如下图,表面正常
其中log4j警告是表示未开启日志记录的警告,可以不理会
在这里插入图片描述
查看对应的数据库
在这里插入图片描述
在这里插入图片描述
说明运行成功!

创建Client类

上述内容已经实现了使用Hibernate3.x将数据实体类转换到数据库中的数据表
接下来实现将具体的对象数据(客户端数据)转换成上述表的条目,并插入表中
User.java同级目录下创建Client.java

package com.example.hibernate.user;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import java.util.Date;

public class Client {
    public static void main(String[] args) {
        // 读取配置文件(默认读取hibernate.cfg.xml)
        Configuration cfg = new Configuration().configure();
        // 建立SessionFactory, 通过cfg拿到的xml中的<session-factory>
        SessionFactory factory = cfg.buildSessionFactory();
        // 取得Session, 完全不同于web中的Session概念
        Session session = null;
        try {
            // 通过factory拿到Session
            session = factory.openSession();
            // 开启事务(原子性)
            session.beginTransaction();

            User user = new User();
            // 不用考虑UUID,其自动生成
            user.setName("User1");
            user.setPassword("123456");
            user.setCreateTime(new Date());
            user.setExpireTime(new Date());

            // 保存事务
            session.save(user);
            // 提交事务
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            if (session != null) {
                // 回滚事务
                session.getTransaction().rollback();
            }

        } finally {
            // 关闭Session
            if (session != null) {
                if (session.isOpen()) {
                    session.close();
                }
            }
        }
    }
}

运行测试

src目录下创建文件log4j.properties,显示Hibernate生成的错误信息

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=warn, stdout

#log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug

### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug

### log just the SQL
#log4j.logger.org.hibernate.SQL=debug

### log JDBC bind parameters ###
#log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=debug

### log schema export/update ###
#log4j.logger.org.hibernate.tool.hbm2ddl=debug

### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug

### log cache activity ###
#log4j.logger.org.hibernate.cache=debug

### log transaction activity
#log4j.logger.org.hibernate.transaction=debug

### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug

### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace

hibernate.cfg.xml中添加

<property name="hibernate.show_sql">true</property>

以显示 sql信息,便于学习观察

点击运行
在这里插入图片描述
查看数据库,已经生成相应条目
在这里插入图片描述


结语

本文展示了不使用IDEA自带组件、框架,只是用相关的jar包快速搭建Hibernate3.x简单实例的过程,演示了数据表创建,数据条目加入的操作。

参考源

Hibernate视频教程(经典)王勇老师SSH框架实战精讲




感谢阅读!
有疑问或者认为有错误请留言,谢谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值