SpringBoot 2.7.2 學習系列,本節通過實戰內容講解如何集成 MyBatisPlus
本文在前文的基礎上集成 MyBatisPlus,并創建資料庫表,實作一個物體簡單的 CRUD 介面, MyBatis Plus 在 MyBatis 做了增強,內置了通用的 Mapper,同時也有代碼生成器,簡化單表的開發作業,
1 準備資料庫
1.1 IDEA 配置資料庫
可以在 IDEA 中配置資料庫,也可以使用 Navicat、DataGrip 等軟體連接資料庫,這里簡單說說使用 IDEA 連接資料庫的步驟,
1)點擊右側上方的 Database,在彈出的 Database面板上,點擊左上角加號圖示,依次選擇 Data Source --> MySQL

2)在彈出的視窗中填寫 host、port、User、Password,下載MySQL驅動后,點擊 Test Connection,測驗連接成功后,點擊OK即可,

1.2 創建資料庫
執行如下建庫陳述句:
create database `hero_springboot_demo`
default character set utf8mb4 collate utf8mb4_general_ci;
1.3 創建表結構
執行如下建表陳述句:
create table computer
(
id bigint auto_increment,
size decimal(4, 1) comment '尺寸',
operation varchar(32) comment '作業系統',
year varchar(4) comment '年份',
primary key (id)
) comment '電腦';
1.4 初始化資料
insert into computer(size, operation, year)
values (16, 'MacOS', '2022'),
(14, 'MacOS', '2022'),
(15.6, 'MacOS', '2018'),
(13.3, 'MacOS', '2018'),
(15.6, 'MacOS', '2016'),
(13.3, 'MacOS', '2016'),
(14, 'Windows 10', '2022'),
(13, 'Windows 10', '2020'),
(11, 'Windows 10', '2018'),
(14, 'Windows 8', '2022'),
(13, 'Windows 8', '2020'),
(11, 'Windows 8', '2018');
2 添加依賴
需要添加如下依賴:
- mybatis-plus-boot-starter:Mybatis Plus 與 Spring Boot 整合所需;
- mysql-connector-java: MySQL 驅動;
- lombok:可選,簡化 Getter、Setter、構造注入等,簡化代碼,
在 properties 中定義 mybatis-plus 版本號:
<!-- MyBatis Plus 版本 -->
<mybatis-plus.version>3.5.2</mybatis-plus.version>
添加依賴:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
3 代碼生成器
MyBatis Plus 提供了代碼生成器,在真實的開發中,通常會獨立一個工程來生成相關代碼,在這里的demo就直接通過單元測驗的方式進行了,
3.1 添加代碼生成器依賴
代碼生成器的依賴為 mybatis-plus-generator,該依賴內部不含模板引擎,需要手動添加模板引擎的依賴,這里使用 freemarker,由于采用單元測驗的方式生成代碼,還需添加 junit,這三個 dependecy scope 都采用 test 即可,
<properties>
...
<mybatis-plus-generator.version>3.5.3</mybatis-plus-generator.version>
</properties>
dependecies 中:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatis-plus-generator.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
3.2 撰寫單元測驗
在 src/test/java 下新建類:com.yygnb.demo.MyBatisPlusGeneratorTest,使用官方提供的新版方式進行代碼生成的撰寫:
@Test
public void testGenerate() {
String url = "jdbc:mysql://localhost:3306/hero_springboot_demo?useUnicode=true&characterEncoding=utf8&useSSL=true";
String username = "root";
String password = "Mysql.123";
String author = "hero-yyg";
String outputDir = "/Users/hero/temp-code";
String parentPackage = "com.yygnb.demo";
String moduleName = null;
String outputFileXml = "/Users/hero/temp-code/xml";
FastAutoGenerator.create(url, username, password)
.globalConfig(builder -> {
builder.author(author) // 設定作者
.outputDir(outputDir); // 指定輸出目錄
})
.packageConfig(builder -> {
builder.parent(parentPackage) // 設定父包名
.moduleName(moduleName) // 設定父包模塊名
.pathInfo(Collections.singletonMap(OutputFile.xml, outputFileXml)); // 設定mapperXml生成路徑
})
.strategyConfig(builder -> {
builder.addInclude("computer"); // 設定需要生成的表名
// .addTablePrefix("t_", "c_"); // 設定過濾表前綴
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默認的是Velocity引擎模板
.execute();
}
注意修改方法開始的變數定義,包括 JDBC url、username、password、生成的代碼的輸出目錄,生成的mapper 的輸出目錄,修改后執行單元測驗,在指定的目錄 /Users/hero/temp-code下可以看到生成的 controller、service、entity、mapper、xml,
4 代碼撰寫
4.1 物體類
將生成的物體類 Computer 復制到 com.yygnb.demo.entity中,生成的代碼包括很多 Getter/Setter 等,可使用 前面引入的 lombok進行修改:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Computer implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "https://www.cnblogs.com/youyacoder/archive/2022/08/04/id", type = IdType.AUTO)
private Long id;
/**
* 尺寸
*/
private BigDecimal size;
/**
* 作業系統
*/
private String operation;
/**
* 年份
*/
private String year;
}
4.2 mapper 和 service
- 將生成的 mapper 拷貝到
src/main/java中com.yygnb.demo.mapper.ComputerMapper - 將生成的 service 目錄整個拷貝到
com.yygnb.demo中 - 將生成的 xml/ComputerMapper.xml 復制到
src/main/resources/mapper下
4.3 撰寫controller
撰寫介面 com.yygnb.demo.controller.ComputerController:
package com.yygnb.demo.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yygnb.demo.entity.Computer;
import com.yygnb.demo.service.IComputerService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
@RequiredArgsConstructor
@RestController
@RequestMapping("/computer")
public class ComputerController {
private final IComputerService computerService;
@GetMapping("/{id}")
public Computer findById(@PathVariable Long id) {
return this.computerService.getById(id);
}
@GetMapping("/find-page/{page}/{size}")
public Page<Computer> findPage(@PathVariable Integer page, @PathVariable Integer size) {
return this.computerService.page(new Page<>(page, size));
}
@PostMapping()
public Computer save(@RequestBody Computer computer) {
computer.setId(null);
this.computerService.save(computer);
return computer;
}
@PutMapping("/{id}")
public Computer update(@PathVariable Long id, @RequestBody Computer computer) {
computer.setId(id);
this.computerService.updateById(computer);
return computer;
}
@DeleteMapping("/{id}")
public void delete(@PathVariable Long id) {
this.computerService.removeById(id);
}
}
上面包含了五個介面:
1. 根據id查詢(get)
2. 分頁查詢(get)
3. 新增(post)
4. 根據id修改(put)
5. 根據id洗掉(delete)
4.4 配置分頁攔截器
由于上面使用到分頁查詢,需要配置 MyBatis Plus 中的 Interceptor,創建類: com.yygnb.demo.config.MyBatisPlusConfig:
@Configuration
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor=new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
5 配置 MyBatis Plus
5.1 application.yml
在application.yml 配置資料源和 MyBatis Plus:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/hero_springboot_demo?useUnicode=true&characterEncoding=utf8&useSSL=true
username: root
password: Mysql.123
# mybatis 日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
5.2 DemoApplication
在啟動類 DemoApplication下配置 Mapper 掃描路徑:
@MapperScan("com.yygnb.demo.mapper")
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
6 測驗運行
至此,整合MyBatisPlus就完成了,啟動服務,分別測驗五個介面,由于還沒有整合介面檔案,可以先在 postman 或其他工具中測驗,postman 使用的人較多,也比較簡單,這里我就采用 IDEA 內置的 HTTP Client 進行測驗,
點擊頂部 "Tools" --> "HTTP Client" --> "Create request in HTTP Client",會打開“rest-api.http”,在該界面可以撰寫請求,點擊右上角的 "Add request" 可添加新請求, 多個請求之間,需要使用 ### 分隔,點擊請求左側的綠色三角便可執行請求,

POST http://localhost:9099/computer
Content-Type: application/json
{
"id": "",
"size": "18",
"operation": "Linux",
"year": "2023"
}
###
PUT http://localhost:9099/computer/13
Content-Type: application/json
{
"id": "",
"size": "0",
"operation": "Linux",
"year": "2013"
}
###
DELETE http://localhost:9099/computer/13
###
GET http://localhost:9099/computer/13
###
GET http://localhost:9099/computer/find-page/2/10
###
雖然集成 MyBatis Plus 實作了增刪改查介面,但上面的代碼還存在很多問題:
- 資料庫的版本管理
- 介面的引數校驗和全域例外處理
- 日志
- 介面檔案
- 資料庫連接池資訊監控
- 多環境配置
- 服務運行狀態監控等
上述問題都會在后續的文章中逐步完善demo,
今日優雅哥(youyacoder)學習結束,期待關注留言分享~~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/500963.html
標籤:其他
上一篇:實踐:二進制資料處理與封裝
下一篇:python是什么?
