学习MyBatis-Plus

复制代码
	MyBatis-Plus是一个MyBatis的增强工具,它在MyBatis的基础上扩展了功能,同
时保留了MyBatis的基本特性,旨在简化开发并提高效率。以下是一个详细的MyBatis-
Plus使用教程,涵盖了从项目搭建到基础操作的过程。

一、MyBatis-Plus简介

MyBatis-Plus是MyBatis的增强版,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。它内置了通用Mapper、通用Service,仅通过少量配置即可实现单表大部分CRUD操作,并且提供了强大的条件构造器,支持Lambda形式调用,方便编写各类查询条件。

二、项目搭建

  1. 创建Spring Boot项目
    可以通过Spring Initializr(https://start.spring.io/)快速生成Spring Boot项目骨架。
    选择需要的项目元数据(如Group、Artifact、Name等),并添加依赖(如Spring Web、MyBatis-Plus Starter、MySQL Driver等)。
    2**. 引入依赖**
    在项目的pom.xml文件中引入MyBatis-Plus相关的依赖。以下是一个示例:
xml 复制代码
<dependencies>  
    <!-- MyBatis-Plus Spring Boot Starter -->  
    <dependency>  
        <groupId>com.baomidou</groupId>  
        <artifactId>mybatis-plus-boot-starter</artifactId>  
        <version>最新版本号</version> <!-- 请替换为实际可用的最新版本号 -->  
    </dependency>  
    <!-- MySQL 驱动 -->  
    <dependency>  
        <groupId>mysql</groupId>  
        <artifactId>mysql-connector-java</artifactId>  
        <version>8.0.xx</version> <!-- 请替换为实际可用的版本号 -->  
    </dependency>  
    <!-- Lombok(可选,用于简化实体类代码) -->  
    <dependency>  
        <groupId>org.projectlombok</groupId>  
        <artifactId>lombok</artifactId>  
        <optional>true</optional>  
    </dependency>  
    <!-- 其他需要的依赖 -->  
  1. 配置数据源 在application.yml或application.properties文件中配置MySQL数据源信息。以下是一个application.yml的示例:
yaml 复制代码
spring:  
  datasource:  
    driver-class-name: com.mysql.cj.jdbc.Driver  
    url: jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC  
    username: root  
    password: 密码
  1. 编写实体类
    根据数据库表结构编写对应的实体类,并使用Lombok简化代码(如果已引入Lombok依赖)。
java 复制代码
import lombok.Data;  
  
@Data  
public class User {  
    private Long id;  
    private String name;  
    private Integer age;  
    // 其他字段...  
}
  1. 编写Mapper接口
    Mapper接口继承自MyBatis-Plus提供的BaseMapper接口,MyBatis-Plus会自动实现该接口中的方法,无需编写实现类。
java 复制代码
import com.baomidou.mybatisplus.core.mapper.BaseMapper;  
  
public interface UserMapper extends BaseMapper<User> {  
    // 如果需要自定义方法,可以在这里添加  
}
  1. 扫描Mapper接口
    在Spring Boot启动类上添加@MapperScan注解,指定Mapper接口所在的包路径。
java 复制代码
import org.mybatis.spring.annotation.MapperScan;  
import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  
  
@SpringBootApplication  
@MapperScan("com.example.mapper") // 替换为你的Mapper接口所在的包路径  
public class MybatisPlusApplication {  
    public static void main(String[] args) {  
        SpringApplication.run(MybatisPlusApplication.class, args);  
    }  
}

三、基础操作

MyBatis-Plus提供了丰富的CRUD操作方法,通过Mapper接口中的方法即可实现。以下是一些常用的操作示例:

  1. 插入数据
java 复制代码
@Autowired  
private UserMapper userMapper;  
  
public void insertUser(User user) {  
    userMapper.insert(user);  
}
2. 更新数据
java 复制代码
public void updateUser(User user) {  
    userMapper.updateById(user); // 根据ID更新数据  
}
  1. 删除数据
java 复制代码
public void deleteUserById(Long id) {  
    userMapper.deleteById(id); 
}
 

四、进阶功能

复制代码
	MyBatis-Plus的高级操作涵盖了多个方面,包括但不限于条件查询、自定义SQL
、性能优化、逻辑删除、分页查询、自动填充等。以下将详细描述这些高级操作:

1. 条件查询

MyBatis-Plus提供了强大的条件构造器,如QueryWrapper和LambdaQueryWrapper,用于构建复杂的查询条件。

QueryWrapper:使用字符串模板方式构建查询条件,可能会因为字段名写错而导致运行时错误。

示例:

java 复制代码
QueryWrapper<User> queryWrapper = new QueryWrapper<>();  
queryWrapper.eq("name", "John").lt("age", 30);  

List users = userMapper.selectList(queryWrapper);

LambdaQueryWrapper:使用Lambda表达式构建查询条件,类型安全,可以避免硬编码字段名。

示例:

java 复制代码
LambdaQueryWrapper<User> lambdaQuery = Wrappers.lambdaQuery();  
lambdaQuery.eq(User::getName, "John").lt(User::getAge, 30);  
List<User> users = userMapper.selectList(lambdaQuery);

2. 自定义SQL

当MyBatis-Plus的自动CRUD无法满足需求时,可以在Mapper接口中自定义SQL。

在Mapper接口中添加自定义方法,并使用@Select、@Insert、@Update、@Delete等注解指定SQL语句。

示例:

java 复制代码
@Mapper  
public interface UserMapper extends BaseMapper<User> {  
    @Select("SELECT * FROM user WHERE age > #{age}")  
    List<User> selectUsersOlderThanAge(@Param("age") int age);  
}

3. 性能优化

MyBatis-Plus提供了性能分析插件,可以帮助监控和优化SQL执行性能。

在配置类中配置性能分析插件。

示例:

java 复制代码
@Bean  
@Profile({"dev", "test"}) // 只在开发和测试环境开启  
public PerformanceInterceptor performanceInterceptor() {  
    PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();  
    performanceInterceptor.setMaxTime(1000); // 设置SQL执行的最大时间  
    performanceInterceptor.setFormat(true); // 是否格式化SQL  
    return performanceInterceptor;  
}

4. 逻辑删除

逻辑删除是指在数据库中用一个字段标识数据是否被删除,而不是真的将数据行删除。

在实体类中使用@TableLogic注解标记逻辑删除属性。

示例:

java 复制代码
@TableLogic  
private Integer deleted;
在配置文件中配置逻辑删除字段的策略。
示例(application.properties):

properties
mybatis-plus.global-config.db-config.logic-delete-field=deleted  
mybatis-plus.global-config.db-config.logic-delete-value=1  
mybatis-plus.global-config.db-config.logic-not-delete-value=0

5. 分页查询

MyBatis-Plus内置了分页插件,可以很方便地实现分页查询。

使用Page对象或IPage接口进行分页查询。

示例:

java 复制代码
int pageNum = 1;  
int pageSize = 10;  
Page<User> page = new Page<>(pageNum, pageSize);  
QueryWrapper<User> queryWrapper = new QueryWrapper<>();  
queryWrapper.eq("age", 18);  
page = userMapper.selectPage(page, queryWrapper);  
List<User> users = page.getRecords();  
long total = page.getTotal();
  1. 自动填充
    MyBatis-Plus提供了自动填充功能,可以自动为实体类的字段赋值。

使用@TableField注解的fill属性指定填充策略(INSERT、UPDATE、INSERT_UPDATE)。

示例:

java 复制代码
@TableField(fill = FieldFill.INSERT)  
private LocalDateTime createTime;  
 
@TableField(fill = FieldFill.UPDATE)  
private LocalDateTime updateTime;

实现MetaObjectHandler接口来自定义填充逻辑。

示例:

java 复制代码
@Component  
public class MyMetaObjectHandler implements MetaObjectHandler {  
    @Override  
    public void insertFill(MetaObject metaObject)
相关推荐
知识分享小能手1 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
茯苓gao4 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾4 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
DKPT4 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa4 小时前
HTML和CSS学习
前端·css·学习·html
看海天一色听风起雨落5 小时前
Python学习之装饰器
开发语言·python·学习
Z_z在努力6 小时前
【杂类】Spring 自动装配原理
java·spring·mybatis
speop7 小时前
llm的一点学习笔记
笔记·学习
非凡ghost7 小时前
FxSound:提升音频体验,让音乐更动听
前端·学习·音视频·生活·软件需求
ue星空7 小时前
月2期学习笔记
学习·游戏·ue5