引言
在當今的 Java 開發領域,數據庫操作是一個至關重要的環節。MyBatis 作為一款優秀的持久層框架,已經被廣泛應用。而 MyBatis-Plus 則是在 MyBatis 基礎上進行增強的工具,它簡化了開發流程,提高了開發效率。本文將詳細介紹 MyBatis-Plus 的使用,結合具體的代碼示例,幫助你快速上手。
環境搭建
項目創建
首先,我們使用 Spring Boot 來創建一個基礎項目。這里使用 Maven 作為項目管理工具,在?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.qcby</groupId><artifactId>Mybatis-plus</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.4</version></parent><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>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency><!-- 注解替代 get/set 方法 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
配置數據源
在?application.yml?中配置數據庫連接信息:
spring:# 配置數據源信息datasource:# 配置數據源類型type: com.zaxxer.hikari.HikariDataSource# 配置連接數據庫信息driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/mybatis_plususername: rootpassword: 123456
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
實體類定義
創建一個?User
?實體類,使用 Lombok 注解簡化代碼
package com.qcby.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;@Data
public class User {@TableId(type = IdType.AUTO)private long id;private String name;private Integer age;private String email;
}
Mapper 接口定義
定義一個?UserMapper
?接口,繼承?BaseMapper<User>
,MyBatis-Plus 會自動為我們提供基本的增刪改查方法:
package com.qcby.mapper;import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.qcby.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;@Mapper
public interface UserMapper extends BaseMapper<User> {// 插入一條記錄int insert(User user);int deleteById(int id);int deleteById(User entity);int deleteByMap(@Param("columnMap") Map<String, Object> columnMap);int delete(@Param("wrapper") Wrapper<User> queryWrapper);// 刪除(根據 ID 批量刪除)int deleteBatchIds(@Param("collection") Collection<?> idList);// 根據 ID 修改int updateById(@Param("entity") User user);int update(@Param("entity") User user, @Param("wrapper") Wrapper<User> updateWrapper);// 查詢(根據 ID 批量查詢)List<User> selectBatchIds(@Param("collection") Collection<? extends Serializable> idList);// 查詢(根據 columnMap 條件)List<User> selectByMap(@Param("columnMap") Map<String, Object> columnMap);// 根據 entity 條件,查詢一條記錄default User selectOne(@Param("wrapper") Wrapper<User> queryWrapper) {List<User> ts = this.selectList(queryWrapper);if (ts != null && !ts.isEmpty()) {if (ts.size() != 1) {throw new RuntimeException("One record is expected, but the query result is multiple records");}return ts.get(0);}return null;}// 根據 Wrapper 條件,查詢總記錄數Long selectCount(@Param("wrapper") Wrapper<User> queryWrapper);// 根據 entity 條件,查詢全部記錄List<User> selectList(@Param("wrapper") Wrapper<User> queryWrapper);// 根據 Wrapper 條件,查詢全部記錄List<Map<String, Object>> selectMaps(@Param("wrapper") Wrapper<User> queryWrapper);// 根據 Wrapper 條件,查詢全部記錄(只返回第一個字段的值)List<Object> selectObjs(@Param("wrapper") Wrapper<User> queryWrapper);// 根據 entity 條件,查詢全部記錄(并翻頁)<P extends IPage<User>> P selectPage(P page, @Param("wrapper") Wrapper<User> queryWrapper);
}
基本操作示例
插入數據
import com.qcby.entity.User;
import com.qcby.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
public class MybatisPlusTest {@Autowiredprivate UserMapper userMapper;@Testpublic void testInsert() {User user = new User();user.setAge(18);user.setEmail("test@qcby.com");int insert = userMapper.insert(user);System.out.println("受影響行數:" + insert);System.out.println("id 自動獲取:" + user.getId());}
}
?刪除數據
@Test
public void testDelete() {int delete = userMapper.deleteById(1948707997203062787L);System.out.println(delete);
}
修改數據
@Test
public void testUpdateById() {User user = new User();user.setId(5);user.setName("test");user.setAge(18);user.setEmail("test@qcby.com");int update = userMapper.updateById(user);System.out.println(update);
}
?查詢數據
@Test
public void testSelectList() {userMapper.selectList(null).forEach(System.out::println);
}
分頁查詢
@Test
public void testSelectPage() {// 設置分頁參數,這里查詢第 1 頁,每頁 10 條記錄Page<User> page = new Page<>(1, 10);// 構建查詢條件,這里查詢年齡大于 16 的用戶QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.gt("age", 16);// 調用 selectPage 方法進行分頁查詢IPage<User> userPage = userMapper.selectPage(page, queryWrapper);// 輸出分頁信息System.out.println("當前頁碼: " + userPage.getCurrent());System.out.println("每頁記錄數: " + userPage.getSize());System.out.println("總記錄數: " + userPage.getTotal());System.out.println("總頁數: " + userPage.getPages());// 輸出查詢結果userPage.getRecords().forEach(System.out::println);
}
總結
通過以上的介紹和示例代碼,我們可以看到 MyBatis-Plus 極大地簡化了數據庫操作的開發流程。它提供了豐富的方法和強大的條件構造器,讓我們可以更高效地完成增刪改查操作。無論是小型項目還是大型項目,MyBatis-Plus 都是一個值得選擇的持久層框架。希望本文能幫助你快速掌握 MyBatis-Plus 的使用,在實際開發中發揮出它的優勢。