MybatisPlus是一款基于Mybatis的增强工具,旨在简化Mybatis的使用并提高开发效率。文章详细讲解了MybatisPlus的CRUD操作、分页查询、条件构造器等基础功能,并展示了其在实际项目中的应用。
MybatisPlus简介MybatisPlus 是一款基于 Mybatis 的增强工具,旨在简化 Mybatis 的使用并提高开发效率。它通过提供一些预定义的方法和注解,使得 CRUD 操作更加简单,并且增加了许多便捷的功能,如分页、动态数据源等。此外,MybatisPlus 还支持自定义 SQL 语句和 Mapper XML,使得开发人员在需要复杂查询的情况下也能轻松应对。
MybatisPlus是什么MybatisPlus 是一个 Mybatis 的增强工具,它提供了一系列的封装方法和注解,使得开发人员可以更方便地进行数据库操作。具体来说,MybatisPlus 在 Mybatis 的基础上进行了以下增强:
- 简化 CRUD 操作:通过提供一系列预定义的方法,MybatisPlus 帮助开发人员处理常见的 CRUD 操作,如插入、更新、删除等。
- 动态 SQL 生成:提供了条件构造器(Wrapper)等工具,能够动态生成 SQL 语句。
- 分页功能:内置了分页插件,可以方便地实现分页功能。
- 逻辑删除:支持逻辑删除而非物理删除,通过提供类似于软删除的功能,提高了数据的可恢复性。
- 自定义 SQL 支持:可以通过 Mapper XML 文件或者注解来自定义 SQL 语句。
- 自动填充:支持自动填充某些字段(如创建时间、更新时间等)。
- 字段填充:自定义字段填充逻辑,如填充默认值等。
使用 MybatisPlus 可以带来多个方面的优势:
- 开发效率:通过使用 MybatisPlus 提供的预定义方法和注解,可以大幅提升开发效率,减少重复代码的编写。
- 代码简洁:MybatisPlus 的设计使得代码更加简洁易读,降低了维护成本。
- 功能完善:除了基础的 CRUD 操作外,MybatisPlus 还提供了诸如分页插件、逻辑删除、自动填充等实用的功能,大大方便了开发人员的使用。
- 兼容性:MybatisPlus 兼容 Mybatis 的所有特性,可以无缝地集成到现有的 Mybatis 项目中。
- 性能优化:内置了一些性能优化的插件,如分页插件、逻辑删除等,能够提高应用的性能。
MybatisPlus 适用于任何需要使用 Mybatis 进行数据库操作的场景。它特别适合以下几种场景:
- 新项目开发:在新的项目中使用 MybatisPlus,可以大幅提升开发效率。特别适合快速开发原型或者中小型项目。
- 现有 Mybatis 项目迁移:对于已有的 Mybatis 项目,通过引入 MybatisPlus,可以轻松地增强项目的功能,同时不会影响现有的代码结构。
- 需要复杂查询的项目:对于需要执行较为复杂查询的项目,MybatisPlus 提供的条件构造器和自定义 SQL 功能,可以使得复杂的查询操作更加方便。
- 对性能有较高要求的项目:MybatisPlus 内置了一些性能优化的插件,如分页插件、逻辑删除等,可以提高应用的性能。
- 团队协作开发:在团队协作开发的场景下,MybatisPlus 的代码结构清晰,易于理解和维护,可以提高团队开发效率。
在使用 MybatisPlus 之前,需要先进行环境搭建。以下是具体的步骤:
项目环境准备- 创建一个 Spring Boot 项目:使用 Spring Initializr 创建一个新的 Spring Boot 项目。选择合适的依赖(如 Spring Web、Spring Data JPA、Mybatis)。
-
添加 MybatisPlus 依赖:在项目的
pom.xml
文件中添加 MybatisPlus 的依赖。具体代码如下:<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3</version> </dependency>
-
配置数据源:在
src/main/resources
目录下的application.yml
文件中,配置数据源信息。这里假设使用的是 MySQL 数据库。示例代码如下:spring: datasource: url: jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC username: root password: password driver-class-name: com.mysql.cj.jdbc.Driver
配置 MybatisPlus 包括设置 MybatisPlus 的配置文件和数据源等。
-
配置 MybatisPlus:在
application.yml
文件中增加 MybatisPlus 的相关配置。示例代码如下:mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl mapper-locations: classpath*:mapper/*.xml
-
设置数据源:在
application.yml
文件中配置数据源信息,如下所示:spring: datasource: url: jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC username: root password: password driver-class-name: com.mysql.cj.jdbc.Driver
- 验证配置:运行项目,确保数据库连接正常并能正确读取配置信息。
MybatisPlus 提供了一系列的基本操作,包括 CRUD 操作、分页查询、条件构造器等。本节主要介绍这些基础功能的使用方法。
CRUD操作MybatisPlus 提供了一系列方法来简化 CRUD 操作。
插入数据
插入数据可以使用 insert
或 insertOrUpdate
方法。
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.mybatisplus.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public void insertUser(User user) {
userMapper.insert(user);
}
}
更新数据
更新数据可以使用 update
或 updateById
方法。
public void updateUser(User user) {
userMapper.updateById(user);
}
查询数据
查询数据可以使用 select
或 selectById
方法。
public User getUserById(Long id) {
return userMapper.selectById(id);
}
删除数据
删除数据可以使用 deleteById
或 delete
方法。
public void deleteUser(Long id) {
userMapper.deleteById(id);
}
分页查询
MybatisPlus 提供了内置的分页插件,可以方便地实现分页功能。
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public Page<User> getUserPage(int currentPage, int pageSize) {
Page<User> page = new Page<>(currentPage, pageSize);
return userMapper.selectPage(page, new QueryWrapper<User>());
}
条件构造器的使用
MybatisPlus 提供了条件构造器 QueryWrapper
和 UpdateWrapper
,可以方便地构造复杂的查询条件。
查询示例
public List<User> getUsersByAge(int age) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", age);
return userMapper.selectList(queryWrapper);
}
更新示例
public void updateUsersByAge(int age, String newName) {
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("age", age).set("name", newName);
userMapper.update(null, updateWrapper);
}
MybatisPlus自定义SQL
MybatisPlus 支持自定义 SQL 语句,可以使用 Mapper XML 文件或注解来实现。
自定义SQL语句自定义 SQL 语句可以通过 Mapper XML 文件实现。
创建 Mapper XML 文件
在 resources
目录下创建一个 mapper
文件夹,然后在其中创建一个 UserMapper.xml
文件。示例代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatisplus.mapper.UserMapper">
<select id="selectUserById" resultType="com.example.mybatisplus.model.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
在 Mapper 接口中声明方法
在 UserMapper
接口中声明相应的方法。
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper<User> {
User selectUserById(Long id);
}
调用自定义 SQL
public User getUserByIdUsingCustomSql(Long id) {
return userMapper.selectUserById(id);
}
Mapper XML的使用
Mapper XML 文件的使用包括定义 SQL 语句和在 Mapper 接口中声明相应的方法。
定义 SQL 语句
在 UserMapper.xml
文件中定义 SQL 语句。示例代码如下:
<update id="updateUser" parameterType="com.example.mybatisplus.model.User">
UPDATE user
SET name = #{name}, age = #{age}
WHERE id = #{id}
</update>
声明方法
在 UserMapper
接口中声明相应的方法。
public interface UserMapper extends BaseMapper<User> {
int updateUser(User user);
}
调用自定义 SQL
public void updateUserUsingCustomSql(User user) {
userMapper.updateUser(user);
}
批量操作
MybatisPlus 支持批量插入、更新和删除操作。
批量插入
public void batchInsert(List<User> users) {
userMapper.insertBatchSomeColumn(users);
}
批量更新
public void batchUpdate(List<User> users) {
userMapper.updateBatchById(users);
}
批量删除
public void batchDelete(List<Long> ids) {
userMapper.deleteBatchIds(ids);
}
MybatisPlus插件介绍
MybatisPlus 提供了一些内置插件,可以方便地实现一些常用的功能,如分页、逻辑删除等。
插件简介MybatisPlus 的插件主要包括以下几种:
- 分页插件:内置的分页插件,可以方便地实现分页功能。
- 逻辑删除插件:提供逻辑删除功能,支持软删除。
- 自定义 SQL 插件:提供自定义 SQL 的功能,可以使用 Mapper XML 文件或注解进行自定义。
安装和使用这些插件通常只需要引入相应的配置即可。
分页插件
分页插件默认已集成,在 application.yml
中配置即可使用。
逻辑删除插件
逻辑删除插件可以通过在实体类中使用 @TableField
注解来启用逻辑删除功能。
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
public class User {
@TableField(fill = FieldFill.INSERT)
@TableLogic
private boolean deleted;
}
自定义 SQL 插件
自定义 SQL 插件可以通过 Mapper XML 文件或注解来实现,具体操作参见前面章节。
常用插件示例分页插件示例
public Page<User> getUserPage(int currentPage, int pageSize) {
Page<User> page = new Page<>(currentPage, pageSize);
return userMapper.selectPage(page, new QueryWrapper<User>());
}
逻辑删除插件示例
public void deleteUserById(Long id) {
userMapper.deleteById(id);
}
自定义 SQL 插件示例
public void batchInsert(List<User> users) {
userMapper.insertBatchSomeColumn(users);
}
MybatisPlus进阶技巧
除了基本的 CRUD 操作和自定义 SQL 之外,MybatisPlus 还提供了其他一些进阶技巧,如动态数据源配置、逻辑删除、自动填充等。
动态数据源配置MybatisPlus 支持动态数据源配置,可以方便地实现多数据源切换。
配置动态数据源
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties;
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusPropertiesBuilder;
import com.baomidou.mybatisplus.core.MybatisSqlSessionFactoryBean;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBeanWrapper;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
@Configuration
@MapperScan("com.example.mybatisplus.mapper")
public class MybatisPlusConfig {
@Bean
public MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean(MybatisPlusProperties properties) throws Exception {
MybatisSqlSessionFactoryBeanWrapper wrapper = new MybatisSqlSessionFactoryBeanWrapper();
wrapper.setDataSource(dataSource());
wrapper.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));
wrapper.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
wrapper.setPlugins(MybatisPlusPropertiesBuilder.getPlugins(properties));
return wrapper.getObject();
}
@Bean
public DataSourceTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
// 配置数据源
@Bean
.“master”, masterDataSource());
dataSource.setTargetDataSources(targetDataSources);
dataSource.setDefaultTargetDataSource(masterDataSource());
return dataSource;
}
@Bean
public DataSource masterDataSource() {
// 配置主数据源
return DataSourceBuilder.create().build();
}
@Bean
public DataSource slaveDataSource() {
// 配置从数据源
return DataSourceBuilder.create().build();
}
}
使用动态数据源
public void switchDataSource(String dataSource) {
DynamicDataSourceContextHolder.setDataSource(dataSource);
// 执行数据库操作
}
逻辑删除
逻辑删除允许通过一个状态字段来标记记录为已删除,而不是物理删除记录。这样可以方便地恢复数据。
开启逻辑删除
在实体类中使用 @TableLogic
注解来启用逻辑删除功能。
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
public class User {
@TableField(fill = FieldFill.INSERT)
@TableLogic
private boolean deleted;
}
示例代码
public void deleteUserById(Long id) {
User user = new User();
user.setId(id);
user.setDeleted(true);
userMapper.updateById(user);
}
自动填充与更新时间处理
MybatisPlus 支持自动填充某些字段的功能,如创建时间、更新时间等。
自动填充配置
配置自动填充的规则,如下所示:
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
public class User {
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
@TableLogic
private boolean deleted;
}
示例代码
public void insertUser(User user) {
userMapper.insert(user);
}
public void updateUser(User user) {
userMapper.updateById(user);
}
共同学习,写下你的评论
评论加载中...
作者其他优质文章