一、概述

1. 案例介绍

GaussDB 是华为自研的企业级分布式关系型数据库,具备强大的分布式事务能力、同城多可用区部署、数据零丢失保障、PB级存储扩展等特性。它支持高可用、高安全、弹性伸缩、一键部署、备份恢复和监控告警,适用于对性能、可靠性和扩展性有高要求的企业级应用场景。

通过实际操作,让大家快速掌握通过Web应用访问华为自研的GaussDB数据库,搭建自己的数据库应用。最终通过API访问的方式,对GaussDB数据库进行增删改查。

2. 适用对象

  • 企业
  • 个人开发者
  • 高校学生

3. 案例时间

本案例总时长预计90分钟。

4. 案例流程

说明:

  1. 开发者免费领取GaussDB数据库;
  2. 绑定弹性公网IP并登录数据库;
  3. 创建Spring Boot项目并编写业务代码;
  4. 连接GaussDB数据库,通过API方式访问数据库。

5. 资源总览

本案例预计花费1元。

资源名称 规格 单价(元) 时长(分钟)
华为开发者空间 - 云主机 鲲鹏通用计算增强型 kc2 | 4vCPUs | 8G | Ubuntu 免费 90
GaussDB gaussdb.opengauss.xe.dn.s6.xlarge.x864.ha|4 vCPUs | 16 GB 免费 90
虚拟私有云VPC 标配 免费 90
弹性公网IP 按需计费 0.5元/小时 90

详细案例操作请阅读👉️👉️👉️构建基于 Spring Boot 的 GaussDB 数据访问应用:数据的增删改查

二、免费领取GaussDB在线使用版

1. 开发者空间配置

面向广大开发者群体,华为开发者空间提供一个随时访问的“开发桌面云主机”、丰富的“预配置工具集合”和灵活使用的“场景化资源池”,开发者开箱即用,快速体验华为根技术和资源。

如果还没有领取开发者空间云主机,可以参考免费领取云主机文档领取。

领取云主机后可以直接进入华为开发者空间工作台界面,点击打开云主机 > 进入桌面连接云主机。

2. 领取GaussDB数据库

打开火狐浏览器:

浏览器输入网址:
https://developer.huaweicloud.com/signup/75dae31d0eb04cdcab822c76d35eb9a1

点击立即报名,开发者完成报名且通过审核后,可前往开发者空间免费领取GaussDB实例,共1000个名额,先到先得。

报名成功且通过审核后,进入开发者空间工作台,有以下弹窗:

点击立即开通:

开通云数据库GaussDB,需要创建虚拟私有云,点击控制台:

创建虚拟私有云:

点击立即创建,再点击确定:

创建成功:

再次回到开通数据库界面,选择刚创建的虚拟私有云,输入管理员密码,确认密码:

点击开通后,点击立即前往:

数据库实例创建中:

数据库备份中:

数据库实例创建成功:

3. 绑定弹性公网IP

点击数据库实例名称:

进入云数据库GaussDB的基本信息界面:

点击绑定弹性公网IP:

点击查看弹性公网IP:

点击购买弹性公网IP:

选择按需计费:

点击立即购买,勾选《弹性公网IP服务声明》,点击提交按钮,购买成功后的截图如下:

回到数据库基本信息界面,再次点击绑定公网IP:

点击确定按钮:

绑定成功:

4. 登录数据库

回到云数据库控制台,登录数据库:

点击登录,再点击同意并继续:

输入密码,点击测试连接:

登录成功后,点击新建数据库:

输入数据库名称,指定兼容类型:

点击确定按钮,数据库创建成功:

点击SQL查询:

Schema选择public,执行以下SQL语句,创建表:

CREATE TABLE t_user (
    id BIGSERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL
);

创建表成功:

三、构建SpringBoot项目,连接GaussDB

1. 创建SringBoot项目

打开开发工具IntelliJ IDEA,创建SpringBoot项目:

注意:IntelliJ IDEA的下载、安装配置,请开发者自行完成。

点击File->New Project,选择Spring Boot,输入项目名称、选择Java语言、构建类型选择Maven、JDK版本选择24:

点击Next:

勾选Dependencies:Spring Boot DevTools和Spring Web:

点击Create,创建项目:

等待项目构建完成,点击右上角运行按钮,运行项目:

2. 连接GaussDB数据库

在pom.xml中dependencies节点下添加数据库相关依赖:

        <!-- postgresql -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.7.4</version>
        </dependency>

        <!-- HikariCP 连接池 -->
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
        </dependency>

        <!-- Spring Boot Starter Data JPA -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

添加依赖后,点击 Maven->Reload All Maven Projects,同步工程:

在application.properties文件中,添加GaussDB数据库配置:

spring.application.name=MineGaussDB
server.port=8000
spring.datasource.url=jdbc:postgresql://x.x.x.x:8000/MineGaussDB
spring.datasource.username=xxxx
spring.datasource.password=xxxx
spring.datasource.driver-class-name=org.postgresql.Driver

注意:
spring.datasource.url中的x.x.x.x,替换成数据库弹性公网IP地址;
spring.datasource.username中的xxxx,替换成数据库用户名;
spring.datasource.password中的xxxx,替换成数据库登录密码。
替换完成后,再次同步工程。

点击数据图标:

点击“+”图标,选择PostgreSQL:

输入Host、Port、User、Password、URL:

点击Test Connection:

数据库连接成功。

问题1:尝试连接已失败。

解决方案:

点击链接,回到数据库基本信息页面:
https://console.huaweicloud.com/gaussdb/?agencyId=675e761ca42b46cf96050bedc4d5868c&region=cn-south-1&locale=zh-cn#/gaussdb/management/basicInfo/8e54d7dc50424d78b28982f9c2359e28in14?id=8e54d7dc50424d78b28982f9c2359e28in14

点击安全组:

点击入方向规则,添加以下规则:

问题2: Invalid or unsupported by client SCRAM mechanisms。

解决方案:
点击链接,回到数据参数管理界面:
https://console.huaweicloud.com/gaussdb/?agencyId=675e761ca42b46cf96050bedc4d5868c&region=cn-south-1&locale=zh-cn#/gaussdb/management/paramTab/8e54d7dc50424d78b28982f9c2359e28in14

点击高风险参数,输入password_encryption_type搜索,将password_encryption_type的值改为1并保存。

回到数据库基本信息界面,点击重置密码:

注意:重置密码后,要重新登录数据库实例并在开发工具中重新配置密码。

问题3:重置密码后,登录报错:账号被锁定。

解决方案:
点击链接,回到数据参数管理界面:
https://console.huaweicloud.com/gaussdb/?agencyId=675e761ca42b46cf96050bedc4d5868c&region=cn-south-1&locale=zh-cn#/gaussdb/management/paramTab/8e54d7dc50424d78b28982f9c2359e28in14

点击高风险参数,输入password_lock_time搜索,将password_lock_time的值改为0并保存。

输入failed_login_attempts搜索,将failed_login_attempts的值改为0并保存。

即可重新登录。

四、SpringBoot项目代码开发

本次开发,采用分层架构来组织代码,分层架构是保证代码可维护性、可扩展性和可测试性的关键。

1. Controller 层(表示层)

职责:处理 HTTP 请求和响应,路由请求到业务逻辑层。

注解:@RestController, @Controller, @RequestMapping, @GetMapping 等。

关键点:

  • 接收请求参数(路径参数、查询参数、请求体)。
  • 调用 Service 层处理业务逻辑。
  • 返回响应(JSON/XML)或视图(如 Thymeleaf)。

完整代码:

package com.springboot.minegaussdb.controller;

import com.springboot.minegaussdb.model.User;
import com.springboot.minegaussdb.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/users")
public class UserController {

    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @PostMapping
    public User addUser(@RequestBody User user) {
        return userService.createUser(user);
    }

    @GetMapping("/search")
    public List<User> getUsers(@RequestParam String name) {
        return userService.getUsersByName(name);
    }

    // 获取所有用户
    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

}

2. Service 层(业务逻辑层)

职责:封装核心业务逻辑,处理事务管理。

注解:@Service, @Transactional。

关键点:

  • 实现业务规则(如校验、计算、流程控制)。
  • 调用 Repository 层操作数据。
  • 使用 @Transactional 管理数据库事务。

完整代码:

package com.springboot.minegaussdb.service;

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

import java.util.List;

@Service
public class UserService {

    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    // 创建用户
    public User createUser(User user) {
        return userRepository.save(user);
    }

    // 获取所有用户
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    // 按名称查询用户
    public List<User> getUsersByName(String name) {
        return userRepository.findByName(name);
    }
}

3. Repository / DAO 层(数据访问层)

职责:直接与数据库交互,执行 CRUD 操作。

注解:@Repository(可选,Spring 会自动扫描 JPA 接口)。

关键点:

  • 使用 Spring Data JPA、MyBatis 等持久化框架。
  • 定义数据库查询方法(如 findById(), save())。

完整代码:

package com.springboot.minegaussdb.repository;

import com.springboot.minegaussdb.model.User;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface UserRepository extends JpaRepository<User, Long> {
    // 按名称查询
    List<User> findByName(String name);
}

4. Model 层(实体层)

职责:映射数据库表结构,定义数据模型。

注解:@Entity, @Table, @Id, @Column 等。

关键点:

  • 使用 JPA 注解描述表字段关系。
  • 不应包含业务逻辑。

完整代码:

package com.springboot.minegaussdb.model;
import jakarta.persistence.*;

@Entity
@Table(name = "t_user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, length = 100)
    private String name;

    @Column(nullable = false, length = 100, unique = true)
    private String email;

    // 构造方法
    public User() {}

    public User(String name, String email) {
        this.name = name;
        this.email = email;
    }

    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

五、本地部署Spring Boot项目并验证

1. 运行部署项目

点击右上角运行按钮,运行项目:

2. 验证项目

谷歌浏览器安装Talend API Tester插件:

添加用户:

使用post请求,向数据库中添加用户:http://localhost:8000/api/users

点击Send按钮:

接口返回成功!

再添加2个用户:

{"name": "李四", "email": "李四@example.com"}
{"name": "王五", "email": "wangwu@example.com"}

查询用户:

使用get请求,查询所有用户:http://localhost:8000/api/users

点击Send按钮,接口返回所有的用户:

SQL查询验证:

登录GaussDB数据库,点击SOL查询:

执行SQL查询语句,查询数据表中的数据:

添加用户和查询用户的功能已经完成,开发者可以在此基础上增加查询用户和删除用户的功能。

六、释放资源

1. 删除虚拟私有云VPC

进入虚拟私有云控制台,点击全选按钮,点击“删除”,会弹出关联资源列表的对话框,删除子网和弹性公网IP

2. 删除弹性公网IP EIP

进入弹性公网IP控制台,首先解绑弹性公网IP,然后删除。

3. 删除GaussDB数据库实例

进入GaussDB控制台,点击“更多 -> 删除实例”。

注意:删除的实例会被移至回收站,但达到回收站策略设置的天数后,该实例会被永久删除,请谨慎操作。

至此,构建基于 Spring Boot 的 GuassDB 数据访问应用:数据的增删改查案例已全部完成。

七、反馈改进建议

如您在案例实操过程中遇到问题或有改进建议,可以到论坛帖评论区反馈即可,我们会及时响应处理,谢谢!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐