From a0991db83e9db3277c5614cd144d24488e01376c Mon Sep 17 00:00:00 2001
From: ikmkj <1@qq,com>
Date: Tue, 6 Jan 2026 21:18:06 +0800
Subject: [PATCH] =?UTF-8?q?feat(database):=20=E6=B7=BB=E5=8A=A0=20MySQL=20?=
=?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E6=94=AF=E6=8C=81=E5=B9=B6=E8=BF=81?=
=?UTF-8?q?=E7=A7=BB=E6=95=B0=E6=8D=AE=E8=A1=A8=E7=BB=93=E6=9E=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 新增 MySQL 5.7.44 建表脚本,包含分组、图片、Markdown文件等7张表
- 添加 SQLite 转 MySQL 的数据库迁移脚本
- 配置开发环境使用 MySQL 数据源连接
- 更新生产环境配置注释 SQLite 配置并预留 MySQL 配置位置
- 修改前端笔记编辑器保存逻辑,完善笔记更新功能
- 替换 SQLite 驱动为 MySQL 连接器依赖
- 添加 commons-codec 依赖用于 SHA256 计算功能
---
biji-houdaun/pom.xml | 9 +-
.../src/main/resources/application-dev.yml | 25 ++-
.../src/main/resources/application-prod.yml | 24 +--
.../src/components/home/NoteEditor.vue | 13 ++
mydatabase.db | Bin 73728 -> 73728 bytes
sql/all.sql | 183 ++++++++++++++++++
sql/mysql/all.sql | 95 +++++++++
7 files changed, 328 insertions(+), 21 deletions(-)
create mode 100644 sql/all.sql
create mode 100644 sql/mysql/all.sql
diff --git a/biji-houdaun/pom.xml b/biji-houdaun/pom.xml
index 8725ca7..6386854 100644
--- a/biji-houdaun/pom.xml
+++ b/biji-houdaun/pom.xml
@@ -71,11 +71,11 @@
org.springframework.boot
spring-boot-starter-aop
-
+
- org.xerial
- sqlite-jdbc
- 3.36.0.3
+ com.mysql
+ mysql-connector-j
+ runtime
cn.hutool
@@ -110,6 +110,7 @@
+
commons-codec
diff --git a/biji-houdaun/src/main/resources/application-dev.yml b/biji-houdaun/src/main/resources/application-dev.yml
index 70b646c..8529cab 100644
--- a/biji-houdaun/src/main/resources/application-dev.yml
+++ b/biji-houdaun/src/main/resources/application-dev.yml
@@ -1,18 +1,31 @@
spring:
datasource:
- driver-class-name: org.sqlite.JDBC
- url: jdbc:sqlite:C:\it\houtaigunli\biji\mydatabase.db
+# driver-class-name: org.sqlite.JDBC
+# url: jdbc:sqlite:C:\it\houtaigunli\biji\mydatabase.db
+# jpa:
+# hibernate:
+# ddl-auto: none
+# show-sql: true
+# properties:
+# hibernate:
+# format_sql: true
+# dialect: org.hibernate.dialect.SQLiteDialect
+#
+
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ url: jdbc:mysql://panel-jp.998521.xyz:37857/biji_db?useSSL=false&serverTimezone=UTC&characterEncoding=utf8
+ username: root
+ password: Ll@12331100
jpa:
hibernate:
- ddl-auto: none
+ ddl-auto: update
show-sql: true
properties:
hibernate:
format_sql: true
- dialect: org.hibernate.dialect.SQLiteDialect
+ dialect: org.hibernate.dialect.MySQLDialect
-
-# MyBatis-Plus??
+# MyBatis-Plus配置
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
configuration:
diff --git a/biji-houdaun/src/main/resources/application-prod.yml b/biji-houdaun/src/main/resources/application-prod.yml
index 8222a95..edb6555 100644
--- a/biji-houdaun/src/main/resources/application-prod.yml
+++ b/biji-houdaun/src/main/resources/application-prod.yml
@@ -1,15 +1,17 @@
spring:
- datasource:
- driver-class-name: org.sqlite.JDBC
- url: jdbc:sqlite:/data/mydatabase.db
- jpa:
- hibernate:
- ddl-auto: none
- show-sql: false
- properties:
- hibernate:
- format_sql: false
- dialect: org.hibernate.dialect.SQLiteDialect
+# datasource:
+# driver-class-name: org.sqlite.JDBC
+# url: jdbc:sqlite:/data/mydatabase.db
+# jpa:
+# hibernate:
+# ddl-auto: none
+# show-sql: false
+# properties:
+# hibernate:
+# format_sql: false
+# dialect: org.hibernate.dialect.SQLiteDialect
+
+
diff --git a/biji-qianduan/src/components/home/NoteEditor.vue b/biji-qianduan/src/components/home/NoteEditor.vue
index 21f421b..4ebc5b1 100644
--- a/biji-qianduan/src/components/home/NoteEditor.vue
+++ b/biji-qianduan/src/components/home/NoteEditor.vue
@@ -117,6 +117,19 @@ onBeforeUnmount(() => {
if (vditor.value) {
vditor.value.destroy();
}
+ if (bijiId.value){
+ // 发送完整的笔记对象,确保包含所有必要字段
+ updateMarkdown({
+ id: bijiId.value,
+ content: vditor.value.getValue(),
+ title: props.editData.title,
+ groupingId: props.editData.groupingId,
+ fileName: props.editData.fileName,
+ isPrivate: props.editData.isPrivate
+ });
+ }
+ // 离开页面后清空 bijiId.value 变量
+ bijiId.value = null;
});
watch(() => props.editData, (newVal, oldVal) => {
diff --git a/mydatabase.db b/mydatabase.db
index 5aa95c340486380734fd6fdebcc1ca964e1de561..327ee4d3e780f469229217ca80b21b5d4fec4cc4 100644
GIT binary patch
delta 1009
zcmZoTz|wGlWrDO|9RmY{5D>EhF%u9wOw=)Etz*zD>zJ6Lz{38C{nKVg0ehy+$C(^t
zH*+}r;Gg_oUx;zxWeS|c|sx)f0zV-8o_`ONHT9`boj!*DS+_+JEt*&5}O?B
zbPfSV6$K6rj#!RKoG~0HIR3Ktu}82UX7gv;$*#=yj;)3LCz~A5$V;sC>P?Rh9X8_6{Nuw
z41gL;LCW7Qwt|x%Zd8Ia?Qfifp~-BzfD|LI*oTfuK-Ez4>?)Az?Y&c`|C3~t7kk$?
z1t2PQu_oz(&An{>Jn<^o|%
zXM^4SG`A6`3qroxy9s3Cr0vIGx^Q^*Y4S0UCNTMCn^$(_bWmZI7%OEyaLh%CLg~L139~U`7fxhdP%rvEx-U6
zvlbw`9?$-TAg}%fg=_c8ix_qxG(mK&xd_q)AU+vI4~zCp=kgKQ6^+#mEdwi(m%290U-B3|K@-G%m>)H6B&d#4>3>Y5MWec
z;+g@JnZn7g-Sp_-tt&0l4~Q|!Pk$lFxPeU-D027H^o2}}($hU982PpzmtwSHWIlWU
Z^fU=ZdCn{5rx|BY0+QQxWEih70|47cHxd8<
diff --git a/sql/all.sql b/sql/all.sql
new file mode 100644
index 0000000..5a357be
--- /dev/null
+++ b/sql/all.sql
@@ -0,0 +1,183 @@
+/*
+ Navicat Premium Dump SQL
+
+ Source Server : biji数据库
+ Source Server Type : SQLite
+ Source Server Version : 3045000 (3.45.0)
+ Source Schema : main
+
+ Target Server Type : SQLite
+ Target Server Version : 3045000 (3.45.0)
+ File Encoding : 65001
+
+ Date: 06/01/2026 20:48:23
+*/
+
+PRAGMA foreign_keys = false;
+
+-- ----------------------------
+-- Table structure for grouping
+-- ----------------------------
+DROP TABLE IF EXISTS "grouping";
+CREATE TABLE "grouping" (
+ "id" INTEGER NOT NULL DEFAULT 0,
+ "grouping" TEXT NOT NULL,
+ "parentId" INTEGER,
+ "is_deleted" INTEGER DEFAULT 0,
+ "deleted_at" DATETIME,
+ "deleted_by" INTEGER,
+ PRIMARY KEY ("id")
+);
+
+PRAGMA foreign_keys = true;
+
+
+
+PRAGMA foreign_keys = false;
+
+-- ----------------------------
+-- Table structure for image
+-- ----------------------------
+DROP TABLE IF EXISTS "image";
+CREATE TABLE "image" (
+ "id" INTEGER PRIMARY KEY AUTOINCREMENT,
+ "markdown_id" INTEGER,
+ "original_name" TEXT NOT NULL,
+ "stored_name" TEXT NOT NULL,
+ "url" TEXT NOT NULL,
+ "size" INTEGER NOT NULL,
+ "content_type" TEXT NOT NULL,
+ "created_at" DATETIME DEFAULT CURRENT_TIMESTAMP,
+ UNIQUE ("stored_name" ASC)
+);
+
+-- ----------------------------
+-- Auto increment value for image
+-- ----------------------------
+UPDATE "sqlite_sequence" SET seq = 25 WHERE name = 'image';
+
+PRAGMA foreign_keys = true;
+
+
+
+
+PRAGMA foreign_keys = false;
+
+-- ----------------------------
+-- Table structure for image_name
+-- ----------------------------
+DROP TABLE IF EXISTS "image_name";
+CREATE TABLE "image_name" (
+ "id" INTEGER NOT NULL,
+ "markdown_id" INTEGER NOT NULL,
+ "file_name" text NOT NULL,
+ PRIMARY KEY ("id")
+);
+
+PRAGMA foreign_keys = true;
+
+
+
+
+
+PRAGMA foreign_keys = false;
+
+-- ----------------------------
+-- Table structure for markdown_file
+-- ----------------------------
+DROP TABLE IF EXISTS "markdown_file";
+CREATE TABLE "markdown_file" (
+ "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ "grouping_id" integer NOT NULL DEFAULT 1,
+ "title" TEXT NOT NULL,
+ "file_name" TEXT NOT NULL,
+ "content" TEXT NOT NULL,
+ "created_at" datetime DEFAULT CURRENT_TIMESTAMP,
+ "updated_at" datetime DEFAULT CURRENT_TIMESTAMP,
+ "is_deleted" INTEGER DEFAULT 0,
+ "deleted_at" DATETIME,
+ "deleted_by" INTEGER,
+ "is_private" integer DEFAULT 0
+);
+
+-- ----------------------------
+-- Auto increment value for markdown_file
+-- ----------------------------
+
+PRAGMA foreign_keys = true;
+
+
+
+PRAGMA foreign_keys = false;
+
+-- ----------------------------
+-- Table structure for registration_codes
+-- ----------------------------
+DROP TABLE IF EXISTS "registration_codes";
+CREATE TABLE "registration_codes" (
+ "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
+ "code" TEXT NOT NULL,
+ "expiry_time" TEXT NOT NULL,
+ "created_by" TEXT,
+ "created_at" TEXT DEFAULT (datetime('now','localtime'))
+);
+
+-- ----------------------------
+-- Auto increment value for registration_codes
+-- ----------------------------
+UPDATE "sqlite_sequence" SET seq = 2 WHERE name = 'registration_codes';
+
+-- ----------------------------
+-- Indexes structure for table registration_codes
+-- ----------------------------
+CREATE UNIQUE INDEX "uk_code"
+ ON "registration_codes" (
+ "code" ASC
+ );
+
+PRAGMA foreign_keys = true;
+
+
+
+
+PRAGMA foreign_keys = false;
+
+-- ----------------------------
+-- Table structure for system_settings
+-- ----------------------------
+DROP TABLE IF EXISTS "system_settings";
+CREATE TABLE "system_settings" (
+ "setting_key" TEXT NOT NULL,
+ "setting_value" TEXT,
+ "description" TEXT,
+ PRIMARY KEY ("setting_key")
+);
+
+PRAGMA foreign_keys = true;
+
+
+
+PRAGMA foreign_keys = false;
+
+-- ----------------------------
+-- Table structure for user
+-- ----------------------------
+DROP TABLE IF EXISTS "user";
+CREATE TABLE "user" (
+ "id" INTEGER PRIMARY KEY AUTOINCREMENT,
+ "username" TEXT NOT NULL,
+ "password" TEXT NOT NULL,
+ "email" TEXT,
+ "created_at" DATETIME DEFAULT CURRENT_TIMESTAMP,
+ "updated_at" DATETIME DEFAULT CURRENT_TIMESTAMP,
+ "token" TEXT,
+ "token_enddata" DATETIME,
+ UNIQUE ("username" ASC)
+);
+
+-- ----------------------------
+-- Auto increment value for user
+-- ----------------------------
+UPDATE "sqlite_sequence" SET seq = 5 WHERE name = 'user';
+
+PRAGMA foreign_keys = true;
diff --git a/sql/mysql/all.sql b/sql/mysql/all.sql
new file mode 100644
index 0000000..7516cec
--- /dev/null
+++ b/sql/mysql/all.sql
@@ -0,0 +1,95 @@
+-- MySQL 5.7.44 建表脚本(由 SQLite 转换)
+-- 统一字符集与引擎
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- 1. 分组表
+DROP TABLE IF EXISTS `grouping`;
+CREATE TABLE `grouping` (
+ `id` bigintBIGINT(20) NOT NULL AUTO_INCREMENT,
+ `grouping` VARCHAR(255) NOT NULL,
+ `parentId` BIGINT(20) DEFAULT NULL,
+ `is_deleted` TINYINT(1) DEFAULT 0,
+ `deleted_at` DATETIME DEFAULT NULL,
+ `deleted_by` BIGINT(20) DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- 2. 图片表
+DROP TABLE IF EXISTS `image`;
+CREATE TABLE `image` (
+ `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
+ `markdown_id` BIGINT(20) DEFAULT NULL,
+ `original_name` VARCHAR(255) NOT NULL,
+ `stored_name` VARCHAR(255) NOT NULL,
+ `url` VARCHAR(500) NOT NULL,
+ `size` BIGINT NOT NULL,
+ `content_type` VARCHAR(100) NOT NULL,
+ `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_stored_name` (`stored_name`)
+) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4;
+
+-- 3. 图片名称映射表
+DROP TABLE IF EXISTS `image_name`;
+CREATE TABLE `image_name` (
+ `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
+ `markdown_id` BIGINT(20) NOT NULL,
+ `file_name` TEXT NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- 4. Markdown 文件表
+DROP TABLE IF EXISTS `markdown_file`;
+CREATE TABLE `markdown_file` (
+ `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
+ `grouping_id` BIGINT(20) NOT NULL DEFAULT 1,
+ `title` VARCHAR(255) NOT NULL,
+ `file_name` VARCHAR(255) NOT NULL,
+ `content` LONGTEXT NOT NULL,
+ `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
+ `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `is_deleted` TINYINT(1) DEFAULT 0,
+ `deleted_at` DATETIME DEFAULT NULL,
+ `deleted_by` BIGINT(20) DEFAULT NULL,
+ `is_private` TINYINT(1) DEFAULT 0,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- 5. 注册邀请码表
+DROP TABLE IF EXISTS `registration_codes`;
+CREATE TABLE `registration_codes` (
+ `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
+ `code` VARCHAR(255) NOT NULL,
+ `expiry_time` DATETIME NOT NULL,
+ `created_by` VARCHAR(100) DEFAULT NULL,
+ `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_code` (`code`)
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
+
+-- 6. 系统设置表
+DROP TABLE IF EXISTS `system_settings`;
+CREATE TABLE `system_settings` (
+ `setting_key` VARCHAR(100) NOT NULL,
+ `setting_value` TEXT,
+ `description` TEXT,
+ PRIMARY KEY (`setting_key`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- 7. 用户表
+DROP TABLE IF EXISTS `user`;
+CREATE TABLE `user` (
+ `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
+ `username` VARCHAR(50) NOT NULL,
+ `password` VARCHAR(255) NOT NULL,
+ `email` VARCHAR(100) DEFAULT NULL,
+ `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
+ `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `token` VARCHAR(255) DEFAULT NULL,
+ `token_enddata` DATETIME DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_username` (`username`)
+) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
+
+SET FOREIGN_KEY_CHECKS = 1;
\ No newline at end of file