首页 > 其他分享 >MyBatis-Plus高级用法:最优化持久层开发

MyBatis-Plus高级用法:最优化持久层开发

时间:2025-01-17 19:10:08浏览次数:1  
标签:userMapper private public Plus MyBatis new 最优化

MyBatis-Plus 是 MyBatis 的增强工具,旨在简化开发、提高效率并保持 MyBatis 的灵活性。本文将详细介绍 MyBatis-Plus 的高级用法,帮助开发者最优化持久层开发。

一、MyBatis-Plus 简介

MyBatis-Plus 是一个 ORM 框架,提供了 CRUD 接口、条件构造器、代码生成器等功能,简化了常见的持久层开发工作。

核心功能

  • CRUD 接口:简单的增删改查操作。
  • 条件构造器:动态生成 SQL 查询条件。
  • 分页插件:简化分页查询操作。
  • 逻辑删除:轻松实现软删除功能。
  • 代码生成器:自动生成实体类、Mapper 接口等代码。

二、快速入门

1. 添加依赖

在 pom.xml 中添加 MyBatis-Plus 依赖:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3.4</version>
</dependency>
​
   

2. 配置数据源

在 application.yml 中配置数据源:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
​
   

3. 创建实体类

创建一个实体类 User

@Data
@TableName("user")
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}
​
   

4. 创建 Mapper 接口

创建 Mapper 接口并继承 BaseMapper

public interface UserMapper extends BaseMapper<User> {
}
​
   

5. 编写服务类

编写服务类使用 UserMapper

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public List<User> getAllUsers() {
        return userMapper.selectList(null);
    }
}
​
   

6. 编写控制器

编写控制器调用服务类:

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/list")
    public List<User> list() {
        return userService.getAllUsers();
    }
}
​
   

三、高级用法

1. 条件构造器

MyBatis-Plus 提供了 QueryWrapper 和 UpdateWrapper 用于动态构造查询和更新条件。

1.1 QueryWrapper

QueryWrapper 用于构建查询条件:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "John");
List<User> users = userMapper.selectList(queryWrapper);
​
   

1.2 UpdateWrapper

UpdateWrapper 用于构建更新条件:

UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("name", "John").set("age", 30);
userMapper.update(null, updateWrapper);
​
   

2. 分页插件

分页插件简化了分页查询:

@Autowired
private UserMapper userMapper;

public IPage<User> getUsersByPage(int pageNum, int pageSize) {
    Page<User> page = new Page<>(pageNum, pageSize);
    return userMapper.selectPage(page, null);
}
​
   

3. 逻辑删除

逻辑删除不删除数据,只是标记为已删除。首先在实体类中配置逻辑删除字段:

@TableLogic
private Integer deleted;
​
   

在 application.yml 中启用逻辑删除:

mybatis-plus:
  global-config:
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0
​
   

使用时直接调用 deleteById 方法即可:

userMapper.deleteById(1L);
​
   

4. 代码生成器

代码生成器自动生成实体类、Mapper 接口、Service 类和 Controller 类。以下是代码生成器的简单示例:

@Data
public class CodeGenerator {
    public static void main(String[] args) {
        AutoGenerator autoGenerator = new AutoGenerator();

        // 数据源配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mydb");
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("root");
        autoGenerator.setDataSource(dataSourceConfig);

        // 包名配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.example.demo");
        autoGenerator.setPackageInfo(packageConfig);

        // 策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setInclude("user"); // 表名
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
        strategyConfig.setEntityLombokModel(true);
        autoGenerator.setStrategy(strategyConfig);

        autoGenerator.execute();
    }
}
​
   

5. 自定义 SQL 注入器

可以自定义 SQL 注入器,实现个性化需求。例如,添加一个批量插入的方法:

@Component
public class MySqlInjector extends AbstractSqlInjector {
    @Override
    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
        List<AbstractMethod> methodList = super.getMethodList(mapperClass);
        methodList.add(new InsertBatchSomeColumn());
        return methodList;
    }
}
​
   

四、最佳实践

1. 分层架构

建议遵循分层架构,将控制器、服务、数据访问层分开,提高代码的可维护性。

2. 统一异常处理

使用 @ControllerAdvice 统一处理异常,提升系统的健壮性。

3. 使用事务管理

在服务层使用 @Transactional 注解管理事务,确保数据一致性:

@Transactional
public void updateUser(User user) {
    userMapper.updateById(user);
}
​
   

4. 性能优化

  • 使用批量操作:对于大批量数据操作,使用 MyBatis-Plus 提供的批量操作接口,提高性能。
  • 索引优化:确保数据库中相关表和字段有适当的索引,提升查询性能。

五、总结

MyBatis-Plus 通过简化常见的持久层开发任务,提高了开发效率和代码的可维护性。通过合理使用条件构造器、分页插件、逻辑删除和代码生成器等高级功能,可以进一步优化持久层开发,提升系统性能和稳定性。掌握这些高级用法和最佳实践,有助于开发者构建高效、稳定和可扩展的企业级应用。

标签:userMapper,private,public,Plus,MyBatis,new,最优化
From: https://www.cnblogs.com/lawutuobang/p/18677546

相关文章

  • 高级java每日一道面试题-2025年01月16日-框架篇[Mybatis篇]-说说Mybatis的缓存机制?
    如果有遗漏,评论区告诉我进行补充面试官:说说Mybatis的缓存机制?我回答:在Java高级面试中,MyBatis的缓存机制是一个重要的话题。MyBatis是一个流行的Java持久化框架,它提供了强大的数据库访问能力和灵活的SQL映射配置。为了提高查询性能并减少数据库访问次数,MyBatis引入了......
  • Vue3初学之Element-plus Form表单
    1.使用el-form组件el-form是一个表单容器,可以包含多个el-form-item,每个el-form-item包裹具体的表单控件,如输入框、选择器、日期选择器等。<template><el-form:model="form"label-width="120px"><el-form-itemlabel="用户名"><el-inputv-mod......
  • MyBatis-增删改查操作&一些细节
    目录删除新增 修改查询 小结:删除功能需求:根据ID删除用户信息SQL:deletefromuserwhereid=5;Mapper接口方法(注意这里不是实现类):/***根据id删除*/@Delete("deletefromuserwhereid=#{id}")publicvoiddeleteById(Integerid);编写单元测试......
  • Day08-后端Web实战——JDBC&Mybatis
    目录前言1.JDBC1.1概述1.2快速入门1.3API详解1.3.1DriverManager1.3.1.1注册驱动1.3.1.2获取链接1.3.2Connection&Statement1.3.3ResultSet1.3.4PreparedStatement1.3.4.1SQL注入演示1.3.4.2SQL注入解决2.Mybatis基础2.1介绍2.2快速入门2.2.1准备......
  • MyBatis缓存原理及插件实现
    目录MyBatis缓存原理缓存的工作机制一级缓存:二级缓存:MyBatis插件实现MyBatis缓存原理缓存的工作机制如果会话查询了一条数据,此数据会存入一级缓存;若会话被关闭或提交,则,其数据转存入二级缓存;新会话若再次查询之前查询过的数据,就从二级缓存中获取;不同的Mapper,查询出......
  • MyBatis核心流程
    目录数据处理的发展MyBatis概述​编辑 MyBatis核心流程观察测试类重要对象和流程SqlSessionFactory[初始化]创建SqlSession会话对象 创建XxxMapper[代理]对象执行SQL操作[复杂一丢丢] ​编辑数据处理的发展1.原生JDBC2.DBUtils工具类[jdbctemp..]......
  • MyBatis基于XML的详细使用-缓存
    MyBatis基于XML的详细使用-缓存1、介绍MyBatis内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。为了使它更加强大而且易于配置,我们对MyBatis3中的缓存实现进行了许多改进。默认情况下,只启用了本地的会话缓存,它仅仅对一个会话中的数据进行缓存。要启用......
  • Sigrity System SI SerialLink模式进行USB3.1协议仿真分析操作指导-SuperSpeedPlus_Rx
    SigritySystemSISerialLink模式进行USB3.1协议仿真分析操作指导-SuperSpeedPlus_Rx_HostSigritySystemSISerialLink模式提供了10个协议合规性检查工具模板,用户可以将根据实际应用替换模板中的SPICE文件,然后进行协议仿真分析,同时软件还提供了目标结果的模板MASK以及该协......
  • 【吐血整理】Java 的 MyBatis 从入门到精通。
    目录❤️二、开发环境搭建指南......
  • 一文搞懂Java的Mybatis删除操作,附详细代码
    目录❤️二、Mybatis基础快速回顾......