网站首页 > 开源技术 正文
1. 概述
在本快速教程中,我们将逐步介绍在支持 JPA 的 Spring Boot 应用程序中使用 SQLite 数据库的步骤。
Spring Boot 支持一些众所周知的内存数据库开箱即用,但 SQLite 对我们的要求更多。
让我们来看看它需要什么。
2. 项目设置
对于我们的说明,我们将从过去教程中使用过的 Spring Data Rest 应用程序开始。
在pom中,我们需要添加sqllite-jdbc依赖:
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.25.2</version>
</dependency>
这种依赖为我们提供了使用 JDBC 与 SQLite 通信所需的东西。但是,如果我们要使用 ORM,这还不够。
3.SQLite方言
看,Hibernate 没有附带SQLite的方言。我们需要自己创造一个。
3.1. 扩展方言
我们的第一步是扩展org.hibernate.dialect.Dialect类来注册 SQLite 提供的数据类型:
public class SQLiteDialect extends Dialect {
public SQLiteDialect() {
registerColumnType(Types.BIT, "integer");
registerColumnType(Types.TINYINT, "tinyint");
registerColumnType(Types.SMALLINT, "smallint");
registerColumnType(Types.INTEGER, "integer");
// other data types
}
}
有几个,所以一定要查看示例代码以了解其余部分。
接下来,我们需要覆盖一些默认的方言行为。
3.2. 身份列支持
例如,我们需要告诉 Hibernate SQLite 如何处理@Id列,我们可以通过自定义IdentityColumnSupport实现来做到这一点:
public class SQLiteIdentityColumnSupport extends IdentityColumnSupportImpl {
@Override
public boolean supportsIdentityColumns() {
return true;
}
@Override
public String getIdentitySelectString(String table, String column, int type)
throws MappingException {
return "select last_insert_rowid()";
}
@Override
public String getIdentityColumnString(int type) throws MappingException {
return "integer";
}
}
为了简单起见,让我们将标识列类型保留为仅整数。为了获得下一个可用的标识值,我们将指定适当的机制。
然后,我们只需覆盖不断增长的SQLiteDialect类中的相应方法:
@Override
public IdentityColumnSupport getIdentityColumnSupport() {
return new SQLiteIdentityColumnSupport();
}
3.3. 禁用约束处理
而且,SQLite 不支持数据库约束,因此我们需要通过再次覆盖主键和外键的适当方法来禁用它们:
@Override
public boolean hasAlterTable() {
return false;
}
@Override
public boolean dropConstraints() {
return false;
}
@Override
public String getDropForeignKeyString() {
return "";
}
@Override
public String getAddForeignKeyConstraintString(String cn,
String[] fk, String t, String[] pk, boolean rpk) {
return "";
}
@Override
public String getAddPrimaryKeyConstraintString(String constraintName) {
return "";
}
而且,稍后,我们将能够在我们的 Spring Boot 配置中引用这个新方言。
4. 数据源配置
另外,由于Spring Boot没有为 SQLite 数据库提供开箱即用的配置支持,我们还需要公开我们自己的DataSource bean:
@Autowired Environment env;
@Bean
public DataSource dataSource() {
final DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getProperty("driverClassName"));
dataSource.setUrl(env.getProperty("url"));
dataSource.setUsername(env.getProperty("user"));
dataSource.setPassword(env.getProperty("password"));
return dataSource;
}
最后,我们将在persistence.properties文件中配置以下属性:
driverClassName=org.sqlite.JDBC
url=jdbc:sqlite:memory:myDb?cache=shared
username=sa
password=sa
hibernate.dialect=com.baeldung.dialect.SQLiteDialect
hibernate.hbm2ddl.auto=create-drop
hibernate.show_sql=true
请注意,我们需要将缓存保持为共享状态,以便在多个数据库连接之间保持数据库更新可见。
因此,通过上述配置,应用程序将启动并启动一个名为myDb的内存数据库,其余的 Spring Data Rest 配置可以使用该数据库。
5. 结论
在本文中,我们采用了一个示例 Spring Data Rest 应用程序并将其指向一个 SQLite 数据库。但是,为此,我们必须创建自定义的 Hibernate 方言。
请务必在 Github 上查看该应用程序。只需运行mvn -Dspring.profiles.active=sqlite spring-boot:run并浏览到http://localhost:8080。
猜你喜欢
- 2024-11-10 一杯茶的功夫就把日志搜索引擎性能调优了?
- 2024-11-10 详解MySQL复制拓扑管理工具Orchestrator--高可用机制
- 2024-11-10 JDBC、JDBC Driver、Java访问数据库
- 2024-11-10 JAVA数据库编程(java数据库编程包含哪些类)
- 2024-11-10 Django的用户表创建(四)(django自定义user表)
- 2024-11-10 数据库编程入门(数据库编程步骤)
- 2024-11-10 AOT使用经验总结(aot应用)
- 2024-11-10 AlpineLinux安装部署php8(alpine linux安装python)
- 2024-11-10 C++ Qt面试题 | 精选25题(c++,qt)
- 2024-11-10 一杯茶的功夫就把日志搜索引擎性能调优了
你 发表评论:
欢迎- 05-16东契奇:DFS训练时喷了我很多垃圾话 我不懂他为什么比赛不这么干
- 05-16这两球很伤!詹姆斯空篮拉杆不中 DFS接里夫斯传球空接也没放进
- 05-16湖人自媒体调查:89%球迷希望DFS回归79%希望詹姆斯回归
- 05-16Shams:湖人得到全能球员DFS 节省了1500万奢侈税&薪金空间更灵活
- 05-16G5湖人胜率更高!詹姆斯不满判罚,DFS谈5人打满下半场:这很艰难
- 05-16DFS:当东契奇进入状态 所有防守者在他面前都像个圆锥桶
- 05-16上一场9中6!DFS:不能让纳兹-里德这样的球员那么轻松地投三分
- 05-16WIDER FACE评测结果出炉:滴滴人脸检测DFS算法获世界第一
- 最近发表
-
- 东契奇:DFS训练时喷了我很多垃圾话 我不懂他为什么比赛不这么干
- 这两球很伤!詹姆斯空篮拉杆不中 DFS接里夫斯传球空接也没放进
- 湖人自媒体调查:89%球迷希望DFS回归79%希望詹姆斯回归
- Shams:湖人得到全能球员DFS 节省了1500万奢侈税&薪金空间更灵活
- G5湖人胜率更高!詹姆斯不满判罚,DFS谈5人打满下半场:这很艰难
- DFS:当东契奇进入状态 所有防守者在他面前都像个圆锥桶
- 上一场9中6!DFS:不能让纳兹-里德这样的球员那么轻松地投三分
- WIDER FACE评测结果出炉:滴滴人脸检测DFS算法获世界第一
- 湖人自媒体调查:89%球迷希望DFS回归 79%希望詹姆斯回归
- 一觉醒来湖人苦盼的纯3D终于到位 DFS能带给紫金军多少帮助
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)