1. 基礎知識介紹
1.1 MP概要
MyBatis-Plus(簡稱 MP)是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,爲簡化開發、提高效率而生。
1.2 MP特性
- 無侵入:只做增強不做改變,引入它不會對現有工程產生影響,如絲般順滑
- 損耗小:啓動即會自動注入基本 CURD,性能基本無損耗,直接面向對象操作
- 強大的 CRUD 操作:內置通用 Mapper、通用 Service,僅僅通過少量配置即可實現單表大部分 CRUD 操作,更有強大的條件構造器,滿足各類使用需求
- 支持 Lambda 形式調用:通過 Lambda 表達式,方便的編寫各類查詢條件,無需再擔心字段寫錯
- 支持主鍵自動生成:支持多達 4 種主鍵策略(內含分佈式唯一 ID 生成器 - Sequence),可自由配置,完美解決主鍵問題
- 支持 ActiveRecord 模式:支持 ActiveRecord 形式調用,實體類只需繼承 Model 類即可進行強大的 CRUD 操作
- 支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )
- 內置代碼生成器:採用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來使用
- 內置分頁插件:基於 MyBatis 物理分頁,開發者無需關心具體操作,配置好插件之後,寫分頁等同於普通 List 查詢
- 分頁插件支持多種數據庫:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多種數據庫
- 內置性能分析插件:可輸出 Sql 語句以及其執行時間,建議開發測試時啓用該功能,能快速揪出慢查詢
- 內置全局攔截插件:提供全表 delete 、 update 操作智能分析阻斷,也可自定義攔截規則,預防誤操作
2. 環境準備
- 操作系統:macOS Catalina 10.15.3
- IDEA:IntelliJ IDEA 2019.1 (Ultimate Edition)
- JDK:1.8
- SpringBoot:2.3.1
- MybatisPlus:3.3.2
- Mysql:8.0.19
3. 項目結構
4. 基本操作過程
4.1 創建測試表
CREATE DATABASE mp;
USE mp;
DROP TABLE IF EXISTS `tbl_employee`;
CREATE TABLE `tbl_employee` (
`id` int NOT NULL AUTO_INCREMENT,
`last_name` varchar(45) DEFAULT NULL,
`email` varchar(45) DEFAULT NULL,
`gender` char(1) DEFAULT NULL,
`age` int DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
LOCK TABLES `tbl_employee` WRITE;
INSERT INTO `tbl_employee` VALUES (1,'Tom','[email protected]','1',22),(2,'Hedon','Hedon@hedon,com','1',21),(3,'Jerry','[email protected]','2',18),(4,'White','[email protected]','2',30);
UNLOCK TABLES;
4.2 創建 SpringBoot 的 Web 項目
4.3 編寫 pom.xml 文件,加入依賴座標
重點:
- mybatis-plus
- lombok
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
4.4 編寫配置文件 application.properties,配置數據庫連接信息
spring.application.name=itcast-mp-springboot
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mp
spring.datasource.username=root
spring.datasource.password=root
在 Spring Boot 啓動類中添加 @MapperScan
註解,掃描 Mapper 文件夾
4.6 編寫實體類 Employee
package it.cast.mp.itcastmpspringboot.pojo;
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 lombok.ToString;
/**
* @author Hedon Wang
* @create 2020-06-24 22:53
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@TableName(value = "tbl_employee")
public class Employee {
@TableId(value = "id",type = IdType.AUTO)
private Integer id ; // int
private String lastName;
private String email ;
private Integer gender;
private Integer age ;
private Double salary ;
}
4.7 編寫Mapper接口,並繼承MP提供的BaseMapper
package it.cast.mp.itcastmpspringboot.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import it.cast.mp.itcastmpspringboot.pojo.Employee;
/**
* @author Hedon Wang
* @create 2020-06-25 00:25
*/
public interface EmployeeMapper extends BaseMapper<Employee> {
}
4.8 測試 selectList()
@RunWith(SpringRunner.class)
@SpringBootTest
class ItcastMpSpringbootApplicationTests {
@Autowired
EmployeeMapper employeeMapper;
@Test
public void testSearchList(){
List<Employee> employees = employeeMapper.selectList(null);
for (Employee employee:employees){
System.out.println(employee);
}
}
}
- 測試結果
5. 項目源碼
5.1 ItcastMpSpringbootApplication.java
package it.cast.mp.itcastmpspringboot;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("it.cast.mp.itcastmpspringboot.mapper")
@SpringBootApplication
public class ItcastMpSpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(ItcastMpSpringbootApplication.class, args);
}
}
5.2 Employee.java
package it.cast.mp.itcastmpspringboot.pojo;
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 lombok.ToString;
/**
* @author Hedon Wang
* @create 2020-06-24 22:53
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@TableName(value = "tbl_employee")
public class Employee {
@TableId(value = "id",type = IdType.AUTO)
private Integer id ; // int
private String lastName;
private String email ;
private Integer gender;
private Integer age ;
private Double salary ;
}
5.3 EmployeeMapper.java
package it.cast.mp.itcastmpspringboot.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import it.cast.mp.itcastmpspringboot.pojo.Employee;
/**
* @author Hedon Wang
* @create 2020-06-25 00:25
*/
public interface EmployeeMapper extends BaseMapper<Employee> {
}
5.4 application.properties
spring.application.name=itcast-mp-springboot
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mp
spring.datasource.username=root
spring.datasource.password=root
5.5 log4j.properties
log4j.rootLogger=DEBUG,A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout = org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%t] [%c]-[%p] %m%n
5.6 ItcastMpSpringbootApplicationTests.java
package it.cast.mp.itcastmpspringboot;
import it.cast.mp.itcastmpspringboot.mapper.EmployeeMapper;
import it.cast.mp.itcastmpspringboot.pojo.Employee;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
class ItcastMpSpringbootApplicationTests {
@Autowired
EmployeeMapper employeeMapper;
@Test
void contextLoads() {
}
@Test
public void testSearchList(){
List<Employee> employees = employeeMapper.selectList(null);
for (Employee employee:employees){
System.out.println(employee);
}
}
}
5.7 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>it.cast.mp</groupId>
<artifactId>itcast-mp-springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>itcast-mp-springboot</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>