欢迎光临
我们一直在努力

国产数据库实战: 基于KWDB的学生管理系统开发全流程实践

国产数据库实战: 基于KWDB的学生管理系统开发全流程实践

  • 前言
  • 一、初识KWDB数据库
    • 1.1 KWDB简介
    • 1.2 产品架构
  • 二、环境介绍
    • 2.1 本次实践说明
    • 2.2 本地环境规划
    • 2.3 本地环境检查
  • 四、部署KWDB数据库
    • 3.1 部署Docker环境(可选)
      • 3.1.1 更新系统并安装依赖
      • 3.1.2 配置 Docker 官方仓库
      • 3.1.3 安装Docker
      • 3.1.4 启动 Docker服务
      • 3.1.5 配置镜像加速器
      • 3.1.6 检查Docker安装信息
    • 3.2 下载KWDB容器镜像
    • 3.3 创建部署目录
    • 3.4 创建证书文件
    • 3.5 创建KWDB容器
    • 3.6 查看KWDB容器状态
    • 3.7 查看 KWDB容器日志
    • 3.8 访问KWDB数据库
  • 四、开发环境准备工作
    • 4.1 安装Maven工具
    • 4.2 安装常用工具
    • 4.3 拉取项目
    • 4.4 防火墙墙与selinux配置
  • 五、主要项目文件介绍
    • 5.1 项目整体结构
    • 5.2 核心配置文件:application.properties
    • 5.3 核心业务文件:StudentController.java
    • 5.4 数据访问层:StudentDao.java
  • 六、编译与运行项目
    • 6.1 切换到项目根目录
    • 6.2 编译打包
    • 6.3 运行项目
  • 七、访问学生管理系统
    • 7.1 访问系统页面
    • 7.2 修改数据
    • 7.3 查看KWDB数据
    • 7.4 注意事项
  • 八、实践总结

前言


在信创产业蓬勃发展的今天,掌握国产数据库技术已成为开发者构建自主可控系统的关键能力。本文将以KWDB数据库为核心,从零开始完整复现一个学生管理系统的全流程开发实践。通过环境搭建、容器部署到代码实战的层层递进,旨在帮助大家快速上手国产数据库生态,体验从理论到落地的技术闭环。


一、初识KWDB数据库

1.1 KWDB简介

KWDB (KaiwuDB)是一款面向 AIoT 场景的分布式、多模融合的数据库产品, 支持同一实例同时建立时序库和关系库并融合处理多模数据,具备时序数据高效处理能力,具有稳定安全、高可用、易运维等特点。面向工业物联网、数字能源、车联网、智慧产业等领域,KWDB 提供一站式数据存储、管理与分析的基座。

  • KWDB社区官网:https://www.kaiwudb.com/kaiwudb/

在这里插入图片描述

1.2 产品架构

KWDB 数据库架构分为接口连接层、计算层和存储层三个部分,以下是 KWDB 数据库架构功能概览图:

在这里插入图片描述

二、环境介绍

2.1 本次实践说明

本次实践旨在构建一个基于 openEuler 操作系统与 KWDB 国产数据库的标准化开发测试环境,通过容器化技术快速部署数据库服务,并结合 Maven 构建 Java 后端应用,完整复现学生管理系统的全流程开发链路。

⚠️ 重要提示: 本教程所有配置、脚本及操作均针对个人学习与测试环境设计,默认采用简化安全策略(如关闭防火墙、使用默认密码等)以降低上手门槛。严禁直接将本方案应用于生产环境。若需在正式业务场景中部署,请务必根据企业安全规范进行加固,包括但不限于配置高强度认证、开启网络访问控制、规划高可用集群及制定数据备份策略。

2.2 本地环境规划

本次实践为个人测试环境,操作系统版本为openEuler 24.03 (LTS)。

hostnameIP地址操作系统版本系统内核版本Docker版本KWDB版本部署项目
openEuler001 192.168.3.83 openEuler 24.03 (LTS) 6.6.0-28.0.0.34.oe2403.x86_64 26.1.3 V3.1.0 学生管理系统

2.3 本地环境检查

  • 检查操作系统版本

[root@openEuler001 ~]# cat /etc/os-release
NAME="openEuler"
VERSION="24.03 (LTS)"
ID="openEuler"
VERSION_ID="24.03"
PRETTY_NAME="openEuler 24.03 (LTS)"
ANSI_COLOR="0;31"

  • 检查内存和磁盘大小

[root@openEuler001 ~]# free -h
total used free shared buff/cache available
Mem: 3.3Gi 988Mi 652Mi 132Mi 2.1Gi 2.4Gi
Swap: 4.0Gi 168Mi 3.8Gi
[root@openEuler001 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 499G 0 part
├─openeuler-root 253:0 0 70G 0 lvm /
├─openeuler-swap 253:1 0 4G 0 lvm [SWAP]
└─openeuler-home 253:2 0 425G 0 lvm /home
sr0 11:0 1 1024M 0 rom

四、部署KWDB数据库

3.1 部署Docker环境(可选)

3.1.1 更新系统并安装依赖

安装 Docker 请使用 root 用户或拥有 sudo 权限的用户执行命令,本次实践采用全新环境并以 root 账号操作,先将系统软件包更新至最新状态,再安装 Docker 所需工具。如果Docker环境已部署,可忽略此安装步骤。

  • 更新系统软件包

dnf update -y –exclude=kernel* –exclude=kernel-modules* –exclude=kernel-core*

在这里插入图片描述

  • 安装相关依赖工具

dnf install -y device-mapper-persistent-data lvm2

在这里插入图片描述

3.1.2 配置 Docker 官方仓库

  • 添加 Docker 官方仓库

yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo

sed -i 's/$releasever/8/g' /etc/yum.repos.d/docker-ce.repo
sed -i 's+https://download.docker.com+https://mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

3.1.3 安装Docker

执行以下命令,更新仓库缓存。

dnf makecache

安装 Docker 所需的组件,包括守护进程、命令行工具和插件。

dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

在这里插入图片描述

  • 验证Docker安装版本,

[root@openEuler001 ~]# docker –version
Docker version 26.1.3, build b72abbb

3.1.4 启动 Docker服务

安装完成后,需要启动 Docker 守护进程并设置开机自动运行。

  • 启动 Docker 服务

systemctl start docker

  • 设置 Docker 开机自启

systemctl enable docker

  • 检查 Docker 状态,确保是 active (running)

systemctl status docker

在这里插入图片描述

3.1.5 配置镜像加速器

在国内拉取 Docker Hub 的镜像通常很慢,配置一个加速器可以显著提升速度。我们可以添加华为云个人账号下的镜像服务加速地址,确保后续可以成功拉取Docker镜像。

mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json > /dev/null <<EOF
{
"registry-mirrors": ["https://80c84f5330e14908928ca78944e61dc4.mirror.swr.myhuaweicloud.com"]
}
EOF

执行以下命令,重启Docker服务。

systemctl restart docker

3.1.6 检查Docker安装信息

检查Docker版本,可以看到当前安装的版本为 26.1.3。

[root@openEuler001 ~]# docker version
Client: Docker Engine – Community
Version: 26.1.3
API version: 1.45
Go version: go1.21.10
Git commit: b72abbb
Built: Thu May 16 08:34:39 2024
OS/Arch: linux/amd64
Context: default

Server: Docker Engine – Community
Engine:
Version: 26.1.3
API version: 1.45 (minimum version 1.24)
Go version: go1.21.10
Git commit: 8e96db1
Built: Thu May 16 08:33:34 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.32
GitCommit: 8b3b7ca2e5ce38e8f31a34f35b2b68ceb8470d89
runc:
Version: 1.1.12
GitCommit: v1.1.12-0-g51d5e94
docker-init:
Version: 0.19.0
GitCommit: de40ad0

检查Docker compose版本,当前安装版本为v2.27.0。

[root@openEuler001 ~]# docker compose version
Docker Compose version v2.27.0

3.2 下载KWDB容器镜像

执行以下命令,拉取KWDB容器镜像。本次实践所使用的KWDB镜像为 kwdb/kwdb:3.1.0。

docker pull kwdb/kwdb:3.1.0

在这里插入图片描述

3.3 创建部署目录

拉取KWDB镜像成功后,我们创建以下KWDB部署目录。

mkdir -p /data/kwdb && cd /data/kwdb/

3.4 创建证书文件

基于Docker的 KWDB 数据库节点部署支持安全模式与非安全模式两种方式,本次实践采用安全模式部署。在以 TLS 安全模式部署KaiwuDB)时,需先通过命令创建 CA 证书、root 用户客户端证书及节点服务器证书,用于身份验证与加密通信,这是安全部署的基础。创建节点证书时,请将命令中的示例 IP 替换为服务器实际 IP,以确保生成有效的服务器证书。

docker run –rm –privileged \\
-v /data/kwdb/certs:/kaiwudb/certs \\
-w /kaiwudb/bin \\
kwdb/kwdb:3.1.0 \\
bash -c './kwbase cert create-ca –certs-dir=/kaiwudb/certs –ca-key=/kaiwudb/certs/ca.key && \\
./kwbase cert create-client root –certs-dir=/kaiwudb/certs –ca-key=/kaiwudb/certs/ca.key && \\
./kwbase cert create-node 127.0.0.1 localhost 0.0.0.0 192.168.3.83 –certs-dir=/kaiwudb/certs –ca-key=/kaiwudb/certs/ca.key'

在这里插入图片描述

生成相关证书文件后,我们可以查看证书目录:

[root@openEuler001 kwdb]# ls certs/
ca.crt ca.key client.root.crt client.root.key node.crt node.key

3.5 创建KWDB容器

基于TLS安全模式,创建并启动 KWDB 容器。

docker run -d –privileged –name kwdb \\
–ulimit memlock=-1 \\
–ulimit nofile=65535 \\
-p 26257:26257 \\
-p 8080:8080 \\
-v /data/kwdb/certs:/kaiwudb/certs \\
-v /data/kwdb/db:/kaiwudb/deploy/kaiwudb-container \\
–ipc shareable \\
-w /kaiwudb/bin \\
kwdb/kwdb:3.1.0 \\
./kwbase start-single-node \\
–certs-dir=/kaiwudb/certs \\
–listen-addr=0.0.0.0:26257 \\
–http-addr=0.0.0.0:8080 \\
–store=/kaiwudb/deploy/kaiwudb-container

在这里插入图片描述

3.6 查看KWDB容器状态

查询KWDB容器状态,确保KWDB容器创建成功。

[root@openEuler001 kwdb]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
31199bc6bb1a kwdb/kwdb:3.1.0 "./kwbase start-sing…" 28 seconds ago Up 27 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:26257->26257/tcp, :::26257->26257/tcp kwdb

3.7 查看 KWDB容器日志

查看KWDB容器日志,确认数据库服务正常运行。

[root@openEuler001 kwdb]# docker logs kwdb
*
* INFO: Replication was disabled for this cluster.
* When/if adding nodes in the future, update zone configurations to increase the replication factor.
*
KWDB node starting at 2026-03-07 14:52:07.889693583 +0000 UTC (took 0.8s)
build: 3.1.0 @ 2026/02/02 10:31:37 (go1.21.13)
sql: postgresql://root@0.0.0.0:26257?sslcert=%2Fkaiwudb%2Fcerts%2Fclient.root.crt&sslkey=%2Fkaiwudb%2Fcerts%2Fclient.root.key&sslmode=verify-full&sslrootcert=%2Fkaiwudb%2Fcerts%2Fca.crt
RPC client flags: ./kwbase <client cmd> –host=0.0.0.0:26257 –certs-dir=/kaiwudb/certs
logs: /kaiwudb/deploy/kaiwudb-container/logs
temp dir: /kaiwudb/deploy/kaiwudb-container/kwbase-temp4289006900
external I/O path: /kaiwudb/deploy/kaiwudb-container/extern
store[0]: path=/kaiwudb/deploy/kaiwudb-container
storage engine: rocksdb
ts storage engine: kwtsdb
status: initialized new cluster
clusterID: b68571f3-d19f-468d-9590-2997f3174d44
nodeID: 1

在这里插入图片描述

3.8 访问KWDB数据库

在 TLS 安全模式下,通过容器内的kwbase工具本地连接 KaiwuDB,依靠证书完成身份认证,无需账号密码即可安全访问数据库;其中–host后的 IP 地址请替换为自身服务器的实际 IP。

docker exec -it kwdb ./kwbase sql –certs-dir=/kaiwudb/certs –host=192.168.3.83

在这里插入图片描述

我们需要创建新用户 jeven,设置密码为 admin123456,并授予 admin 角色权限,以支持 student-management 系统的对接。

CREATE USER jeven WITH PASSWORD 'admin123456';
GRANT admin TO jeven;

四、开发环境准备工作

4.1 安装Maven工具

openEuler官方源通常直接提供Maven 包,我们直接进行安装即可。

dnf install -y maven

在这里插入图片描述

检查当前安装的maven版本为3.6.3,java版本为1.8.0_462。

[root@openEuler001 kwdb]# mvn -version
Apache Maven 3.6.3 (openEuler 3.6.3-2)
Maven home: /usr/share/maven
Java version: 1.8.0_462, vendor: BiSheng, runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.462.b08-3.oe2403.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "6.6.0-28.0.0.34.oe2403.x86_64", arch: "amd64", family: "unix"

4.2 安装常用工具

为了方便后续开发工作,我们可以提前安装以下基本工具。

dnf install -y vim curl net-tools telnet git wget unzip zip lsof tcpdump

在这里插入图片描述

4.3 拉取项目

本次实践所使用的 student-management 学生管理系统项目我已经上传至 Gitee 代码仓库,可先拉取项目代码至本地,再进行后续的项目配置与部署操作。

[root@openEuler001 kwdb]# git clone https://gitee.com/Hud233/student-management.git
Cloning into 'student-management'...
remote: Enumerating objects: 38, done.
remote: Counting objects: 100% (38/38), done.
remote: Compressing objects: 100% (33/33), done.
remote: Total 38 (delta 3), reused 0 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (38/38), 15.17 KiB | 15.17 MiB/s, done.
Resolving deltas: 100% (3/3), done.

在这里插入图片描述

查看当前项目目录:

[root@openEuler001 kwdb]# tree ./student-management/
./student-management/
├── LICENSE
├── pom.xml
├── README.md
└── src
└── main
├── java
│ └── com
│ └── example
│ ├── App.java
│ ├── Application.java
│ ├── config
│ │ └── WebConfig.java
│ ├── controller
│ │ ├── LoginController.java
│ │ └── StudentController.java
│ ├── dao
│ │ ├── StudentDao.java
│ │ └── UserDao.java
│ ├── entity
│ │ ├── Student.java
│ │ └── User.java
│ ├── interceptor
│ │ └── LoginInterceptor.java
│ └── service
│ ├── StudentService.java
│ └── UserService.java
└── resources
├── application.properties
├── schema.sql
└── templates
├── login.html
└── student
├── form.html
└── list.html

15 directories, 20 files

4.4 防火墙墙与selinux配置

  • 关闭selinux

setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

  • 停止本地防火墙

systemctl stop firewalld
systemctl disable firewalld

五、主要项目文件介绍

本次开发的学生管理系统基于Spring Boot + KWDB构建,核心文件按分层架构组织,以下为项目整体结构及最核心的2个关键文件说明:

5.1 项目整体结构

./student-management/
├── pom.xml # Maven依赖配置
├── src/main/
│ ├── java/com/example/ # 后端核心代码
│ │ ├── Application.java # 启动类
│ │ ├── controller/ # 接口控制层
│ │ │ └── StudentController.java # 核心:学生管理接口
│ │ ├── service/ # 业务逻辑层
│ │ ├── dao/ # 数据访问层
│ │ └── entity/ # 实体类
│ └── resources/ # 配置/前端资源
│ ├── application.properties # 核心:应用配置(数据库/模板)
│ └── templates/ # 前端页面
└── README.md # 项目说明

5.2 核心配置文件:application.properties

作用:配置KWDB数据库连接、模板引擎规则,是项目运行的基础配置核心。

# KWDB数据库连接(核心)
spring.datasource.driver-class-name=com.kaiwudb.Driver
spring.datasource.url=jdbc:kaiwudb://192.168.3.83:26257/defaultdb?sslmode=disable
spring.datasource.username=jeven
spring.datasource.password=admin123456

# Thymeleaf模板引擎配置
spring.thymeleaf.cache=false
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html

# 启动时初始化数据库表
spring.sql.init.mode=always
spring.sql.init.schema-locations=classpath:schema.sql

5.3 核心业务文件:StudentController.java

作用:接收前端学生管理请求,处理“查询/新增/编辑/删除”核心业务,是前后端交互的核心入口。

package com.example.controller;

import com.example.entity.Student;
import com.example.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("/students")
public class StudentController {

@Autowired
private StudentService studentService;

// 展示所有学生列表
@GetMapping
public String list(Model model) {
model.addAttribute("students", studentService.findAll());
return "student/list";
}

// 新增/编辑学生表单
@GetMapping({"/add", "/edit/{id}"})
public String form(@PathVariable(required = false) Long id, Model model) {
model.addAttribute("student", id == null ? new Student() : studentService.findById(id));
return "student/form";
}

// 保存学生信息(新增/修改)
@PostMapping("/save")
public String save(Student student) {
studentService.save(student);
return "redirect:/students";
}

// 删除学生
@GetMapping("/delete/{id}")
public String delete(@PathVariable Long id) {
studentService.delete(id);
return "redirect:/students";
}
}

5.4 数据访问层:StudentDao.java

作用:封装对KWDB数据库中学生表的直接操作,包括增删改查SQL语句的执行。

package com.example.dao;

import com.example.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class StudentDao {

@Autowired
private JdbcTemplate jdbcTemplate;

// 查询所有学生
public List<Student> findAll() {
String sql = "SELECT id, name, age, gender FROM students";
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Student.class));
}

// 根据ID查询单个学生
public Student findById(Long id) {
String sql = "SELECT id, name, age, gender FROM students WHERE id = ?";
return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Student.class), id);
}

// 新增学生
public int insert(Student student) {
String sql = "INSERT INTO students (name, age, gender) VALUES (?, ?, ?)";
return jdbcTemplate.update(sql, student.getName(), student.getAge(), student.getGender());
}

// 更新学生信息
public int update(Student student) {
String sql = "UPDATE students SET name=?, age=?, gender=? WHERE id=?";
return jdbcTemplate.update(sql, student.getName(), student.getAge(), student.getGender(), student.getId());
}

// 删除学生
public int deleteById(Long id) {
String sql = "DELETE FROM students WHERE id=?";
return jdbcTemplate.update(sql, id);
}
}

六、编译与运行项目

6.1 切换到项目根目录

切换到项目根目录,如下所示:

[root@openEuler001 kwdb]# cd /data/kwdb/student-management
[root@openEuler001 student-management]# ls
LICENSE pom.xml README.md src

6.2 编译打包

执行以下命令,开始编译打包项目。

mvn clean package

在这里插入图片描述

6.3 运行项目

我们指定服务端口为7081,开始运行student-management项目,

java -jar target/student-management-1.0-SNAPSHOT.jar –server.port=7081

在这里插入图片描述

七、访问学生管理系统

7.1 访问系统页面

打开本地浏览器,访问 http://<服务器IP>:7081/login。 使用用户名 admin,密码 admin 登录,即可进入学生管理界面,进行增删改查操作。

在这里插入图片描述 在这里插入图片描述

7.2 修改数据

我们点击【新增学生】选项,填写学生信息后保存即可。

在这里插入图片描述

学生信息添加完毕后,回到系统首页,可以看到数据已经成功添加。

在这里插入图片描述

7.3 查看KWDB数据

宿主机重新再打开一个新终端,连接KWDB数据库。

docker exec -it kwdb ./kwbase sql –certs-dir=/kaiwudb/certs –host=192.168.3.83 -u jeven

在这里插入图片描述

在学生管理系统完成学生信息新增后,登录 KWDB 数据库可查询到新增的学生数据,确认数据同步生效。

jeven@192.168.3.83:26257/defaultdb> USE defaultdb;
SET

Time: 555.859?s

jeven@192.168.3.83:26257/defaultdb> show tables;
table_name | table_type
————-+————-
students | BASE TABLE
users | BASE TABLE
(2 rows)

Time: 1.681071ms

jeven@192.168.3.83:26257/defaultdb> SELECT * FROM students;
id | name | age | gender
———————-+——–+—–+———
1156630553352372225 | 张三 | 16 |
1156678620654469121 | 王明明 | 19 |
(2 rows)

Time: 793.871?s

在这里插入图片描述

7.4 注意事项

  • 数据库连接:请确保 KWDB 服务运行正常,且从应用服务器可以访问 192.168.3.83:26257。如有防火墙,请关闭或者开放对应端口。
  • 密码安全:本次实践中密码明文存储,生产环境务必加密处理(如使用 BCryptPasswordEncoder)。
  • 驱动安装:如果 Maven 无法下载 KaiwuDB JDBC 驱动,请手动安装。
  • 目录权限:确保当前用户对 /data/kwdb/student-management 目录有读写权限,否则 Maven 编译可能失败。

八、实践总结


本次实战圆满验证了 KWDB 作为新一代国产数据库的卓越性能,其在容器化部署的便捷性与 JDBC 驱动的稳定性和上表现尤为出色。系统运行全程流畅,KWDB 凭借高效的存储引擎与标准的 SQL 语法支持,无缝承载了学生管理业务的高频读写需求,展现了极高的成熟度。开发过程中零障碍的集成体验,充分彰显了 KWDB 在生态兼容性与开发者友好度上的显著优势,证明了其完全具备替代传统数据库的核心能力。这一成功实践不仅确立了 KWDB 在关键业务场景中的可靠地位,更为国产数据库在复杂企业级应用中的规模化推广提供了强有力的实证支撑。


赞(0)
未经允许不得转载:171主机测评 » 国产数据库实战: 基于KWDB的学生管理系统开发全流程实践
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址