MyBatis Plus 实战详解

一、引言

MyBatis Plus(简称MP)是MyBatis的增强工具,旨在简化开发、提高效率。它保留了MyBatis的强大功能,并在其基础上进行了扩展和优化,提供了强大的CRUD操作、配置选项、条件构造器等功能。本文将详细介绍MyBatis Plus的安装、配置、基本操作以及分页和条件查询的使用。

二、安装与配置
1. 添加依赖

首先,在Maven项目的pom.xml中添加MyBatis Plus的依赖。以下是一个典型的依赖配置示例:

<dependency>
    <groupId>com.baomidougroupId>
    <artifactId>mybatis-plus-boot-starterartifactId>
    <version>3.4.1version>
dependency>

注意,这里使用的是mybatis-plus-boot-starter,它是为Spring Boot项目准备的,集成了MyBatis Plus和Spring Boot的自动配置。

2. 配置数据源

application.ymlapplication.properties中配置数据源,例如:

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezone=UTC
    username: root
    password: root

注意,serverTimezone需要根据实际情况调整,如使用Asia/Shanghai以匹配本地时区。

三、基础操作
1. 创建实体类

根据数据库表结构创建对应的实体类,使用MyBatis Plus的注解来标识表名和字段名:

@Data
@TableName("user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
    // 省略getter和setter方法
}
2. 创建Mapper接口

Mapper接口继承自MyBatis Plus的BaseMapper,无需编写XML文件即可实现基本的CRUD操作:

@Mapper
public interface UserMapper extends BaseMapper<User> {
    // 这里不需要定义任何方法,BaseMapper已经提供了
}
3. 创建Service层

Service层继承自MyBatis Plus的IService接口,并通过继承ServiceImpl来实现:

public interface UserService extends IService<User> {
    // 可以根据需要添加自定义方法
}

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    // 实现自定义方法
}
4. 基本CRUD操作

Service层继承自IService后,可以直接使用其提供的CRUD方法,例如:

@Autowired
private UserService userService;

public void testAddUser() {
    User user = new User();
    user.setName("Tom");
    user.setAge(30);
    user.setEmail("[email protected]");
    userService.save(user); // 插入操作
}

public void testUpdateUser() {
    User user = new User();
    user.setId(1L);
    user.setName("Jerry");
    userService.updateById(user); // 更新操作
}

public void testDeleteUser() {
    userService.removeById(1L); // 删除操作
}

public void testGetUser() {
    User user = userService.getById(1L); // 查询操作
    System.out.println(user);
}
四、分页与条件查询
1. 分页查询

首先,需要在Spring Boot的配置类中添加分页插件:

@Configuration
public class MybatisPlusConfig {
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

然后,在Service层中使用分页查询:

public Page<User> pageQuery(int pageNum, int pageSize) {
    Page<User> page = new Page<>(pageNum, pageSize);
    return userMapper.selectPage(page, null); // 第二个参数为QueryWrapper,可以传递查询条件
}
2. 条件查询

MyBatis Plus 提供了 QueryWrapperLambdaQueryWrapper 来构建查询条件。QueryWrapper 使用数据库字段名(字符串形式),而 LambdaQueryWrapper 使用 Java 实体类的属性名(通过方法引用),从而避免了硬编码数据库字段名,提高了代码的健壮性和可读性。

以下是使用 LambdaQueryWrapper 进行条件查询的示例:

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

// ...

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    // ...

    public List<User> selectUsersByNameAndAge(String name, Integer age) {
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(User::getName, name) // 模糊查询name字段
                .eq(User::getAge, age); // 精确查询age字段
        return userMapper.selectList(queryWrapper);
    }

    // 分页查询示例,同时加入条件
    public Page<User> pageQueryUsers(int pageNum, int pageSize, String name) {
        Page<User> page = new Page<>(pageNum, pageSize);
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(User::getName, name); // 根据name字段进行模糊查询
        return userMapper.selectPage(page, queryWrapper);
    }
}

在上面的示例中,selectUsersByNameAndAge 方法通过 LambdaQueryWrapper 构建了一个查询条件,实现了对 name 字段的模糊查询和对 age 字段的精确查询。而 pageQueryUsers 方法则结合了分页和条件查询,实现了按 name 字段模糊查询的分页结果。

请注意,这里的 User::getNameUser::getAge 是 Java 8 的方法引用,它们分别引用了 User 类中的 getName()getAge() 方法,这样做的好处是避免了硬编码数据库字段名,提高了代码的易读性和可维护性。

你可能感兴趣的:(redis,分布式,数据库)