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:進行父子相認、添加依賴