博客系统(升级(Spring))(一)创建数据库,创建实例化对象,统一数据格式,统一报错信息

博客系统(一)

  • 博客系统
  • 一、创建项目
  • 二、建立数据库
    • 结构
    • 链接服务器和数据库和Redis
  • 三、创建实例化对象
  • 四、统一数据结构
    • 结构
  • 五、统一报错信息

博客系统

博客系统是干什么的?
CSDN就是一个典型的博客系统。而我在这里就是通过模拟实现一个博客系统,这是一个较为简单的博客系统,但是主要功能一个不缺,不过就是 UI 有些 low,我学习前端是为了写后端更加顺手。不至于前后端完全分离,但是有个问题设计的 web 页面不是很好看。

首先我将整体的业务流程展现
在这里插入图片描述

一、创建项目

有考试的同学不会创,可以看我的 Spring 相关的文章。里面有详细的说明
在这里插入图片描述
在这里插入图片描述

创建目录:
在这里插入图片描述
common:这里放的是公共的组件
config:这里放的配置
Controller·:控制层
model:放的实例化类
service:服务层
mapper:数据层

二、建立数据库

结构

在这里插入图片描述

创建一个sql文件
在这里插入图片描述
在文件中编写sql语句
创建数据库-----myblog

drop database if exists myblog;
create  database myblog default character  set utf8;

创建用户表----userinfo

drop table if exists userinfo;
create table userinfo(`uid` int primary key auto_increment,`username` varchar(100) not null,`password` varchar(32) not null ,`photo` varchar(500) default '',`createtime` datetime default now(),`updatetime` datetime default now(),`state` int default 1
);

创建文章表----articleinfo

drop table if exists articleinfo;
create table articleinfo(`aid` int primary key auto_increment,`title` varchar(100) not null ,`content` text not null ,`createtime` datetime default now(),`updatetime` datetime default now(),`uid` int not null ,`readcount` int not null default 1,`state` int default 1
);

插入一些测试数据

insert into userinfo(uid, username, password, photo, createtime, updatetime, `state`)values (1,'admin','admin','','2023-9-9 21:54','2023-9-9 21:54',1);insert into articleinfo (aid, title, content, uid) values (1,'中庸','大学中庸',1);

链接服务器和数据库和Redis

(不使用也是可以的,看自己的需求)如何安装使用Redis,具体看我的Redis文章
在这里插入图片描述

spring.datasource.url=jdbc:mysql://localhost:3306/mycnblog?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=xietian1314
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#这里可以不添加
mybatis.mapper-locations=classpath:mybatis/*Mapper.xml
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
logging.level.com.example.demo=Debug#redis 配置
#设置Redis连接信息
spring.redis.host=8.130.80.152
spring.redis.port=6379
spring.redis.password=
spring.redis.database=1spring.session.store-type=redis#过期时间
server.servlet.session.timeout=1800spring.session.redis.flush-mode=on_save
#用户登录的session存在这个目录下
spring.session.redis.namespace=spring:session

三、创建实例化对象

在model包下建立两个类,Userinfo ,Articleinfo ,并且在包下创建一个vo的包。
再vo的包中创建一个UserinfoVO,这个包继承于Userinfo ,相当于对Userinfo 进行了扩充
注意:

  1. Serializable 这个接口作用是序列化和反序列化 ,java 提供的接口。用来将一个对象进行二进制化。
  2. @Data,相当于自己构建getter,setter

创建一个用户的实例化—Userinfo

@Data
public class Userinfo implements Serializable {private int uid;private String username;private String password;private String photo;private LocalDateTime createtime;private LocalDateTime updatetime;private int state;
}

创建一个文章的实例化—Articleinfo

@Data
public class Articleinfo implements Serializable {private int aid;private String title;private String content;@JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GMT+8")private String createtime;private String updatetime;private int uid;private int readcount;private int state;
}

在vo包下创建一个扩充的Userinfo

@Data
public class UserinfoVO extends Userinfo implements Serializable {private String chekcode;private int artCount;
}

在这里插入图片描述

四、统一数据结构

结构

在这里插入图片描述

我们约定数据的交互一ajax形式传输。
规定:

  • 传输成功返回一个code==200,并且数据完好
  • 传输失败返回一个code 非 200 的数,且返回一个错误信息
/*** 统一前后端的数据对象*/
@Data
public class ResultAjax {private int code;private String msg;private Object data;public static ResultAjax success(Object data){ResultAjax resultAjax= new ResultAjax();resultAjax.setCode(200);resultAjax.setMsg("");resultAjax.setData(data);return resultAjax;}public static ResultAjax fail(int code,String msg){ResultAjax resultAjax= new ResultAjax();resultAjax.setCode(code);resultAjax.setMsg(msg);resultAjax.setData(null);return resultAjax;}public static ResultAjax fail(int code,String msg,Object data){ResultAjax resultAjax= new ResultAjax();resultAjax.setCode(code);resultAjax.setMsg(msg);resultAjax.setData(data);return resultAjax;}
}

在这里插入图片描述

五、统一报错信息

简单而言就是整个系统出现的错误通过这个类进行捕捉

注意:

  • @ExceptionHandler:这个方法就会处理类中其他方法(被@RequestMapping注解)抛出的异常。
/*** 统一错误信息*/
public class ExceptionAdvice {@ExceptionHandler(Exception.class)public ResultAjax doException(Exception e){return ResultAjax.fail(-1,e.getMessage());}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/131864.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python+Requests+Excel接口测试实战

1、EXCEL文件接口保存方式,如图。 2、然后就是读取EXCEL文件中的数据方法,如下: 1 import xlrd2 3 4 class readExcel(object):5 def __init__(self, path):6 self.path path7 8 property9 def getSheet(self): 10 …

莫比乌斯召回系统介绍

当前召回系统只能召回相关性高的广告,但不能保证该广告变现能力强。莫比乌斯做了如下两点创新: 在召回阶段,引入CPM等业务指标作为召回依据在召回阶段,引入CTR模型,从而召回更多相关性高且变现能力强的广告 参考 百度…

基于Protege的知识建模实战

一.Protege简介、用途和特点 1.Protege简介 Protege是斯坦福大学医学院生物信息研究中心基于Java开发的本体编辑和本体开发工具,也是基于知识的编辑器,属于开放源代码软件。这个软件主要用于语义网中本体的构建,是语义网中本体构建的核心开发…

Elasticsearch:什么是生成式人工智能?

生成式人工智能定义 给学生的解释(基本): 生成式人工智能是一种可以创造新的原创内容的技术,例如艺术、音乐、软件代码和写作。 当用户输入提示时,人工智能会根据从互联网上现有示例中学到的知识生成响应,…

linux安装Sentinal1.8.6

前言: 使用docker search sentinel-dashboard命令,发现docker中的镜像版本过低,由于要配合使用1.8.6,所以这里采用java后台运行sentinel1.8.6-jar的方式。 1、官网下载对应版本jar(https://github.com/alibaba/Sentin…

MySQL间隙锁深入分析

概念 什么是间隙锁? MySQL的间隙锁(gap lock)是一种锁定相邻数据间隔的机制。 触发时机? 当使用SELECT…FOR UPDATE或UPDATE语句时,MySQL会获取一个范围锁,包括指定条件内的所有数据行,并且还…

rhcsa4 进程和SSH

tree命令。用于以树状结构显示目录和文件。通过运行 “tree” 命令可视化地查看文件系统中的目录结构。 tree / systemd是第一个系统进程(pid1)不启动,其他进程也没法启动, 用pstree查看进程树 我们可以看到所有进程都是syste…

设计模式之模板模式

文章目录 豆浆制作问题模板方法模式基本介绍模板方法模式原理类图对原理类图的说明-即(模板方法模式的角色及职责)模板方法模式解决豆浆制作问题模板方法模式的钩子方法模板方法模式的注意事项和细节 豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程 选…

RocketMQ 消息传递模型

文章目录 0. 前言1. RocketMQ的消息传递模型1.1. 同步发送1.2. 异步发送1.3. 单向发送 2. RocketMQ的批量发送和消费2.1 批量发送2.2 批量消费2.3 Spring Boot集成RocketMQ官方starter 示例 3. 总结4. 参考文档5. 源码地址 0. 前言 RocketMQ 支持6种消息传递方式,我…

pyarmor 加密许可证的使用

一 pyarmor 许可证的用处 文档:5. 许可模式和许可证 — Pyarmor 8.3.6 文档 试用版本有如下的限制: 加密功能对脚本大小有限制,不能加密超过限制的大脚本。 混淆字符串功能在试用版中无法使用。 RFT 加密模式,BCC 加密模式在试…

解决java.io.IOException: Network error

解决java.io.IOException: Network error 解决java.io.IOException: Network error摘要引言正文1. 理解异常的根本原因2. 处理网络连接问题3. 处理连接超时4. 处理协议错误或不匹配5. 异常处理 总结参考资料 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#…

24.Xaml ListView控件-----显示数据

1.运行效果 2.运行源码 a.Xaml源码 <Window x:Class="testView.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mic…

电子信息工程专业课复习知识点总结:(四)信号与系统、数字信号处理

这次我不具体把所有概念写出来了&#xff0c;只针对一些面试中经常提问的重点问题。 第一章 信号与系统基本概念 这里提出一个信号与系统这本书的大纲&#xff1a;这本书研究的就是信号与系统的关系。 一.信号是什么&#xff1f; ①信息是自然世界中一种表现形式&#xff0…

pkg 打包 nodejs

一、先全局安装pkg npm i -g pkg 二、下载打包所需的 node-v16.16.0-linux-x64 和 node-v16.16.0-win-x64 下载地址&#xff0c;里面选择你需要的版本 三、放到pkg的缓存目录 windows&#xff1a;C:\Users\whh\.pkg-cache\v3.4&#xff0c;&#xff08;把whh替换为你的电脑…

用冒泡排序完成库函数qsort的作用

Hello&#xff0c;今天分享的是我们用冒泡函数实现qsort&#xff0c;也就是快排&#xff0c;之前我们也讲过库函数qsort的使用方法&#xff0c;今天我们尝试用冒泡函数实现一下&#xff0c;当然我们也见过qsort&#xff0c;后面也会继续完善的。这几天我是破防大学生&#xff0…

MFC-GetAdaptersAddresses获取网卡信息

需要&#xff1a;#pragma comment(lib, "IPHLPAPI.lib") GetAdaptersAddresses函数参数说明 ULONG bufferSize 0;ULONG result ::GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, nullptr, nullptr, &bufferSize);/*参数1&#xff1a;ULONG Famil…

【hive】列转行—collect_set()/collect_list()/concat_ws()函数的使用场景

文章目录 一、collect_set()/collect_list()二、实际运用把同一分组的不同行的数据聚合成一个行用下标可以随机取某一个聚合后的中的值用‘|’分隔开使用collect_set()/collect_list()使得全局有序 一、collect_set()/collect_list() 在 Hive 中想实现按某字段分组&#xff0c…

Python数据分析 — 数据分析概念、重要性、流程和常用工具

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。Python数据分析是利用Python编程语言进行数据处理、转换、清洗、可视化和建模的过程。Python在数据科学领域非常流行&#xff0c;有许多强大的库和工具可供使用&#xff0c;例如NumPy、Pandas、Matplotlib和Scikit-learn等…

导数公式及求导法则

目录 基本初等函数的导数公式 求导法则 有理运算法则 复合函数求导法 隐函数求导法 反函数求导法 参数方程求导法 对数求导法 基本初等函数的导数公式 基本初等函数的导数公式包括&#xff1a; C0(x^n)nx^(n-1)(a^x)a^x*lna(e^x)e^x(loga(x))1/(xlna)(lnx)1/x(sinx)cos…

服务器访问本机图片nginx配置

下面是Nginx的配置 然后是yml文件配置 后端返回给前端的数据直接返回这个地址就可以了 {"success": true,"code": "200","msg": "操作成功","data": [{"趋势": "https://120.26.98.185:8090/s…