从零开始CMS内容管理系统


**

CMS内容管理系统

**
关于springboot、springmvc、mybatis等相关框架的组合项目,主要处理后台数据以及前后端分离数据交互。涉及文章、栏目、链接及消费者的数据操作。欢迎点击关注!及时更新!

项目技术

  1. Maven
    一个项目管理工具,可以对 Java 项目进行构建、依赖管理
  2. Mybatis
    一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
  3. SpringBoot
    由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。
  4. SpringMVC
    属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等。
  5. mybatis-generator
    根据数据库表自动的生成映 射文件,映射接口,pojo类,让开发人员不再去 关心dao层开发
  6. Mysql/Oracle
    数据库
  7. Swagger
    Swagger 是最流行的 API 开发工具,它遵循 OpenAPI Specification(OpenAPI 规范,也简称 OAS)。
    Swagger 可以贯穿于整个 API 生态,如 API 的设计、编写 API 文档、测试和部署。
    Swagger 是一种通用的,和编程语言无关的 API 描述规范。

环境搭建

Maven配置(这里用apache-maven-3.3.9)

Windows–>系统–>高级系统设置–>环境变量
添加系统变量path中添加路径

path中添加路径
输入mvn --version,出现版本信息,maven配置成功
输入mvn --version

eclipse/IDEA集成Maven

eclipse:
Window–>Preferences–>查找Maven
找到Maven配置
添加Maven位置
添加Maven位置
配置配置文件及本地仓库位置
配置配置文件及本地仓库位置IDEA:
File–>settings搜索Maven
找到Maven配置添加Maven相关配置信息及本地仓库位置
在这里插入图片描述

项目搭建

eclipse:搭建springboot项目

右击–>new–>Spring Stater Project
配置相关信息添加相关依赖
依赖注:根据数据库选择驱动。添加热部署、mybatis、MySQL驱动、SpringMVC相关依赖。

IDEA:搭建springboot项目

新建Spring Initializr项目根据自己信息修改
根据自己信息修改
添加依赖(数据库驱动自选)
在这里插入图片描述IDEA与eclipse类似,以下则以eclipse为例(数据库使用mysql)有问题联系博主

集成 Mybatis-generator

1.在resources目录下新建generatorConfig.xml
在这里插入图片描述
文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
  PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<!-- mybatis-generator的核心配置文件 -->
<generatorConfiguration>
	
  <classPathEntry location="E:/MavenRespotion/mysql/mysql-connector-java/8.0.19/mysql-connector-java-8.0.19.jar" />
  <context id="DB2Tables" targetRuntime="MyBatis3">
  	<!-- 自动生成的Bean对象,是否实现序列化接口 -->
  	<plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
	<!-- 自动生成的Bean对象,是否重写toString方法 -->
    <plugin type="org.mybatis.generator.plugins.ToStringPlugin"></plugin>
    
  
  	<commentGenerator>
  		 <property name="suppressDate" value="true"/>
          <property name="suppressAllComments" value="true"/>
  	</commentGenerator>
  
  	<!-- 注意!如果要重新生成pojo类,务必改成项目组数据库,用户名密码 -->
    <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
        connectionURL="jdbc:mysql://127.0.0.1:3306/cms?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai"
        userId="root"
        password="root">
    </jdbcConnection>
    

	<!--指定生成的类型为java类型,避免数据库中number等类型字段 -->
    <javaTypeResolver >
      <property name="forceBigDecimals" value="false" />
    </javaTypeResolver>

	<!--自动生成的实体的存放包路径 -->
    <javaModelGenerator targetPackage="com.demo.bean" targetProject="./src/main/java">
      <!-- 生成包结构 -->
      <property name="enableSubPackages" value="true" />
      <!-- 是否对结果trim操作 -->
      <property name="trimStrings" value="true" />
    </javaModelGenerator>

	<!--自动生成的*Mapper.xml文件存放路径 -->
    <sqlMapGenerator targetPackage="mapper"  targetProject="./src/main/resources">
      <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>

	<!--自动生成的*Mapper.java存放路径 -->
    <javaClientGenerator type="XMLMAPPER" targetPackage="com.demo.mapper"  targetProject="./src/main/java">
      <property name="enableSubPackages" value="true" />
    </javaClientGenerator>

	
	<!-- 映射配置 -->
	<table tableName="cms_link" domainObjectName="Link"></table>
	<table tableName="cms_customer" domainObjectName="Customer"></table>
	<table tableName="cms_category" domainObjectName="Category"></table>
	<table tableName="cms_article" domainObjectName="Article">
		<columnOverride column="content" javaType="java.lang.String" jdbcType="VARCHAR"></columnOverride>
	</table>
  </context>
</generatorConfiguration>

2.pom.xml文件添加插件

<!-- mybatis-generator 自动代码插件 -->
<plugin>
	<groupId>org.mybatis.generator</groupId>
	<artifactId>mybatis-generator-maven-plugin</artifactId>
	<version>1.3.5</version>
	<configuration>
		<!-- 配置文件 -->
		<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
		<!-- 允许移动和修改 -->
		<verbose>true</verbose>
		<overwrite>true</overwrite>
	</configuration>
	<dependencies>
		<!-- jdbc 依赖 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.19</version>
		</dependency>
		<dependency>
			<groupId>com.itfsw</groupId>
			<artifactId>mybatis-generator-plugin</artifactId>
			<version>1.0.11</version>
		</dependency>
	</dependencies>
</plugin>

3.使用mybatis逆向工程自动生成映射接口/映射文件
cmd到项目目录执行maven命令,即可
mvn mybatis-generator:generate或mvn -Dmybatis.generator.overwrite=true mybatis-generator:generate
项目目录执行maven命令执行成功会生成一系列映射接口和映射文件
映射接口
映射文件
在springboot中配置映射文件/映射接口

	程序入口:@SpringBootApplication修饰的类配置映射接口
@MapperScan("com.demo.mapper")
	配置文件:application.properties配置映射文件
mybatis.mapper-locations=classpath:mapper/*.xml

配置Swagger,用于前后端数据交互检查

1.在pom.xml中添加相关依赖

<!-- swagger的相关依赖 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.6.1</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.6.1</version>
</dependency>

2.新建Swagger2Config配置类来配置swagger

/**
 * swagger配置类
 *
 */
@Configuration
@EnableSwagger2
public class Swagger2Config {
    /**
     * 创建API应用
     * apiInfo() 增加API相关信息
     * 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
     * 本例采用指定扫描的包路径来定义指定要建立API的目录。
     * @return
     */
	@Bean
    public Docket demoApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.demo.controller"))
                .paths(PathSelectors.any())
                .build()
                .apiInfo(apiInfo());

    }

    /**
     * 创建该API的基本信息(这些基本信息会展现在文档页面中)
     * 访问地址:http://项目实际地址/swagger-ui.html
     * @return
     */
	private ApiInfo apiInfo() {
		return new ApiInfoBuilder()
				.title("看点咨询")
				.description("xxx公司,http://www.xxx.com")
				.termsOfServiceUrl("http://www.xxx.com")
				.version("1.1")
				.build();
	}
}

3.访问 ip:port/swagger-ui.html即可进入swagger-ui界面

数据库表的创建(栏目表、文章表、用户表、链接表)

Oracle:

create table cms_category(
	id number(11),
	code number(20),
	name varchar2(255),
	primary key(id)
);

create table cms_article(
	id number(11),
	author varchar2(255),
	clicktimes number(11),
	content varchar2(255),
	publishDate Date,
	title varchar2(15),
	category_id number(11),
	primary key(id),
	foreign key(category_id) references cms_category(id)
);

create table cms_customer(
	id number(11),
	username varchar2(255) not null,
	password varchar2(255) not null,
	primary key(id)
);

create table cms_link(
	id number(11),
	name varchar2(255) not null,
	url varchar2(255) not null,
	primary key(id)
);

Mysql:

create table `cms_category`(
	`id` int(11) auto_increment,
	`code` bigint(20) default null,
	`name` varchar(255),
	primary key(`id`)
)engine=InnoDB auto_increment=1 default charset=utf8;

create table `cms_article`(
	`id` int(11) auto_increment,
	`author` varchar(255) default null,
	`clicktimes` int(11),
	`content` text default null,
	`publishDate` date default null,
	`title` varchar(15),
	`category_id` int(11),
	primary key(`id`),
	key `fk_article_category`(`category_id`),
	constraint `fk_article_category` foreign key(`category_id`)
	references `cms_article`(`id`)
)engine=InnoDB auto_increment=1 default charset=utf8;

create table `cms_customer`(
	`id` int(11) not null auto_increment,
	`username` varchar(255) default null,
	`password` varchar(255) default null,
	primary key(`id`)
)engine=InnoDB auto_increment=1 default charset=utf8;

create table `cms_link`(
	`id` int(11) not null auto_increment,
	`name` varchar(255) default null,
	`url` varchar(255) default null,
	primary key(`id`)
)engine=InnoDB auto_increment=1 default charset=utf8;

application.properties中配置数据源、修改端口号

server.port=8989

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url= jdbc:mysql://localhost:3306/cms?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root

动动手吧

三层架构:
web层:springmvc,controller(接收前台请求)
Service层:编写逻辑代码,接口,接口实现类(真正的逻辑代码)
dao层:操作数据库,映射接口、映射文件

编写工具类

1.创建utils包
utils包
CustomerException:自定义异常
Message:封装将来返回数据的对象
MessageUtil:进一步封装工具类,提供简便返回目标对象,返回数据直接调用静态方法
StatusCodeUtil:用于封装状态码
CustomerException.java

public class CustomerException extends RuntimeException {
	private static final long serialVersionUID = 1L;
	/**
	 * 状态码
	 */
	private Integer code;
	public Integer getCode() {
		return code;
	}
	public void setCode(Integer code) {
		this.code = code;
	}
	public CustomerException(Integer code,String message) {
		super(message);
		this.code = code;
	}
}

Message.java

public class Message<T> {
	/**
	 * 状态码
	 */
	private Integer status;
	/**
	 * 返回信息
	 */
	private String message;
	/**
	 * 返回的数据类
	 */
	private T data;
	/**
	 * 返回时间
	 */
	private Long time;

	public Integer getStatus() {
		return status;
	}

	public void setStatus(Integer status) {
		this.status = status;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public T getData() {
		return data;
	}

	public void setData(T data) {
		this.data = data;
	}

	public Long getTime() {
		return time;
	}

	public void setTime(Long time) {
		this.time = time;
	}

	public Message(Integer status, String message, T data, Long time) {
		super();
		this.status = status;
		this.message = message;
		this.data = data;
		this.time = time;
	}

	public Message() {
		super();
	}
}

MessageUtil.java

public class MessageUtil {
	/**
	 * 成功,并且返回数据
	 * 第一个标识,后面泛型类
	 * 第二个泛型
	 */
	public static <E>Message<E> success(E obj){
		return new Message<E>(200,"success",obj,new Date().getTime());
	}
	/**
	 * 成功,无返回值
	 */
	public static <E>Message<E> success(){
		return new Message<E>(200,"success",null,new Date().getTime());
	}
	/**
	 * 失败,返回自定义异常
	 */
	public static <E>Message<E> error(Integer code,String msg){
		return new Message<E>(code, msg, null, new Date().getTime());
	}
}

StatusCodeUtil.java

public class StatusCodeUtil {
	public static final Integer ERROR_CODE = 500;
	public static final Integer NOFOUND_CODE = 404;
	public static final Integer NOALLOW_CODE = 405;
}

待续…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章