整体架构
后台目录:
本项目后台是由SpringBoot
框架为基础进行开发的一款Java
项目。
通过上述目录图,大致能分为三层:
- 控制层:获取前端来的请求。
- 服务层:对控制层的一些请求进行相对应的逻辑处理。
- DAO层:对数据库数据的增删改查。
当然除了大致三层还有一些工具类、配置、缓存和aop等技术的加持。
数据表的分析
article表:
DROP TABLE IF EXISTS `article`; CREATE TABLE `article` ( `id` bigint(0) NOT NULL AUTO_INCREMENT, `comment_counts` int(0) NULL DEFAULT NULL COMMENT '评论数量', `create_date` bigint(0) NULL DEFAULT NULL COMMENT '创建时间', `summary` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '简介', `title` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '标题', `view_counts` int(0) NULL DEFAULT NULL COMMENT '浏览数量', `weight` int(0) NOT NULL COMMENT '是否置顶', `author_id` bigint(0) NULL DEFAULT NULL COMMENT '作者id', `body_id` bigint(0) NULL DEFAULT NULL COMMENT '内容id', `category_id` int(0) NULL DEFAULT NULL COMMENT '类别id', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1405916999732707331 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
从表结构中我们能知道id
字段是自增不为空,且使用了BTREE索引
。
补充:
B-TREE索引
B-TREE索引的特点
- B-TREEB-TREE以B+树结构存储数据,大大加快了数据的查询速度
- B-TREE索引在范围查找的SQL语句中更加适合(顺序存储)
B-TREE索引使用场景
- 全值匹配的查询SQL,如 where act_id= '1111_act'
- 联合索引汇中匹配到最左前缀查询,如联合索引 KEY idx_actid_name(act_id,act_name) USING BTREE,只要条件中使用到了联合索引的第一列,就会用到该索引,但如果查询使用到的是联合索引的第二列act_name,该SQL则便无法使用到该联合索引(注:覆盖索引除外)
- 匹配模糊查询的前匹配,如where act_name like '11_act%
- 匹配范围值的SQL查询,如where act_date > '9865123547215'(not in和<>无法使用索引)
- 覆盖索引的SQL查询,就是说select出来的字段都建立了索引
article_body表:
DROP TABLE IF EXISTS `article_body`; CREATE TABLE `article_body` ( `id` bigint(0) NOT NULL AUTO_INCREMENT, `content` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL, `content_html` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL, `article_id` bigint(0) NOT NULL, PRIMARY KEY (`id`) USING BTREE, INDEX `article_id`(`article_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1405916999854342147 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
本表共有:
- 自身ID
- 评论
- 文章ID
主键为ID
,然后给article_id
增加BTREE
索引。
article_tag表:
DROP TABLE IF EXISTS `article_tag`; CREATE TABLE `article_tag` ( `id` bigint(0) NOT NULL AUTO_INCREMENT, `article_id` bigint(0) NOT NULL, `tag_id` bigint(0) NOT NULL, PRIMARY KEY (`id`) USING BTREE, INDEX `article_id`(`article_id`) USING BTREE, INDEX `tag_id`(`tag_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1405916999787233282 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
本表有:
- 自增的主键ID
- 文章ID
- 和tag_id
设置article
和tag_id
为BTREE
索引。
category表:
DROP TABLE IF EXISTS `category`; CREATE TABLE `category` ( `id` bigint(0) NOT NULL AUTO_INCREMENT, `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, `category_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
本表有:
- 非空自增ID
- 用户头像地址
- 分类名字
- 分类介绍