Springboot 整合 Sqlite
前言:SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。当项目中需要内嵌一个轻量的数据库时,SQLite是一个不错的选择。
1.引入sqlite-jdbc
相关的pom
依赖
<!-- sqlite -->
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.36.0.3</version>
</dependency>
2.用idea
等工具创建一个sqlite
数据库
- 用
idea
创建sqlite
数据库方法如下:
- 将数据库放入指定目录下,如本例中,将数据库文件放置在
springboot-sqlite/src/main/resources/db
下
- 添加建表语句
db/schema.sql
-- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` CHAR(100) NOT NULL, `height` REAL NOT NULL DEFAULT '0', `intro` TEXT DEFAULT NULL );
- 添加初始数据
db/data.sql
-- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` (`id`, `name`, `height`, `intro`) VALUES (1, '嘉然', 150.0, '关注嘉然,顿顿接触ovo!'); INSERT INTO `user` (`id`, `name`, `height`, `intro`) VALUES (2, '向晚', 160.0, '我是向晚!'); INSERT INTO `user` (`id`, `name`, `height`, `intro`) VALUES (3, '乃琳', 170.0, '奶琪琳!');
3.在springboot
的配置文件中设置datasource
为sqlite
-
# application-dev.yaml server: port: 80 spring: datasource: # url最容易出错,如果使用相对于项目的相对地址,那么填入 jdbc:sqlite::resource:sqlit数据库所在位置 # 注: # :resource: 指向项目的 resources 路径(resource前后两个 `:` 不能省略) url: jdbc:sqlite::resource:db/user.sqlite driver-class-name: org.sqlite.JDBC # username: 选用 sqlite 数据库不需要配置此项 # password: 选用 sqlite 数据库不需要配置此项 # DDL建表语句 schema: classpath:db/schema.sql # DML添加数据 data: classpath:db/data.sql initialization-mode: always continue-on-error: true mybatis-plus: mapper-locations: classpath:mapper/*Mapper.xml type-aliases-package: com.example.springbootsqlite.model
4. 数据源配好以后,其他操作跟普通 springboot
项目一致,mybatis
及mybatis-plus
可用
- 完整demo代码在这里:springboot-sqlite
- 注意:
sqlite
中有些操作与mysql
有一定差别,如sqlite
中没有mysql
的concat
函数`,基本数据类型也有一些差别。# mysql`CONCAT`函数 SELECT * FROM `goods` WHERE `del` = 0 AND `name` LIKE CONCAT('%', #{name}, '%'); # sqlite 中用`||`效果和`CONCAT`函数效果一致 SELECT * FROM `goods` WHERE `del` = 0 AND `name` LIKE '%' || #{name} || '%'
- 打包成
jar
包后运行可能出现初始数据乱码问题,可以在运行jar
包时指定编码方式java -Dfile.encoding=utf-8 -jar springboot-sqlite-0.0.1-SNAPSHOT.jar
- 大坑,在开发环境下,不要使用
spring-boot-devtools
工具,因为dev-tool
工具会自动检测classpath
路径下代码是否变更然后自动发布,导致springboot
自动重启,从而使更新或保存的数据丢失。