【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.mzph.cn/news/676913.shtml

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

相关文章

JAVA设计模式之模版方法模式详解

模板方法模式 1 模板方法模式介绍 模板方法模式(template method pattern)原始定义是&#xff1a;在操作中定义算法的框架&#xff0c;将一些步骤推迟到子类中。模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。 模板方法中的算法可以理解为广义上的业务逻辑…

机器学习---概率图模型(概率计算问题)

1. 直接计算法 给定模型和观测序列&#xff0c;计算观测序列O出现的概率。最直接 的方法是按概率公式直接计算.通过列举所有可能的长度为T的状态序列&#xff0c;求各个状 态序列 I 与观测序列的联合概率&#xff0c;然后对所有可能的状态序列求和&#xff0c;得 到。 状态…

在屏蔽任何FRP环境下从零开始搭建安全的FRP内网穿透服务

背景 本人目前在境外某大学读博&#xff0c;校园网屏蔽了所有内网穿透的工具的数据包和IP访问&#xff0c;为了实现在家也能远程访问服务器&#xff0c;就不得不先开个学校VPN&#xff0c;再登陆。我们实验室还需要访问另一个大学的服务器&#xff0c;每次我都要去找另一个大学…

Mysql-Explain-使用说明

Explain 说明 explain SELECT * FROM tb_category_report;id&#xff1a;SELECT识别符&#xff0c;这是SELECT查询序列号。select_type&#xff1a;表示单位查询的查询类型&#xff0c;比如&#xff1a;普通查询、联合查询(union、union all)、子查询等复杂查询。table&#x…

酷开科技荣获消费者服务平台黑猫投诉“消费者服务之星”称号

什么是优质服务&#xff1f;既是以客户为中心的庄严承诺&#xff0c;又是对服务能力提升的深耕细作&#xff1b;既是对服务标准的敬畏&#xff0c;也是对服务创新的不断探索……服务是多维的&#xff0c;每个企业都有自己独到的诠释&#xff0c;或事无巨细环环严控&#xff0c;…

NumPy:Python的强大数值计算库

NumPy&#xff1a;Python的强大数值计算库 NumPy&#xff08;Numerical Python&#xff09;是Python中最常用和最强大的数值计算库之一。它提供了高性能的多维数组对象和广泛的数学函数&#xff0c;使得在Python中进行科学计算和数据分析变得更加简单和高效。本文将介绍NumPy的…

《动手学深度学习(PyTorch版)》笔记8.1

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…

kmeans聚类选择最优K值python实现

Kmeans算法中K值的确定是很重要的。 下面利用python中sklearn模块进行数据聚类的K值选择 数据集自制数据集&#xff0c;格式如下&#xff1a; 维度为3。 ①手肘法 手肘法的核心指标是SSE(sum of the squared errors&#xff0c;误差平方和)&#xff0c; 其中&#xff0c;Ci是第…

【玩转408数据结构】线性表——定义和基本操作

考点剖析 线性表是算法题命题的重点&#xff0c;该类题目实现相对容易且代码量不高&#xff0c;但需要最优的性能&#xff08;也就是其时间复杂度以及空间复杂度最优&#xff09;&#xff0c;这样才可以获得满分。所以在考研复习中&#xff0c;我们需要掌握线性表的基本操作&am…

Linux探秘:如何用 find 命令发现隐藏的宝藏

&#x1f31f;&#x1f30c; 欢迎来到知识与创意的殿堂 — 远见阁小民的世界&#xff01;&#x1f680; &#x1f31f;&#x1f9ed; 在这里&#xff0c;我们一起探索技术的奥秘&#xff0c;一起在知识的海洋中遨游。 &#x1f31f;&#x1f9ed; 在这里&#xff0c;每个错误都…

无心剑汉英双语诗《龙年大吉》

七绝龙年大吉 Great Luck in the Dragon Year 龙腾五岳九州圆 年吼佳音万里传 大漠苍鹰华夏梦 吉人天相铸奇缘 Dragon flies over five peaks watching the divine land so great and round, New Year’s call sends joyous tidal waves far across the world’s bound. The…

教师如何找答案? #知识分享#职场发展

当今社会&#xff0c;随着信息技术的迅猛发展&#xff0c;大学生们在学习过程中面临着各种各样的困难和挑战。而在这些挑战中&#xff0c;面对繁重的作业和复杂的题目&#xff0c;大学生搜题软件应运而生 1.快解题 这是一个网站 是一款服务于职业考证的考试搜题软件,拥有几千…

【k8s系列】(202402) 证书apiserver_client_certificate_expiration_seconds

apiserver_client_certificate_expiration_second证书定义的位置&#xff1a;kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/request/x509/x509.go at 244fbf94fd736e94071a77a8b7c91d81163249d4 kubernetes/kubernetes (github.com) apiserver_client_certi…

代码随想录 Leetcode455. 分发饼干

题目&#xff1a; 代码(首刷看解析 2024年2月8日&#xff09;&#xff1a; class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(), g.end());sort(s.begin(), s.end());int res 0;int index s.size() - 1…

Kafka 入门介绍

目录 一. 前言 二. 使用场景 三. 分布式的流平台 四. Kafka 的基本术语 4.1. 主题和日志 &#xff08;Topic 和 Log&#xff09; 4.2. 分布式&#xff08;Distribution&#xff09; 4.3. 异地数据同步技术&#xff08;Geo-Replication&#xff09; 4.4. 生产者&#xf…

Vulnhub靶机:hacksudo-Thor

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;hacksudo-Thor&#xff08;10.0.2.49&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://download.vulnhub.com/…

【JAVA WEB】 css背景属性 圆角矩形的绘制

目录 背景属性设置 圆角矩形 背景属性设置 背景颜色,在style中 background-color:颜色&#xff1b; 背景图片 background-image:url(……) 背景图片的平铺方式 background-repeat: 平铺方式 repeat 平铺&#xff08;默认&#xff09;no-repeat 不平铺repeat-x 水平平铺repea…

推荐一款开源的跨平台划词翻译和OCR翻译软件:Pot

Pot简介 一款开源的跨平台划词翻译和OCR翻译软件 下载安装指南 根据你的机器型号下载对应版本&#xff0c;下载完成后双击安装即可。 使用教程 Pot具体功能如下&#xff1a; 划词翻译输入翻译外部调用鼠标选中需要翻译的文本&#xff0c;按下设置的划词翻译快捷键即可按下输…

HiveSQL——共同使用ip的用户检测问题【自关联问题】

注&#xff1a;参考文章&#xff1a; SQL 之共同使用ip用户检测问题【自关联问题】-HQL面试题48【拼多多面试题】_hive sql 自关联-CSDN博客文章浏览阅读810次。0 问题描述create table log( uid char(10), ip char(15), time timestamp);insert into log valuesinsert into l…

秒杀相关问题解决

秒杀 超卖问题 如下,我们先来复现问题,抢购秒杀券的代码逻辑也是很简单, 先判断优惠券是否开始了,是的化,判断库存是否充足,如果是的化,扣减库存,最后创建订单 如下是代码 Override Transactional public Result seckillVoucher(Long voucherId) {//1.查询优惠券SeckillVo…