Loading... # MyBatis-Plus高级用法:最优化持久层开发 MyBatis-Plus 是 MyBatis 的增强工具,旨在简化开发、提高效率并保持 MyBatis 的灵活性。本文将详细介绍 MyBatis-Plus 的高级用法,帮助开发者最优化持久层开发。 ## 一、MyBatis-Plus 简介 MyBatis-Plus 是一个 ORM 框架,提供了 CRUD 接口、条件构造器、代码生成器等功能,简化了常见的持久层开发工作。 ![](https://www.8kiz.cn/usr/uploads/2024/07/3210767804.png) ### **核心功能** - **CRUD 接口**:简单的增删改查操作。 - **条件构造器**:动态生成 SQL 查询条件。 - **分页插件**:简化分页查询操作。 - **逻辑删除**:轻松实现软删除功能。 - **代码生成器**:自动生成实体类、Mapper 接口等代码。 ## 二、快速入门 ### **1. 添加依赖** 在 `pom.xml` 中添加 MyBatis-Plus 依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3.4</version> </dependency> ``` ### **2. 配置数据源** 在 `application.yml` 中配置数据源: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/mydb username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver ``` ### **3. 创建实体类** 创建一个实体类 `User`: ```java @Data @TableName("user") public class User { private Long id; private String name; private Integer age; private String email; } ``` ### **4. 创建 Mapper 接口** 创建 Mapper 接口并继承 `BaseMapper`: ```java public interface UserMapper extends BaseMapper<User> { } ``` ### **5. 编写服务类** 编写服务类使用 `UserMapper`: ```java @Service public class UserService { @Autowired private UserMapper userMapper; public List<User> getAllUsers() { return userMapper.selectList(null); } } ``` ### **6. 编写控制器** 编写控制器调用服务类: ```java @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` 用于构建查询条件: ```java QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("name", "John"); List<User> users = userMapper.selectList(queryWrapper); ``` #### **1.2 UpdateWrapper** `UpdateWrapper` 用于构建更新条件: ```java UpdateWrapper<User> updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("name", "John").set("age", 30); userMapper.update(null, updateWrapper); ``` ### **2. 分页插件** 分页插件简化了分页查询: ```java @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. 逻辑删除** 逻辑删除不删除数据,只是标记为已删除。首先在实体类中配置逻辑删除字段: ```java @TableLogic private Integer deleted; ``` 在 `application.yml` 中启用逻辑删除: ```yaml mybatis-plus: global-config: db-config: logic-delete-value: 1 logic-not-delete-value: 0 ``` 使用时直接调用 `deleteById` 方法即可: ```java userMapper.deleteById(1L); ``` ### **4. 代码生成器** 代码生成器自动生成实体类、Mapper 接口、Service 类和 Controller 类。以下是代码生成器的简单示例: ```java @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 注入器,实现个性化需求。例如,添加一个批量插入的方法: ```java @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` 注解管理事务,确保数据一致性: ```java @Transactional public void updateUser(User user) { userMapper.updateById(user); } ``` ### **4. 性能优化** - **使用批量操作**:对于大批量数据操作,使用 MyBatis-Plus 提供的批量操作接口,提高性能。 - **索引优化**:确保数据库中相关表和字段有适当的索引,提升查询性能。 ## 五、总结 MyBatis-Plus 通过简化常见的持久层开发任务,提高了开发效率和代码的可维护性。通过合理使用条件构造器、分页插件、逻辑删除和代码生成器等高级功能,可以进一步优化持久层开发,提升系统性能和稳定性。掌握这些高级用法和最佳实践,有助于开发者构建高效、稳定和可扩展的企业级应用。 最后修改:2024 年 07 月 12 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏