【良心推荐】手摸手带你做Springboot + mybat

前情提要(都是干货)

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

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

工具

  • idea
  • JDK8

后端使用技术

在这里插入图片描述

前端使用技术

在这里插入图片描述

项目截图

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

结构

在这里插入图片描述

开始正文

创建一个Maven项目

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
xml复制代码	<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代码

1
2
3
4
5
6
7
8
9
10
11
java复制代码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代码

1
2
3
4
5
6
7
8
9
10
11
12
13
java复制代码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的库,没添加表)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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

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

整合框架

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

1
2
3
4
5
6
7
8
9
10
11
12
13
text复制代码  ─src
└─main
├─java
│ └─com
│ └─macro
│ ├─controller 存放controller
│ ├─dao 数据库操作接口
│ ├─entity 存放实体类
│ ├─service service接口
│ │ └─impl service接口的实现类
│ └─utils 存放工具类
└─resources
└─mapper 存放xml,映射dao层

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

配置文件和添加文件

完整yml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
java复制代码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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
java复制代码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

1
2
3
4
5
6
java复制代码import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.macro.entity.UserEntity;

public interface UserDao extends BaseMapper<UserEntity> {

}

UserService接口继承IService

1
2
3
4
5
java复制代码import com.baomidou.mybatisplus.extension.service.IService;
import com.macro.entity.UserEntity;

public interface UserService extends IService<UserEntity> {
}

UserService接口的实现类UserServiceImpl

1
2
3
4
5
6
7
8
9
10
java复制代码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工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
java复制代码@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添加一条查询方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
java复制代码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值

在这里插入图片描述

总结

1
2
3
4
5
6
7
8
9
10
11
text复制代码第一篇项目的架子已经搭建起来了

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

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

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

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

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

源码

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

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%