该项目是通过使用Spring框架来搭建一个个人博客平台。主要分为建立数据映射关系、完善不同功能的服务和控制器以及对应方法映射的SQL语句注入。
一、建立数据映射关系
1.1 数据库及表的建立
该数据库中主要包含了四张表,分别为user用户表、article文章表、category分类表和comment评论表。
这四张表也是分别代表着该博客项目提供的不同功能:用户登录功能、文章发表功能、分类功能和评论功能。建表的SQL语句如下:
DROP DATABASE if exists blog;
CREATE DATABASE blog CHARSET utf8mb4;
USE blog;
CREATE TABLE user (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(255) UNIQUE NOT NULL,
password VARCHAR(64) NOT NULL,
nickname VARCHAR(255) NOT NULL,
avatar VARCHAR(255) NOT NULL
);
CREATE TABLE category (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
name VARCHAR(20) UNIQUE NOT NULL
);
CREATE TABLE article (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
cover_image VARCHAR(255) NOT NULL,
category_id INT NOT NULL,
status TINYINT NOT NULL DEFAULT 0,
title VARCHAR(200) NOT NULL,
content TEXT NOT NULL,
view_count BIGINT NOT NULL DEFAULT 0,
created_at DATETIME NOT NULL,
updated_at DATETIME NOT NULL
);
CREATE TABLE comment (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
article_id BIGINT NOT NULL,
content VARCHAR(400) NOT NULL,
created_at DATETIME NOT NULL
);
注意这里要插入一部分数据用于之后功能的验证和扩展,尤其是user,要先插入部分用户名和登录密码以便于后面做用户登录功能。
1.2 MyBatis完成表与对象的映射
数据库表建立完成后,在Maven中找到mybatis-generator:generate的选项,双击,由MyBatis自动为我们完成表信息对应数据的对象装配。Build成功之后,我们会发现,在我们的源文件中会多出来一个model包和mapper包。model包中自动生成出了数据库表数据对应的对象类,而mapper包中则是数据库基本增删查改部分功能对应的mapper接口。
除了两个映射出的对象类和接口之外,MyBatis还在资源包中配置了四个对象增删改查部分功能映射的xml文件,在这些xml文件中,就可以设置对应方法映射的SQL语句。
二、 完善不同功能的业务逻辑
这里会创建三个Controller类来处理控制层,分别提供用户、文章和评论等相关功能,这里主要向HTTP服务器提供请求处理或者响应。@Controller来保证把该控制类装配为Spring容器中的Bean,@RequestMapping来设置URL路径以及部分请求方法。该类中会通过@Autowired注解来将业务层的类进行依赖注入,在方法中进行调用。
除此之外,还创建了service包下的四个Service类来作为业务层,分别为userService、articleService、categoryService以及commentService这四个类,Service类中主要通过@Service注解来将该类装配为Spring容器的Bean,然后再通过@Autowired注解来将对应业务的Mapper接口进行依赖注入,这样可以起到一个联系控制层和mapper接口层的作用。
如果控制层的一些方法要与数据库资源进行交互的时候,就需要调用到业务层Service类提供的方法,而Service类中的方法会调用Mapper接口提供的方法,当然其中也会对Mapper接口做一些细节上的处理。最后再通过对mapper.xml文件中SQL和映射规则,就可以从控制层来中转这些站与数据库数据资源完成交互操作。
2.1 用户业务处理
对于用户的处理业务,主要为登录,这里通过@RequestMapping注解 ("/login") 来作为登录页面的URL。当然,也会进行一个用户信息的验证,如果用户名和密码输入错误,或者说不存在该用户的情况,会重新返回再跳转到新的 “/login” 页面。
这里是通过用户名和密码来获取到用户对象,如果不为null,还会将他设置到session会话中来保证持续的页面操作。
控制层代码如下:
@Controller
public class UserController {
@Autowired
private UserService userService;
/**
* 根据用户名和密码来进行校验并且做一个跳转逻辑
* @return 跳转
*/
@RequestMapping("/login")
public String login(String username, String password, HttpServletRequest request) {
//用户名密码校验,省略,只做是否为空的一个判断
//校验通过的话就跳转到首页,为空就跳转到登陆页面
if (username == null || password == null) {
return "login";
}
User user = userService.login(username, password);
if (user == null) {
return "login";
} else {
HttpSession session = request.getSession();
session.setAttribute("user", user);
return "/";
}
}
}
业务层代码如下:
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User login(String username, String password) {
return userMapper.login(username, password);
}
}
Mapper接口代码如下:
@Mapper
public interface