本文将带你快速掌握Mybatisplus入门,涵盖MybatisPlus的基本概念、环境搭建、基础操作及常用功能,帮助你更高效地进行数据库操作。
MybatisPlus简介MybatisPlus是什么
MybatisPlus 是一个 Mybatis 的增强工具,它在 Mybatis 的基础上提供了简化操作的扩展。通过 MybatisPlus,可以方便地使用 Java 代码进行数据库操作。它提供了许多便捷的功能,如分页查询、条件构造器、动态 SQL 生成等。
MybatisPlus的主要特点和优势
- 无侵入:基于 Mybatis 实现,无任何第三方依赖。
- CRUD增强:在不改变接口和方法的前提下,实现了对数据库操作的简化。
- 分页插件:基于 Mybatis 的分页插件,支持多种数据库的分页实现。
- 代码生成器:可以自动生成数据库表的实体类、Mapper 接口等。
- 性能优化:内置的性能优化,如逻辑删除、缓存等。
- 动态 SQL:支持根据条件动态生成 SQL 语句。
- 条件构造器:提供了强大的条件构造器,简化查询操作。
MybatisPlus与Mybatis的区别
MybatisPlus 是在 Mybatis 的基础上进行的封装和增强,相较于 Mybatis,MybatisPlus 的主要区别在于:
- CRUD操作简化:MybatisPlus 提供了对 CRUD 操作的简化,可以通过注解或方法实现快速的数据库操作。
- 分页插件:MybatisPlus 内置了分页插件,可以方便地实现分页查询。
- 代码生成器:MybatisPlus 提供了代码生成工具,可以自动生成实体类、Mapper 接口等。
- 动态 SQL:MybatisPlus 支持动态生成 SQL 语句,简化了复杂的查询操作。
准备开发环境
在开始使用 MybatisPlus 之前,需要准备一个 Java 开发环境。具体步骤如下:
- 下载并安装 JDK。
- 下载并安装 IDE(例如 IntelliJ IDEA 或 Eclipse)。
- 创建一个新的 Maven 项目。
- 配置 Maven 仓库。
引入MybatisPlus依赖
在项目中添加 MybatisPlus 的依赖。在 pom.xml
文件中添加以下依赖:
<dependencies>
<!-- MybatisPlus 的依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<!-- MySQL 驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
<!-- Spring Boot 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>2.5.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.5.6</version>
</dependency>
</dependencies>
配置MybatisPlus相关参数
在 application.yml
文件中配置数据库连接信息和 MybatisPlus 相关设置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatisplus?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
type-aliases-package: com.baomidou.mybatisplus.samples.quickstart.entity
MybatisPlus基础操作
新增数据
使用 MybatisPlus,可以通过 save
方法将实体对象插入到数据库中。
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.core.conditions.wrapped.Wraps;
import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.BaseServiceImpl;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Service;
public class UserService extends ServiceImpl<UserMapper, User> {
public boolean addUser(User user) {
return this.save(user);
}
}
查询数据
MybatisPlus 提供了 selectById
、selectList
和 selectMaps
等方法进行查询。
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.core.conditions.wrapped.Wraps;
import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.BaseServiceImpl;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Service;
public class UserService extends ServiceImpl<UserMapper, User> {
public User getUserById(Long id) {
return this.getById(id);
}
public List<User> getUsersByName(String name) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", name);
return this.list(queryWrapper);
}
}
更新数据
使用 update
方法可以更新数据库中的数据。
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.core.conditions.wrapped.Wraps;
import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.BaseServiceImpl;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Service;
public class UserService extends ServiceImpl<UserMapper, User> {
public boolean updateUser(User user) {
return this.updateById(user);
}
public boolean updateUserById(Long id, String newName) {
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", id);
updateWrapper.set("name", newName);
return this.update(updateWrapper);
}
}
删除数据
使用 removeById
方法可以删除数据库中的数据。
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.core.conditions.wrapped.Wraps;
import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.BaseServiceImpl;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Service;
public class UserService extends ServiceImpl<UserMapper, User> {
public boolean deleteUserById(Long id) {
return this.removeById(id);
}
public boolean deleteUserByName(String name) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", name);
return this.remove(queryWrapper);
}
}
MybatisPlus常用功能介绍
分页插件使用
MybatisPlus 提供了内置的分页插件 Page
和 Limit
,可以通过以下方式使用分页查询。
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.core.conditions.wrapped.Wraps;
import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.BaseServiceImpl;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
public class UserService extends ServiceImpl<UserMapper, User> {
public Page<User> getUsersPage(Integer pageNum, Integer pageSize) {
Page<User> page = new Page<>(pageNum, pageSize);
return this.page(page, new QueryWrapper<>());
}
}
条件构造器使用
MybatisPlus 提供了强大的条件构造器 QueryWrapper
和 UpdateWrapper
,可以方便地构建复杂的查询条件。
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.core.conditions.wrapped.Wraps;
import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.BaseServiceImpl;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Service;
public class UserService extends ServiceImpl<UserMapper, User> {
public List<User> getUsersByCondition(String name, Integer age) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", name).gt("age", age);
return this.list(queryWrapper);
}
}
自动填充和逻辑删除
MybatisPlus 提供了自动填充和逻辑删除的功能,可以方便地实现字段的自动填充和逻辑删除。
自动填充
通过实现 MetaObjectHandler
接口,可以实现对实体类字段的自动填充。
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.core.toolkit.MetaObjectUtils;
import java.util.Date;
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
MetaObjectUtils.setFieldValByName("createTime", new Date(), metaObject);
MetaObjectUtils.setFieldValByName("updateTime", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
MetaObjectUtils.setFieldValByName("updateTime", new Date(), metaObject);
}
}
逻辑删除
通过 @TableLogic
注解和配置,可以实现逻辑删除。
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
@TableLogic
private Integer deleted;
}
批量操作
MybatisPlus 支持批量操作,可以通过批量插入、批量更新和批量删除来提高操作效率。
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.core.conditions.wrapped.Wraps;
import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.BaseServiceImpl;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Service;
import java.util.List;
public class UserService extends ServiceImpl<UserMapper, User> {
public boolean saveBatch(List<User> users) {
return this.saveBatch(users);
}
public boolean updateBatch(List<User> users) {
return this.updateBatchById(users);
}
public boolean removeBatch(List<User> users) {
return this.removeByIds(users.stream().map(User::getId).collect(Collectors.toList()));
}
}
MybatisPlus高级特性
动态SQL生成
MybatisPlus 支持动态生成 SQL 语句,通过 SqlInjector
接口可以实现自定义 SQL 生成规则。
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.core.listener.SqlSessionListener;
import com.baomidou.mybatisplus.core.toolkit.ReflectionKit;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.TableUtils;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
import java.util.List;
public class MySqlInjector extends DefaultSqlInjector {
@Override
public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
List<AbstractMethod> methodList = super.getMethodList(mapperClass);
// 自定义 SQL 生成逻辑
return methodList;
}
}
自动填充与逻辑删除的详细使用
通过 MetaObjectHandler
和 @TableLogic
注解可以实现自动填充和逻辑删除。
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.core.toolkit.MetaObjectUtils;
import java.util.Date;
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
MetaObjectUtils.setFieldValByName("createTime", new Date(), metaObject);
MetaObjectUtils.setFieldValByName("updateTime", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
MetaObjectUtils.setFieldValByName("updateTime", new Date(), metaObject);
}
}
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
@TableLogic
private Integer deleted;
}
性能优化和日志打印
MybatisPlus 提供了多种性能优化和日志打印功能,如缓存、分页插件等。
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
paginationInterceptor.setLimit(100); // 限制每页最多显示 100 条数据
return paginationInterceptor;
}
}
通过以上配置,可以实现数据库操作的性能优化和日志打印。
总结通过本教程,我们学习了 MybatisPlus 的基本概念、环境搭建、基础操作、常用功能和高级特性。MybatisPlus 是一个强大的工具,可以帮助我们更高效地进行数据库操作。希望读者在实际项目中能够灵活运用 MybatisPlus 的各项功能,提高开发效率。