本系列文章主要通过从零开始搭建自己的个人博客,来加深对SSM框架的学习与使用,了解一个系统从提出到设计-到开发-到测试-部署运行的过程,并记录在搭建过程中的学习心得、遇见的错误及解决方式。
个人博客的主要功能有:
界面展示:
前台博客列表界面
博客详情页面
后台管理页面
登录页面
核心框架:Spring:5.2.8.RELEASE
web框架:SpringMVC:5.2.8.RELEASE
持久层框架:Mybatis 3.2.4
数据库连接池:阿里druid:0.2.6
数据库:MySQL5.XX
JSON数据处理:谷歌gson 2.3
jsp
Ajax
前端框架:bootstrap
富文本编辑器:百度UEditor
创建SQL语句:
DROP TABLE IF EXISTS `t_article`;
CREATE TABLE `t_article` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`categoryId` int(11) NOT NULL COMMENT '分类Id',
`title` varchar(40) NOT NULL COMMENT '标题',
`content` blob NOT NULL COMMENT '内容',
`description` varchar(500) NOT NULL COMMENT '文章简介 用于列表显示',
`statue` int(11) NOT NULL DEFAULT '0' COMMENT '状态 0:正常 1:不可用',
`author` varchar(15) DEFAULT 'tulun' COMMENT '作者',
`createTime` datetime NOT NULL COMMENT '发表时间',
`showCount` int(11) NOT NULL DEFAULT '0' COMMENT '浏览量',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文章表';
-- ----------------------------
-- Table structure for t_article_image
-- ----------------------------
DROP TABLE IF EXISTS `t_article_image`;
CREATE TABLE `t_article_image` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`imageUrl` varchar(100) NOT NULL COMMENT '图片地址',
`articleId` int(11) NOT NULL COMMENT '文章Id',
PRIMARY KEY (`id`,`articleId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文章图 主要用于列表浏览';
-- ----------------------------
-- Table structure for t_tag
-- ----------------------------
DROP TABLE IF EXISTS `t_tag`;
CREATE TABLE `t_tag` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`tagName` varchar(25) NOT NULL COMMENT '标签名称 唯一',
PRIMARY KEY (`id`),
UNIQUE KEY `tagName_UNIQUE` (`tagName`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8 COMMENT='标签表';
-- ----------------------------
-- Table structure for t_article_tag
-- ----------------------------
DROP TABLE IF EXISTS `t_article_tag`;
CREATE TABLE `t_article_tag` (
`articleId` int(11) NOT NULL COMMENT '文章Id',
`tagId` int(11) NOT NULL COMMENT '标签Id',
PRIMARY KEY (`articleId`,`tagId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文章标签中间表';
-- ----------------------------
-- Table structure for t_category
-- ----------------------------
DROP TABLE IF EXISTS `t_category`;
CREATE TABLE `t_category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`categoryName` varchar(20) NOT NULL COMMENT '分类名称 唯一',
`iconClass` varchar(45) NOT NULL COMMENT '图标样式',
`aliasName` varchar(20) NOT NULL COMMENT '别名 唯一 比如新闻 就用News 代替 栏目Id不显示在url中',
`sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序 (0-10)',
PRIMARY KEY (`id`),
UNIQUE KEY `aliasName_UNIQUE` (`aliasName`),
UNIQUE KEY `categoryName_UNIQUE` (`categoryName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='分类表 只支持一级分类 如果需要分多个层次 用标签来协助实现';
-- ----------------------------
-- Table structure for t_manager
-- ----------------------------
DROP TABLE IF EXISTS `t_manager`;
CREATE TABLE `t_manager` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userName` varchar(25) NOT NULL COMMENT '用户名',
`password` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
搭建如下框架结构:
目录说明:
目录说明:
|-src
|--mian
|---java JAVA源代码根目录
|----com
|-----tulun
|------model 存放pogo类:基本基本的getter和setter方法
|------controller 展示层类包路径:前端用户请求映射到该包路径下类的实现
|------service 业务逻辑层包路径:业务逻辑实现,调用dao层服务
|------dao 数据库操作层包路径:提供对数据库的操作类与方法
|------util 工具类包路径
|---resource 配置文件根目录
|----myatis mybatis接口对应配置文件目录
|----spring-XXX.xml SSM中mybatis、spring核心、springMVC的全局配置文件
|--webapp 前端页面内容根目录
|---WEB-INF
|----web.xml 前端页面必要配置文件
|-pom.xml maven的配置文件
主要完成各个层之间的连接映射,完成从t_manager表中读取数据并进行回显
根据数据库表t_manager,创建User类
package com.tulun.model;
/**
* Description :
* Created by Resumebb
* Date :2021/4/17
*/
public class User {
private Integer id;
private String name;
private String passwd;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
}
这里用到了阿里巴巴的druid连接池
web配置文件
contextConfigLocation
classpath:spring-core.xml
org.springframework.web.context.ContextLoaderListener
myBolg
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-mvc.xml
myBolg
/
junit
junit
4.11
test
org.springframework
spring-core
5.2.8.RELEASE
org.springframework
spring-context
5.2.8.RELEASE
org.springframework
spring-beans
5.2.8.RELEASE
org.springframework
spring-expression
5.2.8.RELEASE
org.springframework
spring-webmvc
5.2.8.RELEASE
org.springframework
spring-web
5.2.8.RELEASE
javax.servlet
javax.servlet-api
3.1.0
jstl
jstl
1.2
taglibs
standard
1.1.2
org.mybatis
mybatis
3.4.1
mysql
mysql-connector-java
5.1.39
org.mybatis
mybatis-spring
1.3.0
com.mchange
c3p0
0.9.5.2
org.springframework
spring-tx
5.2.8.RELEASE
org.springframework
spring-jdbc
5.2.8.RELEASE
javax.servlet.jsp.jstl
jstl
1.2
javax.servlet
servlet-api
2.5
com.google.code.gson
gson
2.3
com.alibaba
druid
0.2.6
commons-logging
commons-logging
1.1.1
commons-configuration
commons-configuration
1.9
import com.tulun.model.User;
/**
* Description :
* Created by Resumebb
* Date :2021/4/22
*/
public interface UserMapper {
public User getUserById(Integer id);
}
package com.tulun.service;
import com.tulun.model.User;
import com.tulun.dao.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* Description :
* Created by Resumebb
* Date :2021/4/19
*/
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUserById(Integer id){
if(id < 0)
return new User();
return userMapper.getUserById(id);
}
}
查询t_manager中的id为1的数据进行显示
package com.tulun.controller;
import com.tulun.model.User;
import com.tulun.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* Description :
* Created by Resumebb
* Date :2021/4/22
*/
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/testUser")
@ResponseBody
public User testUser(){
User user = userService.getUserById(1);
return user;
}
}
原因是因为端口被占用了,更改服务器的端口号就可以了。
出现这个错误就要检查SQL查询语句,数据源的配置是否正确,经检查我报这个错是因为SQL查询语句manager写成了manger,用户名密码不对也会报这个错。
类似这种错,一是检查@Service有没有加上,二是检查映射文件有没有顶行写,第一行不能有空行。