SpringBoot 之快速搭建后台管理系统

1、导入依赖

<properties>
	<java.version>1.8</java.version>
    <env>beta</env>
    <scmVersion>HEAD</scmVersion>
    <mysql.java.version>5.1.42</mysql.java.version>
    <guava.version>19.0</guava.version>
    <druid.version>1.1.11</druid.version>
    <pagehelper.version>1.2.3</pagehelper.version>
    <mybatis.version>2.0.1</mybatis.version>
</properties>

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
		<scope>runtime</scope>
		<optional>true</optional>
	</dependency>
	<dependency>
		<groupId>org.projectlombok</groupId>
		<artifactId>lombok</artifactId>
		<optional>true</optional>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
	</dependency>
    <!--  数据库相关 -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>${mybatis.version}</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <!-- 如果数据库服务器是5.7以下版本,驱动建议使用这个版本,如果使用高版本会导致时间问题-->
        <version>${mysql.java.version}</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>${pagehelper.version}</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>${druid.version}</version>
    </dependency>
    <!--  数据库相关 -->
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
    </dependency>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>${guava.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <!-- mybatis-generator-core 反向生成java代码-->
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.3.5</version>
        <scope>runtime</scope>
    </dependency>
</dependencies>

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>

		<!--mybatis文件生成插件-->
		<plugin>
			<groupId>org.mybatis.generator</groupId>
			<artifactId>mybatis-generator-maven-plugin</artifactId>
			<version>1.3.2</version>
			<dependencies>
				<dependency>
					<groupId>mysql</groupId>
					<artifactId>mysql-connector-java</artifactId>
					<version>${mysql.java.version}</version>
				</dependency>
			</dependencies>
			<configuration>
				<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
				<verbose>true</verbose>
				<overwrite>true</overwrite>
			</configuration>
		</plugin>
	</plugins>
</build>

2、集成Mybatis

参考:SpringBoot 之集成MyBatis

3、集成日志

resources目录下创建logback-spring.xml日志文件。
参考:SpringBoot 之日志框架

<?xml version="1.0" encoding="UTF-8"?>

<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <contextName>logback</contextName>

    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
    <!-- 这里定义日志的根目录 -->
    <property name="log.path" value="/data/logs/tomcat/spring-boot-ule"/>

    <!-- appender 负责写日志的组件 -->

    <!--输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--此日志appender是为开发使用,只配置最低级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>


    <!--输出到文件-->

    <!-- 时间滚动输出 level为 ALL -->
    <appender name="FILE_ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/info.log</file>
        <!--日志文件输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--
                滚动时产生日志的归档路径及文件名
                %d{yyyy-MM-dd}:按天进行日志滚动
                %i:当文件大小超过maxFileSize时,按照i进行文件滚动
            -->
            <fileNamePattern>${log.path}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>90</maxHistory>
        </rollingPolicy>
    </appender>


    <!-- 时间滚动输出 level为 ERROR 日志 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/error.log</file>
        <!--日志文件输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>90</maxHistory>
        </rollingPolicy>
        <!-- 此日志文件只记录ERROR级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
	
	<!-- 打印sql日志 -->
    <logger name="com.ule.mapper" level="debug"/>

    <root level="info">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE_ALL"/>
        <appender-ref ref="ERROR_FILE"/>
    </root>

</configuration>

4、编写后台页面

使用layui构建后台也没布局。

第一步:将layui复制到static目录下
在这里插入图片描述
第二步:在templates编写html页面
使用thymeleaf模板引擎。
在这里插入图片描述
commons.html:公共模板

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">

<head lang="en">
    <meta charset="UTF-8">
    <title>公共模板</title>
</head>

<!--定义公共的头部,commonHeader 为模板片段名称-->
<header th:fragment="commonHeader">
    <link type="text/css" rel="stylesheet" th:href="@{/layui/css/layui.css}">
    <script th:src="@{/layui/layui.all.js}"></script>
    <div class="layui-header">
        <div class="layui-logo"><a href="" style="color: #00FF00">后台管理系统</a></div>
    </div>
</header>

<!-- 定义公共的左侧菜单,commonMenu 表示片段名称,index 为传递进来的参数-->
<menu th:fragment="commonMenu(index)">
    <div class="layui-side layui-bg-black">
        <div class="layui-side-scroll">
            <ul class="layui-nav layui-nav-tree">
                <li class="layui-nav-item layui-nav-itemed">
                    <dl class="layui-nav-child">
                        <!-- 根据传递的参数 index 来设置当前活动的菜单样式;三元运算符,第三个参数缺省,当 ? 判断为 false 时返回 null-->
                        <dd th:class="${index}==0?'layui-this'"><a th:href="@{/content1}">菜单1</a></dd>
                        <dd th:class="${index}==1?'layui-this'"><a th:href="@{/content2}">菜单2</a></dd>
                        <!-- 同理如果还有其它更多的菜单时,可以依次往下传递参数-->
                    </dl>
                </li>
            </ul>
        </div>
    </div>
</menu>

<!--定义公共的底部,这里使用 id 选择器,当然也可以用片段名,如 th:fragment="commonFooter"-->
<footer id="commonFooter">
    <div class="layui-footer">
        <p>Copyright © 1998 - 2018 YYServer. All Rights Reserved</p>
    </div>
</footer>

</html>

content1.html:菜单一

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>后台管理</title>
</head>
<body class="layui-layout-body">
<div class="layui-layout layui-layout-admin">
    <header th:replace="commons :: commonHeader"></header>

    <menu th:replace="commons :: commonMenu(0)"></menu>

    <div class="layui-body">
        <!-- 内容主体区域 -->
        <div style="padding: 15px;">
            <p>内容主体区域1</p>
            <p th:text="${name}"></p>
        </div>
    </div>

    <footer th:replace="commons :: #commonFooter"></footer>
</div>

</body>
</html>

content2.html:菜单二

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>后台管理</title>
</head>
<body class="layui-layout-body">
    <div class="layui-layout layui-layout-admin">
        <header th:replace="commons :: commonHeader"></header>

        <menu th:replace="commons :: commonMenu(1)"></menu>

        <div class="layui-body">
            <!-- 内容主体区域 -->
            <div style="padding: 15px;">
                <p>内容主体区域2</p>
            </div>
        </div>

        <footer th:replace="commons :: #commonFooter"></footer>
    </div>
</body>
</html>

5、编写控制器

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;

@Controller
@Slf4j
public class HelloController {

    @RequestMapping("/content1")
    public String content1(Map<String, Object> paramMap, HttpServletRequest request, HttpServletResponse response) {
        paramMap.put("name", "Tom");
        return "content1";
    }

    @RequestMapping("/content2")
    public String content2(Map<String, Object> paramMap) {
        return "content2";
    }
}

6、集成mybatis代码生成插件

已经在导入依赖中集成了mybatis代码生成插件,这里只需要编写代码生成需要的xml配置。
resources目录下创建generatorConfig.xml文件。
参考:IDEA用Maven插件生成Mybatis的mapper、xml、bean

7、后台页面最终效果图

在这里插入图片描述

  • 1
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值