三分钟数据持久化:Spring Boot, JPA 与 SQLite 的完美融合
三分钟,迎接一个更加高效和简便的开发体验。
在快节奏的软件开发领域,每一个简化工作流程的机会都不容错过。想要一个无需繁琐配置、能够迅速启动的数据持久化方案吗?这篇文章将是你的首选攻略。在这里,我们将向你展示如何将 Spring Boot 的便捷性、JPA 的强大查询能力和 SQLite 的轻量级特性结合在一起,实现快速而又优雅的数据管理。
为什么选择 SQLite
SQLite 是一个用 C 语言编写的开源、轻量级、快速、独立且高可靠性的 SQL 数据库引擎,它提供了功能齐全的数据库解决方案。对于大多数的应用,SQLite 都可以满足。使用 SQLite 可以零配置启动,对于小型应用或者快速原型设计是一个非常大的优势。
使用 SQLite 具有下面几个优点:
轻量级:SQLite 很小巧,不需要独立服务器,便于集成到应用中。
零配置:启用 SQLite 无需复杂配置,只需指定一个文件路径存放 DB 文件,简化了数据库的设置流程。
便于移植:数据库是单一文件,方便备份和在不同环境间迁移。
跨平台:SQLite 支持各种操作系统,容易实现应用的跨平台运行。
性能良好:对于小型应用,SQLite 提供足够的读写性能。
遵循 ACID:SQLite 事务符合 ACID 原则,数据操作可靠。
社区支持:虽然简单,但拥有强大的社区和广泛的文档资源。
为什么 选择 JPA
Spring Data JPA 是 Spring Data 项目的一部分,旨在简化基于 JPA(Java Persistence API)的数据访问层(Repository 层)的实现。JPA 是一种 ORM(对象关系映射)规范,它允许开发者以面向对象的方式来操作数据库,
通常应用程序实现数据访问层可能非常麻烦,必须编写太多的样板代码才能实现简单的查询,更不用说分页等其他操作,而 Spring Data JPA 可以让开发者非常容易地实现对数据库的各种操作,显著减少实际需要的工作量。
详细介绍 JPA 并不是本文目的,关于 JPA 的更多内容可以访问:
创建 Spring Boot 项目
用于后续演示,首先创建一个简单的 Spring Boot 项目。你可以自由创建,或者使用 Spring 官网提供的快速创建工具:https://start.spring.io/
注意,文章示例项目使用 Java 21 进行演示。
为了方便开发,创建一个基础的 Spring Boot 项目后,添加以下依赖。
配置 SQLite & JPA
在 Spring Boot 中,对 SQLite 的配置非常简单,只需要指定一个位置存放 SQLite 数据库文件。SQLite 无服务端,因此可以直接启动。
配置实体映射
在使用 JPA 开发时,就是使用 jakarta.persistence
包中的注解配置 Java 实体类和表的映射关系,比如使用 @Table
指定表名,使用 @Column
配置字段信息。
编写 JPA 查询方法
Spring Data JPA 提供了多种便捷的方法来实现对数据库的查询操作,使得能够以非常简洁的方式编写对数据库的访问和查询逻辑。比如 Spring Data JPA 允许通过在接口中定义遵循一定命名方法的方式来创建数据库查询。如findByName
将生成一个根据 name
查询指定实体的 SQL。
代码示例:
代码示例中,继承的 CrudRepository
接口中包含了常见的 CURD 操作方法。自定义的 findByUsername
方法可以根据 WebsiteUser
中的 Username 进行查询。
编写 Controller
编写三个 API 用来演示 Spring Boot 结合 SQLite 以及 JPA 是否成功。
初始化方法 init()
:
映射到
"/sqlite/init"
的 GET 请求。创建了 10 个
WebsiteUser
实体,为每个用户生成随机的用户名和盐值,并用 MD5 加密其密码("123456" + 盐)。用户信息包括用户名、加盐后的密码、创建和更新的时间戳,以及用户状态。
用户信息被保存到数据库中,并记录日志。
查找用户方法 findByUsername(String username)
:
映射到
"/sqlite/find"
的 GET 请求。通过用户名查询用户。如果找到,返回用户的字符串表示;否则返回
null
。
登录方法 findByUsername(String username, String password)
:
映射到
"/sqlite/login"
的 GET 请求。验证传入的用户名和密码。首先通过用户名查询用户,然后将传入的密码与盐值结合,并与数据库中存储的加盐密码进行 MD5 加密比对。
如果密码匹配,则认证成功,返回 "login succeeded";否则,返回 "login failed"。
代码示例:
至此,项目编写完成,完整目录结构如下:
启动测试
Spring Boot 启动时由于库表不存在,自动创建库表:
请求初始化接口
可以看到输出日志成功写入了 10 条数据,且输出了 username
值。
请求查询用户接口
查询成功,回显了查询到的用户信息。
请求登录接口
在初始化数据时,密码统一配置为 123456,下面的测试可以看到使用正确的密码可以通过校验。
SQLite 3 数据审查
使用 Sqlite3 命令行工具查看 SQLite 数据库内容。
文章转载自:程序猿阿朗
评论