前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Spring Boot 中使用 SQLite

Spring Boot 中使用 SQLite

作者头像
编程小白狼
发布2024-12-31 08:29:04
发布2024-12-31 08:29:04
15000
代码可运行
举报
文章被收录于专栏:编程小白狼编程小白狼
运行总次数:0
代码可运行

在现代的软件开发中,Spring Boot 已成为构建 Java 应用程序的热门框架之一。其简洁的配置、快速的开发周期以及对各种数据库的支持,使得开发者能够高效地创建稳定的应用程序。SQLite 作为一种轻量级的嵌入式数据库,常用于开发、测试和小型应用程序。本文将介绍如何在 Spring Boot 项目中使用 SQLite 数据库。

环境准备 JDK: 确保你的系统上安装了 JDK 8 或更高版本。 Maven/Gradle: 你需要一个构建工具来管理项目依赖。 IDE: 例如 IntelliJ IDEA 或 Eclipse,用于开发。 创建 Spring Boot 项目

你可以通过 Spring Initializr 网站(https://start.spring.io/)快速生成一个 Spring Boot 项目。选择以下配置:

Project: Maven Project Language: Java Spring Boot: 最新版本 Project Metadata: Group: com.example Artifact: sqlite-demo Name: sqlite-demo Description: Demo project for Spring Boot with SQLite Package name: com.example.sqlitedemo Dependencies: Spring Web Spring Data JPA H2 Database(先选择这个,之后我们会替换为 SQLite)

生成项目后,解压并导入到你的 IDE 中。

替换 H2 为 SQLite

  1. 修改 pom.xml

首先,移除 H2 数据库的依赖,并添加 SQLite 的依赖:

xml Copy Code

代码语言:javascript
代码运行次数:0
复制
<!-- 添加 SQLite 依赖 -->
<dependency>
    <groupId>org.xerial</groupId>
    <artifactId>sqlite-jdbc</artifactId>
    <version>3.34.0</version> <!-- 请使用最新版本 -->
</dependency>
  1. 配置 application.properties

在 src/main/resources/application.properties 文件中,配置 SQLite 数据库连接:

properties Copy Code

SQLite 数据库配置

spring.datasource.url=jdbc:sqlite:src/main/resources/db/test.db spring.datasource.driver-class-name=org.sqlite.JDBC spring.datasource.username= spring.datasource.password= spring.jpa.database-platform=com.example.sqlitedemo.config.SQLiteDialect

JPA/Hibernate 配置

spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLiteDialect

注意:SQLiteDialect 类是我们需要自定义的,因为 Spring Data JPA 默认不支持 SQLite。

  1. 自定义 SQLiteDialect

在 src/main/java/com/example/sqlitedemo/config 目录下创建一个新的 Java 类 SQLiteDialect:

java Copy Code package com.example.sqlitedemo.config;

import org.hibernate.dialect.Dialect; import org.hibernate.dialect.function.StandardSQLFunction; import org.hibernate.dialect.function.SQLFunctionTemplate; import org.hibernate.type.StandardBasicTypes;

public class SQLiteDialect extends Dialect {

代码语言:javascript
代码运行次数:0
复制
public SQLiteDialect() {
    registerColumnType(Types.BIT, "integer");
    registerColumnType(Types.TINYINT, "integer");
    registerColumnType(Types.SMALLINT, "integer");
    registerColumnType(Types.INTEGER, "integer");
    registerColumnType(Types.BIGINT, "integer");
    registerColumnType(Types.FLOAT, "real");
    registerColumnType(Types.DOUBLE, "double");
    registerColumnType(Types.DECIMAL, "decimal");
    registerColumnType(Types.NUMERIC, "numeric");
    registerColumnType(Types.CHAR, "char");
    registerColumnType(Types.VARCHAR, "varchar");
    registerColumnType(Types.CLOB, "clob");
    registerColumnType(Types.BLOB, "blob");
    registerColumnType(Types.DATE, "date");
    registerColumnType(Types.TIME, "time");
    registerColumnType(Types.TIMESTAMP, "timestamp");

    registerFunction("concat", new StandardSQLFunction("||", StandardBasicTypes.STRING));
    registerFunction("mod", new SQLFunctionTemplate(StandardBasicTypes.INTEGER, "?1 % ?2"));
    registerFunction("substr", new SQLFunctionTemplate(StandardBasicTypes.STRING, "substr(?1, ?2, ?3)"));
    
    // 添加其他自定义函数,如有需要
}

@Override
public String getNativeIdentifierGeneratorStrategy() {
    return "native";
}

@Override
public boolean supportsIdentityColumns() {
    return true;
}

@Override
public boolean hasDataTypeInIdentityColumn() {
    return true;
}

@Override
public String getIdentityColumnString() {
    return "integer PRIMARY KEY AUTOINCREMENT";
}

@Override
public String getIdentitySelectString() {
    return "SELECT last_insert_rowid()";
}

@Override
public boolean supportsLimit() {
    return true;
}

@Override
public boolean supportsLimitOffset() {
    return true;
}

@Override
public boolean bindLimitParametersInReverseOrder() {
    return true;
}

@Override
public boolean supportsTemporaryTables() {
    return true;
}

@Override
public String getDropTemporaryTableString() {
    return "DROP TABLE IF EXISTS";
}

@Override
public boolean dropTemporaryTableAfterUse() {
    return true;
}

@Override
public boolean supportsCurrentTimestampSelection() {
    return true;
}

@Override
public boolean isCurrentTimestampSupported() {
    return true;
}

@Override
public String getCurrentTimestampSQL() {
    return "CURRENT_TIMESTAMP";
}

@Override
public boolean supportsUnionAll() {
    return true;
}

@Override
public boolean hasAlterTable() {
    return false; // SQLite has limited ALTER TABLE support
}

@Override
public boolean dropConstraints() {
    return false;
}

}

  1. 创建实体类和 Repository

现在你可以创建实体类和相应的 Repository 接口。例如,创建一个简单的 User 实体类:

java Copy Code package com.example.sqlitedemo.model;

import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id;

@Entity public class User {

代码语言:javascript
代码运行次数:0
复制
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;
private String email;

// Getters and Setters

}

创建 UserRepository 接口:

java Copy Code package com.example.sqlitedemo.repository;

import com.example.sqlitedemo.model.User; import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> { }

  1. 使用数据库

你可以在你的 Service 或 Controller 中注入 UserRepository 并进行数据库操作。

java Copy Code package com.example.sqlitedemo.service;

import com.example.sqlitedemo.model.User; import com.example.sqlitedemo.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;

import java.util.List;

@Service public class UserService {

代码语言:javascript
代码运行次数:0
复制
@Autowired
private UserRepository userRepository;

public List<User> getAllUsers() {
    return userRepository.findAll();
}

public User saveUser(User user) {
    return userRepository.save(user);
}

}

测试

启动你的 Spring Boot 应用程序,并访问你定义的 API 端点来测试对 SQLite 数据库的操作。

😩抱歉,出了点小问题,请稍后重试

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SQLite 数据库配置
  • JPA/Hibernate 配置
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档