当前位置: 首页 > news >正文

Spring笔记06-数据持久化

在 Spring 中,数据持久化是将应用程序中的数据保存到持久化存储(如数据库)中的过程 ,主要通过以下几种方式实现:

1. JDBC(Java Database Connectivity)

  • 原理:JDBC 是 Java 访问关系型数据库的标准 API,提供了与数据库建立连接、执行 SQL 语句、处理结果集等功能。Spring 对 JDBC 进行了封装,通过JdbcTemplate等工具类简化数据库操作,降低了使用原生 JDBC 时繁琐的资源管理(如连接的获取、关闭等)和异常处理工作。
  • 示例:配置数据源后,注入JdbcTemplate,使用query方法查询数据,update方法执行增删改操作 。比如jdbcTemplate.query("SELECT * FROM users", new BeanPropertyRowMapper<>(User.class));可将查询结果映射为User对象列表。
  • 适用场景:适用于对数据库操作性能要求较高,希望直接控制 SQL 语句,且数据库操作相对简单的场景。

2. JPA(Java Persistence API)

  • 原理:JPA 是 Java EE 规范,定义了对象与关系数据库之间的映射规则,以及对实体对象进行持久化操作的标准方式。它不是具体框架,而是一种规范,Hibernate 等是其常见实现。Spring Boot 可集成 JPA 实现,通过注解(如@Entity定义实体类、@Column定义列等 )来映射实体和数据库表结构。
  • 示例:定义实体类@Entity @Table(name = "user") public class User { @Id @GeneratedValue private Long id; @Column private String name; // 省略getter和setter } ,然后创建继承JpaRepository的接口UserRepository extends JpaRepository<User, Long>,即可利用其提供的 CRUD 方法操作数据库。
  • 适用场景:适用于关系型数据库场景,尤其在业务逻辑复杂、对象关系映射较多,希望以面向对象方式操作数据库,减少 SQL 编写量时使用。

3. Spring Data JPA

  • 原理:是 Spring 提供的基于 JPA 的模块,进一步简化 JPA 使用。它基于约定优于配置原则,根据方法命名规则可自动生成查询方法,还提供了分页、排序等高级功能,以及复杂查询 DSL(Domain-Specific Language) 。
  • 示例:除上述UserRepository继承JpaRepository使用默认方法外,还可自定义方法,如List<User> findByNameContaining(String name);,框架会自动生成相应 SQL 实现按名字模糊查询用户。
  • 适用场景:在使用 JPA 的基础上,进一步追求开发效率,减少样板代码编写,适用于大多数关系型数据库的 CRUD 操作及复杂查询场景。

4. MyBatis

  • 原理:是流行的持久化框架,支持自定义 SQL、存储过程及高级映射。MyBatis 使用 XML 或注解配置 SQL 语句与对象的映射关系,灵活控制 SQL 执行,可手动编写复杂 SQL 满足特定业务需求。
  • 示例:在 XML 中配置<select id="selectUser" parameterType="long" resultType="User"> SELECT * FROM user WHERE id = #{id} </select> ,然后在 Mapper 接口中定义User selectUser(Long id); ,通过 MyBatis 的 SqlSessionFactory 获取 SqlSession 执行方法。
  • 适用场景:当对 SQL 语句的灵活性和性能优化有较高要求,如复杂的多表关联查询、存储过程调用等场景时适用。

此外,Spring 还提供事务管理机制来保证数据一致性,包括基于注解(@Transactional )的声明式事务管理和编程式事务管理;同时也支持多种数据库连接池技术,提升数据库连接的管理效率 。


文章转载自:
http://athymic.aaladrg.cn
http://capsaicin.aaladrg.cn
http://amblyoscope.aaladrg.cn
http://astroturf.aaladrg.cn
http://abyssinian.aaladrg.cn
http://adsmith.aaladrg.cn
http://apatite.aaladrg.cn
http://attainable.aaladrg.cn
http://bladdernut.aaladrg.cn
http://bail.aaladrg.cn
http://blindfold.aaladrg.cn
http://cayuga.aaladrg.cn
http://afocal.aaladrg.cn
http://chilean.aaladrg.cn
http://avocatory.aaladrg.cn
http://airdrome.aaladrg.cn
http://celebret.aaladrg.cn
http://anandrous.aaladrg.cn
http://admass.aaladrg.cn
http://arthromeric.aaladrg.cn
http://bigamy.aaladrg.cn
http://chaudfroid.aaladrg.cn
http://barricado.aaladrg.cn
http://argyle.aaladrg.cn
http://assertorily.aaladrg.cn
http://amos.aaladrg.cn
http://ccco.aaladrg.cn
http://catabolize.aaladrg.cn
http://amber.aaladrg.cn
http://bespoken.aaladrg.cn
http://www.dtcms.com/a/107764.html

相关文章:

  • Cesium 核心思想及基础概念应用
  • 蓝桥杯高频考点——高精度(含C++源码)
  • Java服务端性能优化:从理论到实践的全面指南
  • Css径向渐变 - radial-gradient
  • 宽带空时波束形成算法原理及MATLAB仿真
  • 【每日算法】Day 16-1:跳表(Skip List)——Redis有序集合的核心实现原理(C++手写实现)
  • OkHttpHttpClient
  • 160. 相交链表
  • 分析sys高问题的方法总结
  • Scala相关知识学习总结3
  • Linux中引导和服务
  • 网络攻防快速入门笔记pwn | 02 栈溢出题型 | 2.2 ret2libc
  • cesium加载CTB生成的地形数据
  • 海康网络摄像机接入EasyGBS GB28181平台
  • python示例类
  • LeetCode Hot100 刷题笔记(6)—— 栈、堆
  • HTML表单
  • RabbitMQ技术方案分析
  • 【面试篇】JVM
  • 使用STM32CubeMX和Keil在STM32上创建并运行一个简单的FreeRTOS多任务程序
  • 前端面试常考算法题目详解
  • W3C XML Schema 活动
  • 物理备份工具Xtrabackup备份和恢复原理详解
  • GitHub 趋势日报 (2025年04月01日)
  • ★ Linux ★ 环境变量和程序地址空间
  • Servlet 点击计数器
  • PCL RANSAC探测多条空间直线(指定方向)
  • 对话Dify.AI延君晨:让AI应用开发像搭积木一样简单
  • 5年——我的创作纪念日
  • Knife4j文档请求异常 空指针