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