從零開始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;
}

待續…

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