写点什么

构建基于 Spring Boot 的 GaussDB 数据访问应用:数据的增删改查

构建基于 Spring Boot 的 GaussDB 数据访问应用:数据的增删改查

一、概述

1. 案例介绍

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


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

2. 适用对象

  • 企业

  • 个人开发者

  • 高校学生

3. 案例时间

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

4. 案例流程


说明:


  1. 开发者免费领取 GaussDB 数据库;

  2. 绑定弹性公网 IP 并登录数据库;

  3. 创建 Spring Boot 项目并编写业务代码;

  4. 连接 GaussDB 数据库,通过 API 方式访问数据库。

5. 资源总览

本案例预计花费 1 元。



详细案例操作请阅读👉️👉️👉️构建基于 SpringBoot 的 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=MineGaussDBserver.port=8000spring.datasource.url=jdbc:postgresql://x.x.x.x:8000/MineGaussDBspring.datasource.username=xxxxspring.datasource.password=xxxxspring.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;
@Servicepublic 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 数据访问应用:数据的增删改查案例已全部完成。

七、反馈改进建议

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


用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
构建基于 Spring Boot 的 GaussDB 数据访问应用:数据的增删改查_springboot_华为云开发者联盟_InfoQ写作社区