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&useUnicode=true&characterEncoding=UTF-8&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框架实战精讲
感谢阅读!
有疑问或者认为有错误请留言,谢谢!