【良心推荐】手摸手带你做Springboot + mybatis plus + shiro + redis 后台管理项目(第一章)

671 阅读4分钟

前情提要(都是干货)

项目从最初的SpringBoot + mybatis 进行整合,慢慢增加shiroredis框架 由浅入深的进行整合,一点一点讲解,内容可能稍微啰嗦,慢慢学还是有收获的。项目截图在下面

  • 第一章: 搭建环境以及整合mybatis plus
  • 第二章: 登陆和用户管理
  • 第三章: 整合shiro 设置用户密码加密
  • 第四章: 整合redis和动态权限以及动态目录
  • 第五章: 整合knife4j 生成好看的开发文档
  • 第六章: Linux环境搭建与发布上线

工具

  • idea
  • JDK8

后端使用技术

在这里插入图片描述

前端使用技术

在这里插入图片描述

项目截图

在这里插入图片描述 在这里插入图片描述 请添加图片描述

结构

在这里插入图片描述

开始正文

创建一个Maven项目

在这里插入图片描述 修改pom文件 添加如下

	<packaging>jar</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.4</version>
    </parent>
    <properties>
        <lombok.version>1.18.16</lombok.version>
        <mybatis.version>2.1.3</mybatis.version>
        <fastjson.version>1.2.74</fastjson.version>
        <plus.version>3.3.2</plus.version>
        <druid.version>1.1.13</druid.version>
        <pagehelper.version>1.2.13</pagehelper.version>
        <hutool-version>5.7.13</hutool-version>
    </properties>

        <!--放入一些后面项目都会使用的东西
            比如:springboot spring基本架子
                mybatis 数据库操作,编写sql
                mybatis plus 对mybatis进行增强,免写简单sql
                pageHelper 分页插件
                devtools 代码热更新
                lombok 用于get  set,免手动操作
                mysql  数据库连接驱动
                json  json转换
                thymeleaf 前端模版引擎
                druid  连接池
        -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${plus.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>${druid.version}</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>${pagehelper.version}</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>${hutool-version}</version>
        </dependency>
    </dependencies>

在demo中添加以下文件

ApplicationBootmacro包下

在这里插入图片描述

controller代码

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class IndexController {

    @GetMapping(value = {"index","","/"})
    public String index(){
        return "你好,我是无术同学!";
    }
}

ApplicationBoot代码

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ApplicationBoot {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(ApplicationBoot.class);
        //从yml中读取项目的启动端口,若是填写项目名称,也可获取
        String port = context.getEnvironment().getProperty("server.port");
        System.out.println("访问地址: http://127.0.0.1:" + port);
    }
}

application.yml (目前只是在本地新建一个csdn的库,没添加表)

server:
  port: 8086
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/csdn?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
      username: root
      password: 123456
      initial-size: 10
      max-active: 100
      min-idle: 10
      max-wait: 60000
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 300000
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
      filter:
        stat:
          log-slow-sql: true
          slow-sql-millis: 1000
          merge-sql: false
        wall:
          config:
            multi-statement-allow: true


启动运行,看一下项目是否成功 访问地址: http://127.0.0.1:8086/ 看到一下文字则是项目运行成功

整合框架

上面的pom文件中已经加入了mysql驱动和mybatis、mybatis plus框架 整体目录:

  ─src
    └─main
        ├─java
        │  └─com
        │      └─macro
        │          ├─controller     存放controller 
        │          ├─dao			数据库操作接口
        │          ├─entity			存放实体类
        │          ├─service		service接口
        │          │  └─impl		service接口的实现类
        │          └─utils			存放工具类
        └─resources
            └─mapper				存放xml,映射dao层

数据库新增系统管理人员sys_user表,字段如下: 在这里插入图片描述 id键别忘加自动递增、主键唯一、不为null

配置文件和添加文件

完整yml文件

server:
  port: 8086
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/csdn?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
      username: root
      password: 123456
      initial-size: 10
      max-active: 100
      min-idle: 10
      max-wait: 60000
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 300000
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
      filter:
        stat:
          log-slow-sql: true
          slow-sql-millis: 1000
          merge-sql: false
        wall:
          config:
            multi-statement-allow: true
# mybatis映射的xml文件
mybatis:
  mapper-locations: classpath:mapper/*.xml


# springboot 中打印,不需要添加新依赖
logging:
  level:
    com.macro.dao : debug

修改ApplicationBoot

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
@MapperScan("com.macro.dao")
public class ApplicationBoot {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(ApplicationBoot.class);
        //从yml中读取项目的启动端口,若是填写项目名称,也可获取
        String port = context.getEnvironment().getProperty("server.port");
        System.out.println("访问地址: http://127.0.0.1:" + port);
    }
}


新增以下类 在这里插入图片描述 UserEntity

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;

@Data
//定义插入哪张表
@TableName("sys_user")
@NoArgsConstructor
@AllArgsConstructor
public class UserEntity implements Serializable {

    @TableId(value = "id",type = IdType.AUTO)
    private Integer id;

    //N大写会被mybatis plus转化为_n
    private String niceName;

    private String username;

    private String password;

    private String avatar;

    private Integer sex;

}

UserDao 接口继承BaseMapper

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.macro.entity.UserEntity;

public interface UserDao extends BaseMapper<UserEntity> {

}

UserService接口继承IService

import com.baomidou.mybatisplus.extension.service.IService;
import com.macro.entity.UserEntity;

public interface UserService extends IService<UserEntity> {
}

UserService接口的实现类UserServiceImpl

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.macro.dao.UserDao;
import com.macro.entity.UserEntity;
import com.macro.service.UserService;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements UserService {

}

Result工具类

@Data
public class Result {
    private Integer code;
    private String msg;
    private Object data;

    Result(Integer code, String msg, Object data){
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    public static Result success(Object data){
        return new Result(200,"成功",data);
    }
    public static Result success(){
        return new Result(200,"成功",null);
    }

    public static Result error(Integer code, String msg){
        return new Result(code,msg,null);
    }

    public static Result error(String msg){
        return new Result(400,msg,null);
    }
}

数据库中添加一条数据

IndexController添加一条查询方法

import com.macro.entity.UserEntity;
import com.macro.service.UserService;
import com.macro.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class IndexController {

    @Autowired
    private UserService userService;

    @GetMapping("info/{id}")
    public Result info(@PathVariable Integer id){
        UserEntity entity = userService.getById(id);
        return Result.success(entity);
    }




}

启动访问 http://127.0.0.1:8086/info/1 1就是数据的id值

在这里插入图片描述

总结

第一篇项目的架子已经搭建起来了

好多东西没有都没有细细说明

像 @RestController 注解,就是@Controller ,@ResponseBody 的组合体,返回json格式数据就不用加@ResponseBody了

但是跳转页面不可使用此注解,谨记!

还有service接口中的IService以及service的实现类中集成的ServiceImpl 都是mybatis plus 提供的类,包含一些增删改查方法

省去一部分时间写代码,很实用,还有UserDao集成的接口也是mybatis plus 提供的类

源码

在公众号内发送后台即可获取源码和数据库