本节我们将演示如何搭建一个 Hibernate 工程。

搭建 Hibernate 工程需要以下 7 步:

下载 Hibernate 开发包
新建工程
创建数据库表
创建实体类
创建映射文件
创建 Hibernate 核心配置文件
测试

1. 下载 Hibernate 开发包

浏览器访问 Hibernate 官网 下载 Hibernate(以 hibernate-release-5.5.3.Final 为例)开发包。

目录介绍

下载完成后,解压 hibernate-release-5.5.3.Final.zip,可得到以下目录结构。
Hibernate 文件夹中,包含以下 3 个目录:
documentation:Hibernate 的开发文档;
lib:Hibernate 相关的依赖;
project:Hibernate 官方给出的示例工程。

在 lib 目录下有一个 required 文件夹,其中包含了 Hibernate 5 必须依赖的 jar 包,如下图。

2. 新建工程

1. 以 IntelliJ IDEA 为例,新建一个名为 hibernate-demo 的 Java 工程


换成自己本机maven

2 分别在main和test中创建ressources包




2 依赖文件pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.hibernate</groupId><artifactId>hibernate-demo2</artifactId><version>1.0-SNAPSHOT</version><name>hibernate-demo2</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><!--hibernate依赖--><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.3.7.Final</version></dependency><!--mysql依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.32</version></dependency></dependencies><build><!--读取配置文件--><resources><resource><directory>src/main/resources</directory></resource><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources></build>
</project>

3. 创建数据库表

执行以下 SQL 语句,在 bianchengbang_jdbc 数据库中创建 user 表,并向该表中添加测试数据。

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (`id` int NOT NULL AUTO_INCREMENT,`user_id` varchar(255) DEFAULT NULL,`user_name` varchar(255) DEFAULT NULL,`password` varchar(255) DEFAULT NULL,`email` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;INSERT INTO `user` VALUES ('1', '001', 'admin', 'admin', '12345678@qq.com');
INSERT INTO `user` VALUES ('2', '002', 'user', '123456', '98765432@qq.com');

4. 创建实体类

在 hibernate-demo 工程的 net.biancheng.www.po 包下,创建一个与 user 表对应的实体类 User,代码如下。

package net.biancheng.www.po;public class User {private int id;private String userId;private String userName;private String password;private String email;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUserId() {return userId;}public void setUserId(String userId) {this.userId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return "net.biancheng.www.po.User{" +"id=" + id +", userId='" + userId + '\'' +", userName='" + userName + '\'' +", password='" + password + '\'' +", email='" + email + '\'' +'}';}
}

5. 创建映射文件

单单一个实体类 User 是不具备持久化操作的能力的,为了使该类具备这种能力,就需要将 User 实体类映射到数据库的某一张表中,并将实体类中的属性与数据表的字段相对应,这些都需要在映射文件中配置。

Hibernate 的映射文件的命名规则如下:

[实体类名].hbm.xml
例如,实体类 User 的映射文件就可以命名为 User.hbm.xml。

在 net.biancheng.www.mapping 包下,创建 User 的映射文件 User.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><!-- name:类的全路径:--><!-- table:表的名称:(可以省略的.使用类的名称作为表名.)--><class name="net.biancheng.www.po.User" table="user" schema="bianchengbang_jdbc"><!-- 主键--><id name="id" column="id"><!--主键生成策略--><generator class="native"></generator></id><!--type:三种写法--><!--Java类型 :java.lang.String--><!--Hibernate类型:string--><!--SQL类型 :不能直接使用type属性,需要子标签<column>--><!--<column name="name" sql-type="varchar(20)"/>--><property name="userId" column="user_id" type="java.lang.String"/><property name="userName" column="user_name"/><property name="password" column="password"/><property name="email" column="email"/></class>
</hibernate-mapping>

6. 创建 Hibernate 核心配置文件

Hibernate 框架是对 JDBC 的封装,也需要对 JDBC 连接数据库所需的 url、driver、username 和 password 等 4 个基本参数进行配置,Hibernate 一般是通过配置文件 hibernate.cfg.xml 来指定的,该文件被称为 Hibernate 的核心配置文件。

在 Hibernate 工程的 src 目录下,新建一个 hibernate.cfg.xml 文件,配置如下。

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration><session-factory><!--使用 Hibernate 自带的连接池配置--><property name="connection.url">jdbc:mysql://localhost:3306/bianchengbang_jdbc</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">root</property><property name="connection.driver_class">com.mysql.jdbc.Driver</property><!--hibernate 方言--><property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property><!--打印sql语句--><property name="hibernate.show_sql">true</property><!--格式化sql--><property name="hibernate.format_sql">true</property><!-- 加载映射文件 --><mapping resource="net/biancheng/www/mapping/User.hbm.xml"/></session-factory>
</hibernate-configuration>

7. 测试

在 net.biancheng.www.test 包下,创建一个名为 AppTest 的测试类,并在该测试类中创建一个测试方法 testQuery(),使用 Hibernate 实现对数据库的查询,代码如下。

package com.hibernate;import com.hibernate.entity.User;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.junit.Test;/*** Unit test for simple App.*/
public class AppTest {@Testpublic void testInit() {StandardServiceRegistry registry = null;SessionFactory sessionFactory = null;Session session = null;Transaction transaction = null;try {//初始化注册服务对象registry = new StandardServiceRegistryBuilder().configure()//默认加载hibernate.cfg.xml,如果配置文件名称被修改:configure("被修改的名字").build();//获取Session工厂sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();//从工厂创建Session连接session = sessionFactory.openSession();//开启事务transaction = session.beginTransaction();//创建事例User user = new User();user.setUserName("zhang");user.setPassword("123");session.save(user);//提交事务transaction.commit();} catch (HibernateException e) {e.printStackTrace();//回滚事务transaction.rollback();} finally {if(session!=null && session.isOpen())//关闭sessionsession.close();}}
}

8 Hibernate连接封装成工具类

package com.hibernate.util;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;/*** @author ZCL* @Description* @date 2023/5/18 18:12*/public class HibernateUtil {//使用ThreadLocal模式初始化Sessionprivate static ThreadLocal<Session> threadLocal = new ThreadLocal<>();private static StandardServiceRegistry registry;private static SessionFactory sessionFactory;//静态模块初始化Session工厂static{//初始化注册服务对象registry = new StandardServiceRegistryBuilder().configure()//默认加载hibernate.cfg.xml,如果配置文件名称被修改:configure("被修改的名字").build();//获取Session工厂sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();}//获取Session的方式public static Session getSession(){//从线程中获取sessionSession session= threadLocal.get();//判断session是否存在if(null==session || !session.isOpen()){//不存在从工厂中获取session//判断工厂是否存在,不存在重新加载if(null==sessionFactory)buildSessionFactory();//从工厂获取sessionsession=(null!=sessionFactory)? sessionFactory.openSession() : null;//放入线程threadLocal.set(session);}return session;}//加载session工厂private  static void  buildSessionFactory(){//初始化注册服务对象registry = new StandardServiceRegistryBuilder().configure()//默认加载hibernate.cfg.xml,如果配置文件名称被修改:configure("被修改的名字").build();//获取Session工厂sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();}//关闭sessionpublic static void closeSession(Session session){if(null != session && session.isOpen())session.close();}
}

hibernate入门项目(一)相关推荐

  1. 杨老师课堂之JavaEE三大框架Hibernate入门第一课

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/kese7952/article/details/80998421 本篇任务 1. 使用Hiberna ...

  2. Hibernate——入门

    Hibernate是什么? Hibernate是一个框架(framework): Hibernate是一个ORM框架(Object Relation Mapping,对象关系映射): Hibernat ...

  3. SSH Chapter 04 Hibernate 入门

    SSH Chapter 04 Hibernate入门 笔记 Hibernate 知识体系图: 本章目标: 理解类和表的映射关系 掌握单表的增删改 掌握按主键查询 理解持久化对象的状态及其转换 技术内容 ...

  4. Hibernate框架基础——Hibernate入门

    Hibernate入门 Hibernate介绍 Hibernate是一个基于jdbc的开源的持久化框架,是一个优秀的ORM实现,它很大程度的简化了dao层编码工作.Hibernate对JDBC访问数据 ...

  5. 易百教程Oracle,Hibernate入门程序

    全屏 在第一个Hibernate入门示例程序中,我们将使用eclipse IDE创建一个简单的hibernate应用程序示例.要在Eclipse IDE中创建第一个hibernate应用程序,需要遵循 ...

  6. vue2 + vue-router + vuex + iview 入门项目

    简单的vue2 + vue-router + vuex + iview 入门项目,一个移动端平台的简易考试系统.灵感来源于近期工作项目中开发的一套考试平台系统.欢迎大家来issues指出错误共同进步. ...

  7. Spring Boot CLI 入门项目

    看此文: https://blog.csdn.net/bcbobo21cn/article/details/109063292 运行spring boot cli程序:运行了如下: 访问网页看到如下: ...

  8. 最简单最详细的SpringBoot入门项目——HelloWorld

    最详细的SpringBoot入门项目--HelloWorld 关于SpringBoot的介绍以及优点这里就不说了,想了解的可以直接点击这里 Spring Boot百度百科 接下来我们直奔主题,开始用S ...

  9. 以太网实习_物联网通信硬件入门项目—光纤收发器(1)——实习内容,适用范围,技术及收益...

    嵌程似锦 公众号 项目实践 连载 不少同学常常为如何获得项目经验而发愁,从本文开始,嵌程似锦工作室将连载光纤收发器项目的的开发过程,供硬件开发者入门实习.这是一个非常好的硬件入门项目,适合通信,电子等 ...

最新文章

  1. 【问题收录】[ubuntu]startx doesn't work
  2. Google联手Facebook 要在AI研究上搞什么大事?
  3. Windows环境下32位汇编程序设计C版code--第四章
  4. java vm art_Android虚拟机art流程:JavaVM 和 JNIEnv 的初始化 - 神农笔记
  5. 杭电2086,数学归纳法
  6. Day01----jsp
  7. python连接阿里云数据库_Python连接MySQL数据库教程演示
  8. 磁共振影像分析之: 基于FSL的VBM分析(2)
  9. Mac修改hosts文件 配置一些IP地址和域名的映射
  10. linux mint 下如何制作win7启动盘
  11. 华为光纤猫HG8240破解,开启路由功能表
  12. 【LabVIEW懒人系列教程-小白入门】1.13LabVIEW程序结构之事件结构
  13. 框架效应——说话的学问
  14. Unity3D初级工程师面试指导
  15. Android中微信抢红包助手的实现
  16. 手把手教小白部署vue教程
  17. 信息技术计算机老师继续教育培训心得,信息技术课教师继续教育心得体会
  18. 今日早报 每日精选12条新闻简报 每天一分钟 知晓天下事 8月17日
  19. repeatation翻译_半导体专业术语英语及汉语翻译
  20. 阿里架构总监一次讲透中台架构,13页PPT精华详解,建议收藏!

热门文章

  1. 手机访问电脑本地项目
  2. python实现微信聊天机器人
  3. 造血干细胞扩增、转染以及基因编辑优化解决方案
  4. 【思维导图】零基础如何把握Python学习方向
  5. 5.2.2、方法重写与隐藏
  6. python课程大全从入门到进阶_Python好书从入门到进阶整理好送你
  7. Ajax提交post请求返回404错误
  8. 电商平台——性能测试
  9. 联想小新 Pad Plus 2023 款评测
  10. vue结合highlightjs实现代码高亮+行号