Spring Boot聚合项目:达内知道(二)-Mybatis Plus、Spring Security
1.1 什么是Mybatis Plus?
Mybatis Plus是一个对Mybatis框架进行了增强的框架,在保留原有功能的基础上,又增加了一些实用的功能(mybatis封装了底层的JDBC代码,用于对数据库进行操作,详见:Mybatis框架 - 梦想家小崔 - 博客园 https://www.cnblogs.com/XiaoCui-blog/p/15110488.html)。
左侧的代表mybatis plus(有个小星星,表示增强),右侧的代表mybatis,mybatis plus是mybatis的增强版。
1.2 添加依赖
我们现在portal项目的依赖都没有添加版本,因为我们继承的Spring Boot 2.3.12.RELEASE这个项目中已经定义了开发中常用的框架的版本。但是Mybatis Plus这个框架的版本没有在Spring Boot 2.3.12中定义,所以我们添加依赖要加版本。但是多个模块都添加依赖版本会造成版本号维护问题,所以企业中的做法是在父项目中定义一次版本,子项目中来使用,当需要维护版本时,只需要修改父项目中的版本即可。
先在父项目knows中的pom.xml文件中添加mybatis plus版本和依赖:
<properties>
<!--java版本-->
<java.version>1.8</java.version>
<!--mybatis-plus版本-->
<mybatis.plus.version>3.3.1</mybatis.plus.version>
</properties>
<!--添加依赖管理,管理版本-->
<dependencyManagement>
<dependencies>
<!--${mybatis.plus.version}:取mybatis.plus.version里面的内容-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
子项目knows-portal的pom.xml文件的最终依赖:
<!--添加依赖-->
<dependencies>
<!--spring-boot-starter-web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--测试依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加lombok工具依赖,简化get、set、toString方法等书写-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--mybatis-plus框架,版本已在父版本中定义-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<!-- 连接MySQL数据库的依赖,版本在SpringBoot已定义 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
1.3 Mybatis Plus功能一:自动生成方法
Mybatis Plus 框架主要新增了两个实用的功能,第一是可以通过实现一个接口自动实现基本增删改查方法。
为了测试,我们新建一个对应Tag表的实体类:
创建mapper包,包中新建TagMapper:
// 我们连接操作数据库的Mapper接口要继承一个父接口BaseMapper
// BaseMapper这个接口中已经编写好了基本的增删改查方法,无需我们编写
// <Tag>:表示当前在这个Mapper对哪个表生成代码
在SpringBoot启动类中,添加扫描包的代码:
package cn.tedu.knows.portal;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
注意:如果启动类没有添加@MapperScan(“cn.tedu.know.portal.mapper”),报如下异常:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'cn.tedu.know.portal.KnowPortalApplicationTests': Unsatisfied dependency expressed through field 'mapper'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'cn.tedu.know.portal.mapper.TagMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
在application.properties文件中进行数据库配置:
# 连接数据库,注意数据库名为knows、MariaDB端口号为3307
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3307/knows?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
spring.datasource.username=root
spring.datasource.password=root
在测试类中测试功能:
注意:如果使用mapper时没有先添加@Autowired,报如下异常:
1.4 显示Sql语句在控制台
上面经过测试,我们验证了Mybatis Plus框架是可以自动生成基本操作语句的,但是运行了什么样的语句,我们不知道。如果想观察sql语句的运行,我们需要配置日志级别。
首先了解日志级别分级:
-
trace 痕迹 低重要级别
-
debug 打桩输出(调试)
-
info 信息
-
warn 警告
-
error 错误 高重要级别
SpringBoot框架默认显示的是Info以上级别的信息,Mybatis框架把sql语句的运行信息放在了debug级别,所以我们只需要将SpringBoot输出日志的级别修改为debug,就可以看到Mybatis运行的sql语句了。
需要在application.properties文件中添加日志配置:
# 设置cn.tedu.konws.portal包中的所有类的日志输出级别:
# debug级别及以上级别信息会输出到控制台显示,也叫设置门槛
logging.level.cn.tedu.knows.portal = debug
测试代码:
显示结果:
1.5 Mybatis Plus功能二:代码生成器
在实际开发中,数据库中每个表都要有对应的实体类 \ 控制器 \ 数据访问层 \ 业务逻辑层的代码,项目越大,表越多,这个步骤就越繁琐。为了减轻这个负担,Mybatis Plus提供了代码生成器,能够根据数据库中的表自动生成这一系列的数据。
创建项目
因为代码生成是需要一些指令和配置的,但是这些指令和配置是只运行一次的,所以最好单独放在一个项目中。
创建父项目knows的子项目knows-generator:
父项目的pom.xml添加子项目:
<modules>
<module>knows-portal</module>
<module>knows-generator</module>
</modules>
子项目的knows-generator的pom.xml:进行父子相认、添加依赖