Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


springboot 连接 XuguDB 示例程序

📄字数 3.2K
👁️阅读量 加载中...

本文档将介绍如何使用 springboot v3.3.2 在 spring-boot-web 应用中连接 XuguDB。

提示

官方文档
示例代码下载SpringBoot-Demo

一、导入 xugu-springboot-demo 项目到到IDEA中

项目结构如下:

xugu-springboot-demo-项目结构图 1.1 xugu-springboot-demo-项目结构

1.1 修改配置文件

修改配置文件中如下图所示的连接信息:

xugu-springboot-demo-配置文件截图图 1.2 xugu-springboot-demo-配置文件截图

1.2 执行测试操作

打开测试类UserRepositoryJdbcTest.java.配置文件中添加了自动初始化配置,当项目启动时,会自动执行数据库初始化脚本到配置的对应数据库中。

xugu-springboot-demo-执行测试操作图 1.3 xugu-springboot-demo-执行测试操作

1.3 查看测试结果

测试结果如下:

xugu-springboot-demo-执行测试完成图 1.4 xugu-springboot-demo-执行测试完成

查看数据库结果如下:

xugu-springboot-demo-查看数据库结果图 1.5 xugu-springboot-demo-查看数据库结果

二、项目代码介绍

2.1 pom.xml 配置文件内容如下

2.1.1 构建属性

xml
<properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
  • <maven.compiler.source><maven.compiler.target>:指定 Java 编译器的源代码和目标字节码版本为 Java 17。
  • <project.build.sourceEncoding>:设置项目的默认编码为 UTF-8。

2.1.2 父项目依赖

xml
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.3.2</version>
    <relativePath/>
</parent>
  • <parent>:定义了当前项目的父项目。
  • spring-boot-starter-parent 是 Spring Boot 提供的一个基础父项目,它预配置了许多常用的 Maven 插件和依赖管理规则,简化了 Spring Boot 应用的构建过程。
  • <relativePath/>:表示不从本地查找父项目的路径,而是从远程仓库获取。

2.1.3 依赖项 (Dependencies)

2.1.3.1 Spring Boot Starter JDBC
xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
  • 作用:提供对 Spring Boot 中 JDBC 的支持,包含数据库连接池、事务管理等基础功能。
2.1.3.2 Spring Boot Starter
xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
  • 作用:这是 Spring Boot 的核心启动器,包含了自动配置、日志记录、嵌入式服务器等功能的基础依赖。
2.1.3.3 Spring Boot Starter Test
xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
  • 作用:提供测试 Spring Boot 应用所需的库,如 JUnit、Mockito 等。
  • <scope>test</scope>:表示此依赖仅在测试阶段生效。
2.1.3.4 Xugu JDBC 驱动
xml
<dependency>
    <groupId>com.xugudb</groupId>
    <artifactId>xugu-jdbc</artifactId>
    <version>12.3.4</version>
</dependency>
  • 作用:引入 Xugu 数据库的 JDBC 驱动程序,用于与 Xugu 数据库进行交互。

2.2 application.properties文件

2.2.1 服务器配置

指定应用启动时使用的端口号。当前配置为 9090,表示应用将在 http://localhost:9090 上运行。

yaml
server:
  port: 9090

2.2.2 数据库连接配置(Spring Datasource)

yaml
spring:
  datasource:
    driver-class-name: com.xugu.cloudjdbc.Driver
    url: jdbc:xugu://localhost:5138/SYSTEM?current_schema=test
    username: SYSDBA
    password: SYSDBA
配置项说明
driver-class-namecom.xugu.cloudjdbc.DriverXugu 数据库的 JDBC 驱动类名
urljdbc:xugu://localhost:5138/SYSTEM?current_schema=test数据库连接 URL,指向本地主机上的 Xugu 数据库实例
usernameSYSDBA数据库用户名
passwordSYSDBA数据库用户密码

提示

确保 XuguDB 服务已启动,并且可以通过上述 URL 和凭据访问。

2.2.3 SQL 初始化配置

在应用启动时自动执行 schema.sql 文件中的 SQL 脚本,用于创建表结构或插入初始数据。

yaml
  sql:
    init:
      mode: always
      schema-locations: classpath:schema.sql
配置项说明
modealways表示每次启动应用时都会执行初始化脚本
schema-locationsclasspath:schema.sql指定数据库结构初始化脚本的位置(位于 src/main/resources/schema.sql

2.3 UserRepository.java

2.3.1 创建用户 save(User user)

java
public User save(User user) {
    String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
    KeyHolder keyHolder = new GeneratedKeyHolder();
    
    jdbcTemplate.update(connection -> {
        PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
        ps.setString(1, user.getName());
        ps.setString(2, user.getEmail());
        return ps;
    }, keyHolder);
    
    user.setId(keyHolder.getKey().longValue());
    return user;
}
  • 功能:将 User 实体插入到数据库中。
  • SQL 语句:INSERT INTO users (name, email) VALUES (?, ?)
  • 返回主键:使用 KeyHolder 获取插入后生成的主键 ID,并赋值给 user.setId()
  • 预编译语句:防止 SQL 注入,提升性能。

2.3.2 按 ID 查找用户 findById(Long id)

java
public Optional<User> findById(Long id) {
    String sql = "SELECT * FROM users WHERE id = ?";
    try {
        User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), id);
        return Optional.ofNullable(user);
    } catch (Exception e) {
        return Optional.empty();
    }
}
  • 功能:根据用户 ID 查询用户信息。
  • SQL 语句:SELECT * FROM users WHERE id = ?
  • 结果映射:使用 BeanPropertyRowMapper 映射查询结果到 User
  • 异常处理:若无匹配记录或发生异常,返回空的 Optional

2.3.3 查询所有用户 findAll()

java
public List<User> findAll() {
    String sql = "SELECT * FROM users";
    return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
}
  • 功能:获取所有用户列表。
  • SQL 语句:SELECT * FROM users
  • 结果类型:返回 List<User>,表示多个用户对象。

2.3.4 更新用户 update(User user)

java
public void update(User user) {
    String sql = "UPDATE users SET name = ?, email = ? WHERE id = ?";
    jdbcTemplate.update(sql, user.getName(), user.getEmail(), user.getId());
}
  • 功能:更新已有用户的姓名和邮箱。
  • SQL 语句:UPDATE users SET name = ?, email = ? WHERE id = ?
  • 参数绑定:自动将 user.getName()user.getEmail()user.getId() 绑定到 SQL 中。

2.3.5 删除用户 deleteById(Long id)

java
public void deleteById(Long id) {
    String sql = "DELETE FROM users WHERE id = ?";
    jdbcTemplate.update(sql, id);
}
  • 功能:根据用户 ID 删除用户。
  • SQL 语句:DELETE FROM users WHERE id = ?

三、常见问题&解决办法

  1. Spring Boot 3.3.2 的最低 JDK 要求是 JDK 17