本套博文所有篇章,以SSM架构来完成一个CMS新闻/文章管理系统的demo,帮助大家来学习ssm,先来说一下预期要使用的技术
SSM后端web框架,有spring、spring mvc、 mybatis
前端样式框架使用Bootstrap
前端js框架使用Jquery
前端基础页面使用JSP编写,以及JAVA的标签库
前端富文本编辑器kindeditor
其他技术redis kafka es
这里首先说明一下,由于本系列博文所用的Demo是本作者2020年写的一个Demo,所以在涉及到代码的时候,每个模块都是整体复制上去的,所以不要看到一堆代码就蒙了,当下能理解就理解,理解不了,后期业务逻辑用到的时候会说
首先在web虚拟更路径下建立一个文件夹,存放开发中用到的所有静态资源,并将jquery和bootstrap放到相应路径下
前台今天资源准备好后,我们要再为数据库中的数据准备bean实体,,首先是文章Bean
package com.wy.bean;
import java.io.Serializable;
import java.util.Date;
/**
*
* @ClassName: Article
* @Description: 文章内容表
* @author: charles
* @date: 2020年3月3日 上午11:25:22
*/
public class Article implements Serializable {
/**
* @fieldName: serialVersionUID
* @fieldType: long
* @Description: TODO
*/
private static final long serialVersionUID = 1L;
private Integer id;//主键
private String title;//文章标题
private String summary;//文章摘要
private String content;//文章内容
private String picture;//文章的标题图片
private Integer channelId;//所属栏目ID
private Integer categoryId;//所属分类ID
private Integer userId;//文章发布人ID
private Integer hits;// 点击量
private Integer hot;//是否热门文章 1:热门 , 0 :一般文章
private Integer status;//文章审核状态 0:待审 1:审核通过 -1: 审核未通过
private Integer deleted;// 删除状态 0:正常,1:逻辑删除
private Date created;// 文章发布时间
private Date updated;// 文章修改时间
private String contentType ;//文章内容类型 0:html 1:json
private Channel channel;
private Category category;
private User user;
private String keywords;//文章关键词
private String original;//文章来源
public String getKeywords() {
return keywords;
}
public void setKeywords(String keywords) {
this.keywords = keywords;
}
public String getOriginal() {
return original;
}
public void setOriginal(String original) {
this.original = original;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getPicture() {
return picture;
}
public void setPicture(String picture) {
this.picture = picture;
}
public Integer getChannelId() {
return channelId;
}
public void setChannelId(Integer channelId) {
this.channelId = channelId;
}
public Integer getCategoryId() {
return categoryId;
}
public void setCategoryId(Integer categoryId) {
this.categoryId = categoryId;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Integer getHits() {
return hits;
}
public void setHits(Integer hits) {
this.hits = hits;
}
public Integer getHot() {
return hot;
}
public void setHot(Integer hot) {
this.hot = hot;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Integer getDeleted() {
return deleted;
}
public void setDeleted(Integer deleted) {
this.deleted = deleted;
}
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
public Date getUpdated() {
return updated;
}
public void setUpdated(Date updated) {
this.updated = updated;
}
public Channel getChannel() {
return channel;
}
public void setChannel(Channel channel) {
this.channel = channel;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getContentType() {
return contentType;
}
public void setContentType(String contentType) {
this.contentType = contentType;
}
@Override
public String toString() {
return "Article [id=" + id + ", title=" + title + ", summary=" + summary + ", content=" + content + ", picture="
+ picture + ", channelId=" + channelId + ", categoryId=" + categoryId + ", userId=" + userId + ", hits="
+ hits + ", hot=" + hot + ", status=" + status + ", deleted=" + deleted + ", created=" + created
+ ", updated=" + updated + ", contentType=" + contentType + ", channel=" + channel + ", category="
+ category + ", user=" + user + ", keywords=" + keywords + ", original=" + original + "]";
}
}
第二个是文章栏目Bean
package com.wy.bean;
import java.io.Serializable;
/**
*
* @ClassName: Channel
* @Description: 文章栏目表
* @author: charles
* @date: 2020年3月3日 上午11:21:30
*/
public class Channel implements Serializable{
/**
* @fieldName: serialVersionUID
* @fieldType: long
* @Description: TODO
*/
private static final long serialVersionUID = 1L;
private Integer id;//主键
private String name;//栏目的名称
private String description;//描述
private String icon;//栏目图标
private Integer sorted;//排序
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 getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public Integer getSorted() {
return sorted;
}
public void setSorted(Integer sorted) {
this.sorted = sorted;
}
}
第三个是文章子栏目Bean
package com.wy.bean;
/**
*
* @ClassName: Category
* @Description: 栏目的子分类
* @author: charles
* @date: 2020年3月3日 上午11:23:13
*/
public class Category {
private Integer id;//主键
private String name;//
private Integer channelId;//所属栏目的ID
private Integer sorted;//排序
private Channel channel;//
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 Integer getChannelId() {
return channelId;
}
public void setChannelId(Integer channelId) {
this.channelId = channelId;
}
public Integer getSorted() {
return sorted;
}
public void setSorted(Integer sorted) {
this.sorted = sorted;
}
public Channel getChannel() {
return channel;
}
public void setChannel(Channel channel) {
this.channel = channel;
}
}
第四个是系统配置Bean
package com.wy.bean;
import java.io.Serializable;
/**
*
* @ClassName: Settings
* @Description: 系统配置表
* @author: charles
* @date: 2020年3月3日 上午11:39:58
*/
public class Settings implements Serializable {
/**
* @fieldName: serialVersionUID
* @fieldType: long
* @Description: TODO
*/
private static final long serialVersionUID = 1L;
private Integer id;
private String siteDomain;
private String siteName;
private Integer article_list_size;//文章没页显示的条目
private Integer slide_size;//显示多少个广告
private String adminUsername;//
private String admin_password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getSiteDomain() {
return siteDomain;
}
public void setSiteDomain(String siteDomain) {
this.siteDomain = siteDomain;
}
public String getSiteName() {
return siteName;
}
public void setSiteName(String siteName) {
this.siteName = siteName;
}
public Integer getArticle_list_size() {
return article_list_size;
}
public void setArticle_list_size(Integer article_list_size) {
this.article_list_size = article_list_size;
}
public Integer getSlide_size() {
return slide_size;
}
public void setSlide_size(Integer slide_size) {
this.slide_size = slide_size;
}
public String getAdminUsername() {
return adminUsername;
}
public void setAdminUsername(String adminUsername) {
this.adminUsername = adminUsername;
}
public String getAdmin_password() {
return admin_password;
}
public void setAdmin_password(String admin_password) {
this.admin_password = admin_password;
}
}
第五个是广告Bean
package com.wy.bean;
import java.io.Serializable;
/**
*
* @ClassName: Slide
* @Description: 广告表
* @author: charles
* @date: 2020年3月3日 上午11:36:20
*/
public class Slide implements Serializable{
/**
* @fieldName: serialVersionUID
* @fieldType: long
* @Description: TODO
*/
private static final long serialVersionUID = 1L;
private Integer id;//主键
private String title;//广告的文字说明
private String picture;//广告的图片地址
private String url;//点击广告进入的广告详情
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;