【java】Hibernate访问数据库

一、Hibernate访问数据库案例

Hibernate 是一个在 Java 社区广泛使用的对象关系映射(ORM)工具。它简化了 Java 应用程序中数据库操作的复杂性,并提供了一个框架,用于将对象模型数据映射到传统的关系型数据库。下面是一个简单的使用 Hibernate 访问数据库的示例案例。

首先,需要添加 Hibernate 和数据库驱动的依赖到项目。假如正在使用 Maven,需要添加如下依赖到 pom.xml 文件:

<!-- Hibernate core -->
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.6.9.Final</version>
</dependency><!-- JDBC Driver for your database (e.g., MySQL) -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version>
</dependency>

接下来,需要配置 Hibernate。这通常通过一个名为 hibernate.cfg.xml 的 XML 文件完成,该文件放置在应用的 classpath 下。示例如下:

<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration><session-factory><!-- Database connection settings --><property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property><property name="connection.url">jdbc:mysql://localhost:3306/your_database</property><property name="connection.username">your_username</property><property name="connection.password">your_password</property><!-- SQL dialect --><property name="dialect">org.hibernate.dialect.MySQL5Dialect</property><!-- Echo all executed SQL to stdout --><property name="show_sql">true</property><!-- Drop and re-create the database schema on startup --><property name="hbm2ddl.auto">update</property><!-- Mapped model classes --><mapping class="com.example.YourEntity"/></session-factory>
</hibernate-configuration>

在 Java 代码中,需要一个模型类(例如 YourEntity.java),它被映射到数据库表中:

import javax.persistence.*;@Entity
@Table(name = "your_entity")
public class YourEntity {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(name = "some_field")private String someField;// Getters and setters omitted for brevity
}

然后,可以使用 Hibernate 的 SessionFactory 来创建会话,执行数据库操作。这里是一个基本的使用例子:

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
public class HibernateExample {public static void main(String[] args) {// Configuring HibernateConfiguration configuration = new Configuration().configure();ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);// Opening a sessionSession session = sessionFactory.openSession();Transaction transaction = null;try {transaction = session.beginTransaction();// Creating a new entityYourEntity yourEntity = new YourEntity();yourEntity.setSomeField("Hello, Hibernate!");// Persisting the entity to the database// 持久化实体到数据库session.save(yourEntity);// 提交事务以确保数据被保存到数据库中transaction.commit();} catch (Exception e) {if (transaction != null) {transaction.rollback(); // 如果出现异常则回滚事务}e.printStackTrace();  // 打印异常栈信息} finally {if (session != null) {session.close();  // 在最后确保会话被关闭}}// 关闭SessionFactory(在应用结束时执行)sessionFactory.close();}
}

这个例子首先配置了 Hibernate 连接信息,然后创建了 SessionFactory,它是创建会话(`Session`)的工厂。每一个 Session 表示和数据库的一次对话,在一个 Session 中你可以执行数据库操作。我们创建实体对象 yourEntity,设置了其属性,并通过 session.save(yourEntity) 保存它到数据库。

事务 Transaction 被用来确保操作的原子性,如果在事务中发生了错误,我们可以回滚事务以避免脏数据写入数据库。任何对数据库的修改操作,如保存(save)、更新(update)或删除(delete),都应该在事务中进行。

最后,示例代码包括了异常处理,以及确保在操作结束后关闭会话和 SessionFactory。`SessionFactory` 是一个重量级的对象,最好在应用程序生命周期结束时关闭它。一个典型的做法是创建一个全局或静态的 SessionFactory 实例,并在需要时打开和关闭会话。

这个例子假设有相应的数据库和表已经创建好,并且实体类 YourEntity 已经正确映射了数据库表结构。这个简单的例子没有展示 Hibernate 查询语言(HQL)的强大性能和其他高级特性,但它为入门Hibernate提供了一个基本框架。在实际应用中,可能需要考虑更高级的配置和性能优化措施。 

二、Hibernate将对象模型数据映射到传统的关系型数据库

Hibernate是一个对象关系映射(ORM)框架,它允许开发人员通过面向对象的方式操作数据库。Hibernate将JAVA类映射到数据库表,并将Java数据类型映射到SQL数据类型,从而实现了Java应用程序中的对象模型数据与传统关系型数据库的映射。这种映射机制通常被称为O/R映射(Object/Relational mapping)。

使用Hibernate时,可以通过编写Java对象(被称为“实体”)并使用注解或XML文件来定义这些对象和数据库表之间的映射关系。Hibernate会负责在对象状态变化和数据库操作之间进行协调,提供以下优点:

1. 抽象数据访问层:Hibernate提供了一个数据访问的抽象层,不需要编写特定数据库的SQL语句,可以专注于业务逻辑。

2. 数据库无关性:由于Hibernate提供了SQL层的抽象,因此Hibernate应用程序可以轻松切换底层的数据库,而不需要对代码进行大量的修改。

3. 面向对象的优点:使用Hibernate后,可以享受面向对象编程的诸多优点,例如继承、多态和封装,这些通常在传统的关系数据库中不容易实现。

4. 简化复杂关联:处理数据库中的关联关系(如一对多、多对多)在传统的SQL编程中可能会相对复杂,Hibernate为这些关系提供了映射和查询的便利。

5. 数据缓存:Hibernate提供了一级和二级缓存机制,可以减少对数据库的访问次数,提高应用程序的性能。

6. 懒加载:Hibernate允许配置懒加载,即在实际需要数据之前不提前加载数据,从而提高系统的性能。

总而言之,Hibernate框架的设计使得Java开发人员可以通过面向对象的方法来处理持久化数据,而不必深入研究SQL语句以及数据库特定的细节,这简化了数据访问层的开发,同时允许我们更容易地进行数据持久化操作。

三、Maven

Maven 是一个项目管理和构建自动化工具,主要用于 Java 项目,但也可以被用于构建和管理其他语言编写的项目,比如 C#, Ruby 等。Maven 提供了一种标准化的构建过程,并通过其项目对象模型(Project Object Model, POM)和插件机制来管理构建的生命周期。

以下是 Maven 的一些主要功能:

1. 项目构建: Maven 能自动完成项目构建过程,包括编译、测试、打包和部署等步骤。

2. 依赖管理: Maven 使用中央仓库来管理依赖项,能自动下载所需的库文件,解决项目依赖关系。

3. 项目信息管理: Maven 可以管理项目的文档、网站、报告等资料。

4. 构建标准化: Maven 提供了一种标准化的构建生命周期和一套默认的目录结构,增加了项目之间的一致性。

5. 易于使用: Maven 设计了简单的项目配置文件(pom.xml),定义了项目的构建配置、依赖关系等信息。

6. 扩展性: Maven 可以通过插件扩展功能,社区提供了大量可复用的插件,用户也可以根据需要开发自己的插件。

总的来说,Maven 旨在简化构建过程,并提供了一种便捷的方式来管理项目的构建,依赖以及其他方面的需求。  

Maven 使用了一种中央化的方式来管理项目生命周期、构建、文档生成、报告、依赖、SCM等项目管理相关的任务。

如果想要使用 Maven,可以按照以下基本步骤操作:

1. 安装 Java: 确保开发环境已经安装了 Java 开发工具包 (JDK)。Maven 需要 JDK 才能运行。

2. 安装 Maven: 从官方网站下载 Maven,然后解压到本地计算机。确保将 Maven 的 bin 目录添加到系统环境变量 PATH 中,这样就可以在任何位置通过命令行工具使用 Maven 命令了。

3. 配置 Maven: 通常来说,Maven 的默认配置已经足够使用。但是,可以修改 conf/settings.xml 文件来定制 Maven 的配置,比如配置代理服务器、服务器认证信息等。

4. 创建项目: 使用 Maven 的命令 mvn archetype:generate 来创建一个新的项目,或者也可以将已有的项目转换为 Maven 项目。

5. 理解项目结构: Maven 项目有一个标准的目录结构。主要的 Java 代码位于 src/main/java 下,资源文件位于 src/main/resources,测试代码位于 src/test/java,测试资源位于 src/test/resources

6. 编辑 POM 文件: POM 文件 pom.xml 是 Maven 项目的核心,它包含了项目的配置信息,包括项目依赖、构建配置、插件等。

7. 构建项目: 可以使用 mvn package 来编译项目并打包成 jar 或 war 文件,或者使用 mvn install 将打包的项目安装到本地仓库中,供其他项目依赖使用。

8. 管理依赖: Maven 允许你在 pom.xml 文件中声明项目依赖,Maven 会自动下载和管理这些依赖。

9. 运行测试: 使用 mvn test 命令可以运行项目的单元测试。

10. 清理项目: 使用 mvn clean 命令可以清除项目的 target 目录,该目录用于存放 Maven 编译和打包时产生的所有文件。

11. 其他 Maven 生命周期命令: Maven 有其生命周期的阶段,可以执行不同的生命周期阶段,如 mvn compilemvn verifymvn deploy 等。

这些是使用 Maven 的基本步骤,从安装和配置到项目构建和依赖管理。根据项目需求,可以进一步学习和探索 Maven 提供的高级功能和最佳实践。

其他工具和构建系统

还有其他一些工具和构建系统也被广泛使用,如 Gradle 和 Ant。

Gradle 是另一个流行的 Java 构建工具,它提供了与 Maven 类似的功能,但具有一些额外的优势,如更好的性能、更灵活的构建脚本和更好的多项目支持。Gradle 在近年来也获得了越来越多的关注和使用。

Ant 是一个较老的构建工具,虽然它不如 Maven 和 Gradle 那么流行,但在某些特定的项目和场景中,它仍然是一个可行的选择。

Maven、Gradle和Ant都是中央化的构建工具,因为它们都使用中央化的配置文件(如Maven的pom.xml或Gradle的build.gradle)来定义项目的结构和依赖关系,并通过单一的构建命令来自动化项目的构建过程。这些工具的设计目标都是简化项目的构建、依赖管理和部署。

有一些工具和平台提供了更为分布式或去中心化的构建和部署机制。例如,Jenkins、CircleCI和Travis CI等持续集成/持续部署(CI/CD)工具允许在多个节点或服务器上并行执行构建和测试任务,从而实现分布式构建。这些工具通常与版本控制系统(如Git)集成,可以自动触发构建过程,并在多个环境(如开发、测试和生产环境)中部署应用程序。

另外,一些微服务架构和容器化技术(如Docker和Kubernetes)也提供了更为分布式的部署和管理机制。这些技术允许将应用程序拆分为多个独立的微服务,并在不同的容器中运行这些服务。这种分布式架构可以提高系统的可扩展性、可用性和灵活性。

虽然这些分布式构建和部署机制与传统的中央化构建工具在设计和用法上有所不同,但它们都是为了解决项目管理和构建过程中的不同问题而存在的。选择哪种工具或机制取决于项目的具体需求、团队的偏好以及技术栈的要求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/259097.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp API文档地址 以及 HBuilder安装

uniapp API文档地址 以及 HBuilder安装 一、进入 当前网站 uni-app 官网 二、点击截图下载文件 三、下载HBuilder X 进入 当前网站 浏览器会识别 也可以自行选择版本四、直接点击Download For Windows 直接点击下载会下载压缩包 解压 后 双击截图内的 .exe五、以上上述完…

C++初阶:容器适配器介绍、stack和queue常用接口详解及模拟实现

介绍完了list类的相关内容后&#xff1a;C初阶&#xff1a;适合新手的手撕list&#xff08;模拟实现list&#xff09; 接下来进入新的篇章&#xff0c;stack和queue的介绍以及模拟&#xff1a; 文章目录 1.stack的初步介绍2.stack的使用3.queue的初步介绍4.queue的使用5.容器适…

Python六级考试笔记

Python六级考试笔记【源源老师】 六级标准 一、 掌握文件操作及数据格式化。 二、 掌握数据可视化操作。 三、 理解类与对象的概念&#xff0c;初步掌握类与对象的使用。 四、 掌握SQLite数据库基础编程。 五、 掌握简单的使用tkinter的GUI设计。 ​ 1. 文件操作 &#xff0…

每日OJ题_二叉树dfs①_力扣2331. 计算布尔二叉树的值

目录 力扣2331. 计算布尔二叉树的值 解析代码 力扣2331. 计算布尔二叉树的值 2331. 计算布尔二叉树的值 难度 简单 给你一棵 完整二叉树 的根&#xff0c;这棵树有以下特征&#xff1a; 叶子节点 要么值为 0 要么值为 1 &#xff0c;其中 0 表示 False &#xff0c;1 表示…

【C++】模版初阶

目录 泛函编程 函数模版 概念 格式 原理 实例化 模版函数的匹配原则 类模板 定义格式 泛函编程 如何实现一个通用的交换函数呢&#xff1f; void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& left, dou…

数学建模:K-means聚类手肘法确定k值(含python实现)

原理 当K-means聚类的k值不被指定时&#xff0c;可以通过手肘法来估计聚类数量。   在聚类的过程中&#xff0c;随着聚类数的增大&#xff0c;样本划分会变得更加精细&#xff0c;每个类别的聚合程度更高&#xff0c;那么误差平方和&#xff08;SSE&#xff09;会逐渐变小&am…

上门回收小程序开发,互联网下发展机遇

在当下生活水平大幅度上升发展下&#xff0c;回收成为了人们日常生活中的一部分。 如今&#xff0c;随着互联网的快速发展&#xff0c;回收行业也进行了升级换代&#xff0c;由传统的线下回收门店到回收箱在到当下的线上互联网回收模式&#xff0c;迈向了“互联网废品回收”的…

如何清除谷歌浏览器的缓存?这里有详细步骤

如果你想解决加载或格式化问题&#xff0c;以改善你在谷歌Chrome上的浏览体验&#xff0c;那么清除缓存和cookie是一个很好的开始。以下是删除它们的方式和操作。 删除缓存和cookie时会发生什么 当你访问一个网站时&#xff0c;它有时会保存&#xff08;或记住&#xff09;某…

使用 Chainlit, Langchain 及 Elasticsearch 轻松实现对 PDF 文件的查询

在我之前的文章 “Elasticsearch&#xff1a;与多个 PDF 聊天 | LangChain Python 应用教程&#xff08;免费 LLMs 和嵌入&#xff09;” 里&#xff0c;我详述如何使用 Streamlit&#xff0c;Langchain, Elasticsearch 及 OpenAI 来针对 PDF 进行聊天。在今天的文章中&#xf…

002 GIS数据的基本格式

1 地理空间信息 地理空间信息的数据模型是现实世界的特征组到理想状态的简化或抽象&#xff0c; 并且可以在各种GIS软件的用户使用层&#xff08;结构化&#xff09;模型有很多。 该层模型由多个空间数据的分层构建&#xff0c;如 图 1.5 。 根据内容&#xff0c;离散特征信息…

React环境配置

1.安装Node.js Node.js官网&#xff1a;https://nodejs.org/en/ 下载之后按默认选项安装好 重启电脑即可自动完成配置 2.安装React 国内使用 npm 速度很慢&#xff0c;可以使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm。 ①使用 winR 输入 cmd 打开终端 ②依…

怎样让MCU/SFU视频会议ovmedia 接入GB28281监控视频参会互动

在国内视频应用对GB监控接入是常规操作&#xff0c;很多系统需要接入监控视频交互处理。我们以ovmedia视频会议为例做一个接入互动。 GB28181协议在流媒体系统较为普及&#xff0c;我们以开源SRS系统对接监控端再接入会议&#xff08;也可以用商用GB流平台&#xff0c;操作基本…

VNCTF 2024 Web方向 WP

Checkin 题目描述&#xff1a;Welcome to VNCTF 2024~ long time no see. 开题&#xff0c;是前端小游戏 源码里面发现一个16进制编码字符串 解码后是flag CutePath 题目描述&#xff1a;源自一次现实渗透 开题 当前页面没啥好看的&#xff0c;先爆破密码登录试试。爆破无果…

MATLAB知识点:uniquetol函数(★★☆☆☆)考虑了一定的容差的unique函数

讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自第3章&#xff1a;课后习题讲解中拓展的函数 在讲解第三…

wayland(xdg_wm_base) + egl + opengles——dma_buf 作为纹理数据源(五)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、EGL dma_buf import 相关的数据结构和函数1. EGLImageKHR2. eglCreateImageKHR()3. glEGLImageTargetTexture2DOES()二、egl 中 import dma_buf 作为纹理的代码实例1. egl_wayland_dmabuf_…

洛谷: P1479 宿舍里的故事之五子棋

题目链接: https://www.luogu.com.cn/problem/P1479 思路: 这道题目可以打表或者搜索。每个位置有选择/不选择两种情况。搜索的时候我们一行一行的搜索&#xff0c;直到使用的棋子达到n为止。b[i]为五子连线的数量&#xff0c;b[i] 1表示五子连线的数量可以取i&#xff0c;在…

圆筒形正压式采样器

一个人不愿意努力的时候&#xff0c;你怎样帮他也没有用&#xff01;一个人不愿意被点燃的时候&#xff0c;你怎样燃烧也没有用&#xff01;自己想醒&#xff0c;没有闹铃也能够醒来&#xff01;自己想努力&#xff0c;没有帮助也能够成功&#xff01;自己想点燃梦想&#xff0…

项目管理工具软件Maven趣闻

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Maven这个单词来自于意第绪语&#xff08;Yiddish&#xff09;&#xff0c;这是一种与德语和希伯来语有密切关系的犹太民族语言。在这个语境中&#xff0c;Maven意为“知识的…

什么原因导致百度百科建立一直审核不通过?

百科词条对网络营销实在是太重要了&#xff0c;不管是个人还是企业想在网上开展业务&#xff0c;都必要建立百科词条。自己动手编辑百科词条&#xff0c;搞个几十次也审核不过的情况比比皆是。 为什么百度百科总是审核不通过&#xff1f;百度官方发表过声明表示百度百科词条是人…

C#学习(十三)——多线程与异步

一、什么是线程 程序执行的最小单元 一次页面的渲染、一次点击事件的触发、一次数据库的访问、一次登录操作都可以看作是一个一个的进程 在一个进程中同时启用多个线程并行操作&#xff0c;就叫做多线程 由CPU来自动处理 线程有运行、阻塞、就绪三态 代码示例&#xff1a; cl…