MyBatis-Plus的几种常见用法
创始人
2025-01-07 06:05:06
0

MyBatis-Plus 提供了丰富的高级用法,可以简化开发,提高效率。以下是一些常见的可能会被忽略的用法示例。

1. 乐观锁

乐观锁用于避免在并发环境下数据更新冲突。MyBatis-Plus 通过注解和版本字段实现乐观锁。

示例

  1. 在实体类中添加版本字段,并使用 @Version 注解标记:
import com.baomidou.mybatisplus.annotation.Version;  public class User {     private Long id;     private String name;          @Version     private Integer version;      // Getters and setters } 
  1. 配置乐观锁插件:
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;  @Configuration public class MyBatisPlusConfig {      @Bean     public OptimisticLockerInterceptor optimisticLockerInterceptor() {         return new OptimisticLockerInterceptor();     } } 
  1. 使用乐观锁更新:
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;  @Service public class UserService {      @Autowired     private UserMapper userMapper;      public void updateUser(User user) {         // 更新操作基于版本字段         UpdateWrapper updateWrapper = Wrappers.update()             .eq("id", user.getId())             .eq("version", user.getVersion());                  user.setVersion(user.getVersion() + 1);         userMapper.update(user, updateWrapper);     } } 

2. 异常数据检测和自动填充

MyBatis-Plus 提供了一套通用字段自动填充功能,可以在插入和更新操作时自动填充某些字段。

示例

  1. 创建自动填充处理类:
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component;  @Component public class MyMetaObjectHandler implements MetaObjectHandler {      @Override     public void insertFill(MetaObject metaObject) {         this.setFieldValByName("createTime", LocalDateTime.now(), metaObject);         this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);     }      @Override     public void updateFill(MetaObject metaObject) {         this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);     } } 
  1. 在实体类中使用注解配置自动填充字段:
import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import java.time.LocalDateTime;  public class User {     private Long id;     private String name;      @TableField(fill = FieldFill.INSERT)     private LocalDateTime createTime;          @TableField(fill = FieldFill.INSERT_UPDATE)     private LocalDateTime updateTime;      // Getters and setters } 

3. 逻辑删除

逻辑删除让记录在数据库中实际存在,但对外表现为已删除状态。

示例

  1. 在实体类中添加逻辑删除字段:
import com.baomidou.mybatisplus.annotation.TableLogic;  public class User {     private Long id;     private String name;      @TableLogic     private Integer deleted;      // Getters and setters } 
  1. 配置逻辑删除插件:
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.LogicDeleteInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;  @Configuration public class MyBatisPlusConfig {      @Bean     public MybatisPlusInterceptor mybatisPlusInterceptor() {         MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();         interceptor.addInnerInterceptor(new LogicDeleteInnerInterceptor());         return interceptor;     } } 

4. 查询链式调用

MyBatis-Plus 提供了丰富的链式查询接口,简化了条件拼接。

示例

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List;  @Service public class UserService {      @Autowired     private UserMapper userMapper;      public List getUsersByName(String name) {         QueryWrapper queryWrapper = new QueryWrapper<>();         queryWrapper.like("name", name)                     .eq("deleted", 0) // 逻辑未删除                     .orderByDesc("createTime");                  return userMapper.selectList(queryWrapper);     } } 

5. 分页查询

MyBatis-Plus 提供了分页插件,可轻松实现分页查询。

示例

  1. 配置分页插件:
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;  @Configuration public class MyBatisPlusConfig {      @Bean     public MybatisPlusInterceptor mybatisPlusInterceptor() {         MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();         interceptor.addInnerInterceptor(new PaginationInnerInterceptor());         return interceptor;     } } 
  1. 使用分页查询:
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;  @Service public class UserService {      @Autowired     private UserMapper userMapper;      public IPage getUsersByPage(int page, int size) {         Page userPage = new Page<>(page, size);         return userMapper.selectPage(userPage, null);     } } 

6. 自定义 SQL

MyBatis-Plus 支持在 Mapper 中直接编写自定义 SQL 以满足更复杂的查询需求。

示例

  1. 在 Mapper 接口中定义自定义 SQL:
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select;  public interface UserMapper extends BaseMapper {      @Select("SELECT * FROM user WHERE name = #{name}")     List selectByName(@Param("name") String name);      @Select("SELECT * FROM user WHERE age > #{age}")     IPage selectUsersByAge(Page page, @Param("age") int age); } 
  1. 使用自定义 SQL 查询:
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List;  @Service public class UserService {      @Autowired     private UserMapper userMapper;      public List getUsersByName(String name) {         return userMapper.selectByName(name);     }      public IPage getUsersByAge(int age, int page, int size) {         Page userPage = new Page<>(page, size);         return userMapper.selectUsersByAge(userPage, age);     } } 

以上是 MyBatis-Plus 中几个特别用法的示例,包括乐观锁、自动填充、逻辑删除、链式查询、分页查询和自定义 SQL。通过这些高级用法,你可以大大简化开发、提升代码质量。

相关内容

热门资讯

总算了解!!约局吧作必弊脚本,... 总算了解!!约局吧作必弊脚本,微乐游戏竞技团辅助(透视)确实真的有工具(哔哩哔哩)1、点击下载安装,...
不少玩家反映!智星菠萝辅助,微... 不少玩家反映!智星菠萝辅助,微乐老友广东辅助器(透视)好像是有方法(哔哩哔哩)1)微乐老友广东辅助器...
重大消息!约局吧如何查看是否有... 重大消息!约局吧如何查看是否有挂,微信微乐辅助器使用教程(透视)竟然有有插件(哔哩哔哩)1、点击下载...
推荐攻略!拱趴大菠萝怎么开挂,... 推荐攻略!拱趴大菠萝怎么开挂,微信微乐挂有没有(透视)本来是真的有app(哔哩哔哩)微信微乐挂有没有...
玩家必看科普!xpoker透视... 玩家必看科普!xpoker透视辅助,微乐自建房辅助软件如何下载(透视)切实是真的有技巧(哔哩哔哩)1...
玩家亲测!哈糖大菠萝怎么开挂,... 玩家亲测!哈糖大菠萝怎么开挂,微乐自建房插件详细教程(透视)好像真的有器(哔哩哔哩)1、操作简单,无...
盘点几款!哈糖大菠萝有挂吗5个... 盘点几款!哈糖大菠萝有挂吗5个常用方法,微乐陕西小程序破解器(透视)都是存在有软件(哔哩哔哩)1、金...
有玩家发现!竞技联盟破解版最新... 有玩家发现!竞技联盟破解版最新版,微乐家乡官方app下载(透视)总是存在有技巧(哔哩哔哩)1、实时微...
玩家必看教程!!we poke... 玩家必看教程!!we poker免费辅助器,微乐自建房黑科技辅助工具下载(透视)总是是有软件(哔哩哔...
专业讨论!!哈糖大菠萝有挂吗5... 专业讨论!!哈糖大菠萝有挂吗5个常用方法,微乐小程序免费黑科技下载方法(透视)一直真的是有脚本(哔哩...