目錄
**
CMS內容管理系統
**
關於springboot、springmvc、mybatis等相關框架的組合項目,主要處理後臺數據以及前後端分離數據交互。涉及文章、欄目、鏈接及消費者的數據操作。歡迎點擊關注!及時更新!
項目技術
- Maven
一個項目管理工具,可以對 Java 項目進行構建、依賴管理 - Mybatis
一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java對象)映射成數據庫中的記錄。 - SpringBoot
由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。 - SpringMVC
屬於SpringFrameWork的後續產品,已經融合在Spring Web Flow裏面。Spring 框架提供了構建 Web 應用程序的全功能 MVC 模塊。使用 Spring 可插入的 MVC 架構,從而在使用Spring進行WEB開發時,可以選擇使用Spring的Spring MVC框架或集成其他MVC開發框架,如Struts1(現在一般不用),Struts 2(一般老項目使用)等。 - mybatis-generator
根據數據庫表自動的生成映 射文件,映射接口,pojo類,讓開發人員不再去 關心dao層開發 - Mysql/Oracle
數據庫 - Swagger
Swagger 是最流行的 API 開發工具,它遵循 OpenAPI Specification(OpenAPI 規範,也簡稱 OAS)。
Swagger 可以貫穿於整個 API 生態,如 API 的設計、編寫 API 文檔、測試和部署。
Swagger 是一種通用的,和編程語言無關的 API 描述規範。
環境搭建
Maven配置(這裏用apache-maven-3.3.9)
Windows–>系統–>高級系統設置–>環境變量
path中添加路徑
輸入mvn --version,出現版本信息,maven配置成功
eclipse/IDEA集成Maven
eclipse:
Window–>Preferences–>查找Maven
添加Maven位置
配置配置文件及本地倉庫位置
IDEA:
File–>settings搜索Maven
添加Maven相關配置信息及本地倉庫位置
項目搭建
eclipse:搭建springboot項目
右擊–>new–>Spring Stater Project
添加相關依賴
注:根據數據庫選擇驅動。添加熱部署、mybatis、MySQL驅動、SpringMVC相關依賴。
IDEA:搭建springboot項目
根據自己信息修改
添加依賴(數據庫驅動自選)
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&useUnicode=true&characterEncoding=utf-8&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
執行成功會生成一系列映射接口和映射文件
在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包
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;
}
待續…