feat(database): 添加 MySQL 数据库支持并迁移数据表结构
- 新增 MySQL 5.7.44 建表脚本,包含分组、图片、Markdown文件等7张表 - 添加 SQLite 转 MySQL 的数据库迁移脚本 - 配置开发环境使用 MySQL 数据源连接 - 更新生产环境配置注释 SQLite 配置并预留 MySQL 配置位置 - 修改前端笔记编辑器保存逻辑,完善笔记更新功能 - 替换 SQLite 驱动为 MySQL 连接器依赖 - 添加 commons-codec 依赖用于 SHA256 计算功能
This commit is contained in:
@@ -71,11 +71,11 @@
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-aop</artifactId>
|
||||
</dependency>
|
||||
<!-- sqlite -->
|
||||
<!-- MySQL Driver -->
|
||||
<dependency>
|
||||
<groupId>org.xerial</groupId>
|
||||
<artifactId>sqlite-jdbc</artifactId>
|
||||
<version>3.36.0.3</version>
|
||||
<groupId>com.mysql</groupId>
|
||||
<artifactId>mysql-connector-j</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
@@ -110,6 +110,7 @@
|
||||
<!-- 密码加密-->
|
||||
|
||||
|
||||
|
||||
<!-- SHA256计算工具 -->
|
||||
<dependency>
|
||||
<groupId>commons-codec</groupId>
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
BIN
mydatabase.db
BIN
mydatabase.db
Binary file not shown.
183
sql/all.sql
Normal file
183
sql/all.sql
Normal file
@@ -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;
|
||||
95
sql/mysql/all.sql
Normal file
95
sql/mysql/all.sql
Normal file
@@ -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;
|
||||
Reference in New Issue
Block a user