Spring Boot集成Hibernate实现数据持久化

news/2025/2/21 5:27:06/文章来源:https://www.cnblogs.com/java-note/p/18723830

在Spring Boot中集成Hibernate是一种常见的持久化解决方案。Spring Boot通过spring-boot-starter-data-jpa模块提供了对JPA(Java Persistence API)的支持,而Hibernate是JPA的一个实现。


1. 添加依赖

pom.xml文件中,添加spring-boot-starter-data-jpa依赖以及数据库驱动依赖(以MySQL为例):

<dependencies><!-- Spring Boot JPA Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- MySQL Driver --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>
</dependencies>

2. 配置数据源

application.propertiesapplication.yml文件中,配置数据源和Hibernate的相关参数:

示例:application.properties

# 数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name?useSSL=false&serverTimezone=UTC
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# Hibernate配置
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

参数说明:

  • spring.datasource.*:配置数据源的基本信息。

  • spring.jpa.hibernate.ddl-auto:控制Hibernate的DDL操作(如updatecreatenone)。

  • spring.jpa.show-sql:是否显示SQL语句。

  • spring.jpa.properties.hibernate.*:Hibernate的高级配置。


3. 创建实体类

定义一个JPA实体类,使用注解来映射到数据库表。例如:

import javax.persistence.*;@Entity
@Table(name = "users")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(name = "username", nullable = false, unique = true)private String username;@Column(name = "email", nullable = false)private String email;// Getters and Setterspublic Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}
}

4. 创建Repository接口

使用Spring Data JPA的JpaRepository接口来操作数据库,无需实现类,Spring Boot会自动实现。

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;@Repository
public interface UserRepository extends JpaRepository<User, Long> {// 可以添加自定义查询方法User findByUsername(String username);
}

5. 使用Repository

在Service层或Controller层中注入UserRepository,并使用它来操作数据库。

示例:Service层

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserService {@Autowiredprivate UserRepository userRepository;public User saveUser(User user) {return userRepository.save(user);}public List<User> getAllUsers() {return userRepository.findAll();}public User getUserByUsername(String username) {return userRepository.findByUsername(username);}
}

示例:Controller层

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserService userService;@GetMappingpublic List<User> getAllUsers() {return userService.getAllUsers();}@GetMapping("/{username}")public User getUserByUsername(@PathVariable String username) {return userService.getUserByUsername(username);}@PostMappingpublic User createUser(@RequestBody User user) {return userService.saveUser(user);}
}

6. 启动应用

启动Spring Boot应用后,Spring Data JPA会自动配置Hibernate,并根据实体类的定义生成表结构(取决于spring.jpa.hibernate.ddl-auto的值)。


注意事项

  1. spring.jpa.hibernate.ddl-auto的值
  • none:不进行DDL操作。

  • create:每次启动时创建表,已存在的表会被删除。

  • update:更新表结构,不会删除已有数据。

  • create-drop:启动时创建表,关闭时删除表。

  1. 数据库方言:根据使用的数据库选择合适的Hibernate方言(如MySQL5InnoDBDialect)。

  2. 性能优化:在生产环境中,建议关闭spring.jpa.show-sql,以避免性能损耗。

  3. 事务管理:默认情况下,Spring Boot会为Repository方法自动管理事务。如果需要自定义事务,可以在Service层使用@Transactional注解。

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

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

相关文章

react-native-snap-carousel 轮播图卡在中间的问题

今天在使用react-native-snap-carousel组件的时候,发现一个问题,就是轮播有时候会卡在两个轮播图之间,不左不右的。研究了半天,才发现,开启动量滚动即可 关于enableMomentum的解释 enableMomentum 是 React Native 中 ScrollView 和 FlatList 组件的一个属性,用于控制滚动…

安川机器人维修JZRCR - YPP01 - 1示教器按键故障

在工业生产领域,安川机器人发挥着极为重要的作用。然而,像JZRCR - YPP01 - 1示教器按键出现故障这样的问题会影响机器人的正常运行。一、安川机器人JZRCR - YPP01 - 1示教器按键故障的初步检查外观检查首先,在进行任何深入维修之前,对示教器进行外观检查是必要的。检查按键…

Svelte 最新中文文档教程(13)—— 样式

前言 Svelte,一个非常“有趣”、用起来“很爽”的前端框架。从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1:Svelte 以其独特的编译时优化机制著称,具有轻量级、高性能、易上手等特性,非常适合构…

数据结构选讲-1 总结

数据结构选讲-1 总结 线段树技巧及其应用。 前言 出题特点:树形 \(polylog\) 数据结构为主,尤其线段树。 侧重数据结构维护算法,使用数据结构进行统计。 强调“从具体情境中抽象出合适的数据及目标”的过程。数据结构本质上是要在数据和目标不变的情况下,优化算法复杂度,降…

Jenkins通过私钥连接Node

本文只要提供一种Jenkins通过私钥连接Node的方法。方法不区分Jenkins版本。大体步骤: (1)生成密钥对 (2)Jenkins上使用私钥配置Credentials (3)Node上配置authorized_keys 文件 (4)添加Node实例 下面演示一个实例。 需求:Jenkins通过私钥方式连接Node(app用户)(1)…

基于条件的访问控制——RBAC

网络威胁极为普遍,无论是公共组织还是私营组织,都面临着数据泄露的风险。一个拥有过多权限的账户,就足以让黑客渗透整个组织。为保护组织免受此类事件的影响,可以根据用户的角色和职责来分配权限。基于角色的访问控制(RBAC)便应运而生。 一、什么是基于条件的访问控制(R…

周界入侵智能识别摄像机

周界入侵智能识别摄像机持续捕捉监控区域内的视频流,并将数据实时传输至中央控制系统。目标检测与跟踪:采用深度学习算法,系统能够自动识别画面中的人、动物或其他物体,并对其进行跟踪分析。行为分析:系统通过对目标运动轨迹和行为模式的分析,判断是否存在异常活动。例如…

解锁零食店管理高效密码:精选工具助你制胜市场

零食集合店管理工具的选择对于提高店铺运营效率、优化库存管理、提升客户满意度等方面至关重要。以下是一些关键的零食集合店管理工具及其功能介绍: 一、门店管理软件 ● 板栗看板: 简单易用,适合小型团队使用。 ● Trello: 以看板形式组织任务,适合敏捷开发团队。 ● Asa…

负载均衡下的Webshell连接处理

免责声明 本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。最近打金融项目的时候,webshell遇见了负载均衡,自己之前其实看过相关文章,但是实战操作起来还是遇见了不少坑点的,接下来…

STAR: 利用时空注意力机制和动态频率损失的视频超分辨率增强框架

STAR (Spatial-Temporal Augmentation with Text-to-Video Models) 提出了一种创新的视频超分辨率解决方案,针对现有模型中存在的过度平滑和时间一致性不足等问题进行了系统性改进。该方法基于文本到视频(T2V)扩散模型架构,通过优化时序建模能力,有效处理复杂退化场景下的视…

【GreatSQL优化器-14】直方图应用

【GreatSQL优化器-14】直方图应用 一、直方图介绍 GreatSQL的优化器负责将SQL查询转换为尽可能高效的执行计划,但因为数据环境不断变化有可能导致优化器对查询数据了解不够充足,可能无法生成最优的执行计划进而影响查询效率,因此推出了直方图(histogram)功能来解决该问题。 …

go使用gjson无需转成结构体从json字符中取获字段值

背景:我们一般在go中如果要获取某个json中的值,需要先创建一个结构体,再把json映射为到结构体,再从结构体中取值,不同的json都需要这样操作,太麻烦了。有了gjson后,就可以省去转成结构体的步骤,直接从json中取值,快捷方便,值得推荐! 包地址:https://github.com/tid…