MyBatis-Plus簡介
MyBatis-Plus 是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,簡化開發,提高效率。它提供了以下主要特性:
- 無侵入:只做增強不做改變,引入它不會對現有工程產生影響
- 強大的 CRUD 操作:內置通用 Mapper、通用 Service,少量配置即可實現大部分 CRUD 操作
- 支持 Lambda 形式調用:通過 Lambda 表達式,方便的編寫各類查詢條件
- 支持主鍵自動生成:支持多達 4 種主鍵策略
- 內置分頁插件:基于 MyBatis 物理分頁,開發者無需關心具體操作
項目搭建
創建 SpringBoot 項目
在 pom.xml 中添加必要依賴:
<dependencies><!-- Spring Boot Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- MyBatis-Plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency><!-- Lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- MySQL驅動 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- 測試 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>
配置數據源
在 application.yml 中配置數據庫連接:
server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=falsedriver-class-name: com.mysql.cj.jdbc.Drivertype: com.zaxxer.hikari.HikariDataSourceusername: rootpassword: 123456
核心功能演示
實體類定義
使用 Lombok 簡化代碼:
@Data
public class User {private Integer id;private String name;private Integer age;private String email;public User() {}public User(Integer id, String name, Integer age, String email) {this.id = id;this.name = name;this.age = age;this.email = email;}
}
Mapper 接口
只需繼承 BaseMapper 即可獲得豐富的 CRUD 方法:
@Repository
public interface UserMapper extends BaseMapper<User> {// 無需編寫任何方法,即可獲得完整CRUD功能
}
基礎 CRUD 操作
@SpringBootTest
public class MyBatisplusTest extends AbstractTestNGSpringContextTests {@Autowiredprivate UserMapper userMapper;// 查詢所有用戶@Testpublic void testSelectList() {userMapper.selectList(null).forEach(System.out::println);}// 插入用戶@Testpublic void testInsert() {User user = new User(null, "張三", 23, "zhangsan@qcby.com");int result = userMapper.insert(user);System.out.println("受影響行數:" + result);System.out.println("id自動獲取:" + user.getId());}
}
MyBatis-Plus 特性詳解
主鍵生成策略
MyBatis-Plus 支持多種主鍵生成策略:
- AUTO:數據庫 ID 自增
- NONE:無狀態,該類型為未設置主鍵類型
- INPUT:用戶輸入 ID
- ASSIGN_ID:分配 ID
- ASSIGN_UUID:分配 UUID
條件構造器
MyBatis-Plus 提供了強大的條件構造器 QueryWrapper 和LambdaQueryWrapper:
// 使用QueryWrapper
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "張").lt("age", 30);
List<User> users = userMapper.selectList(queryWrapper);// 使用LambdaQueryWrapper(推薦)
LambdaQueryWrapper<User> lambdaQuery = Wrappers.lambdaQuery();
lambdaQuery.like(User::getName, "張").lt(User::getAge, 30);
List<User> users = userMapper.selectList(lambdaQuery);
分頁功能
添加分頁插件配置
@Configuration
public class MyBatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}
使用分頁查詢
@Test
public void testPage() {Page<User> page = new Page<>(1, 5); // 當前頁,每頁大小IPage<User> userPage = userMapper.selectPage(page, null);System.out.println("總頁數:" + userPage.getPages());System.out.println("總記錄數:" + userPage.getTotal());userPage.getRecords().forEach(System.out::println);
}