MyBatis-Plus进阶指南:从配置到实战的完整开发手册

一、核心配置优化指南

1.1 基础配置参数详解

MyBatis-Plus的全局配置通过application.yml文件实现,关键参数配置如下:

  1. mybatis-plus:
  2. configuration:
  3. map-underscore-to-camel-case: true # 开启驼峰命名自动映射
  4. auto-mapping-behavior: full # 启用完整自动映射
  5. cache-enabled: true # 开启二级缓存
  6. global-config:
  7. db-config:
  8. id-type: auto # 主键策略设置为数据库自增
  9. table-underline: true # 启用表名下划线转换

1.2 主键映射策略

针对数据库字段与实体类属性名不一致的场景,可通过@TableId注解实现精确映射:

  1. @Data
  2. @TableName("sys_user") // 指定数据库表名
  3. public class User {
  4. @TableId(value = "id", type = IdType.AUTO) // 主键映射配置
  5. private Long userId; // 实体类属性名
  6. private String userName;
  7. // 其他字段...
  8. }

主键生成策略包含以下类型:

  • AUTO:数据库自增(需数据库支持)
  • ASSIGN_ID:雪花算法生成分布式ID
  • INPUT:手动赋值
  • ASSIGN_UUID:生成UUID字符串

二、条件构造器深度解析

2.1 QueryWrapper基础用法

条件构造器支持链式调用,示例实现年龄等于20的查询:

  1. QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  2. queryWrapper.eq("age", 20)
  3. .between("create_time", "2023-01-01", "2023-12-31")
  4. .orderByDesc("update_time");
  5. List<User> users = userMapper.selectList(queryWrapper);

2.2 Lambda表达式增强

通过LambdaQueryWrapper实现类型安全的条件构造:

  1. LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();
  2. lambdaWrapper.eq(User::getAge, 20)
  3. .like(User::getUserName, "张")
  4. .isNotNull(User::getEmail);
  5. List<User> result = userMapper.selectList(lambdaWrapper);

2.3 复杂条件组合

支持嵌套条件与逻辑运算符组合:

  1. QueryWrapper<User> complexWrapper = new QueryWrapper<>();
  2. complexWrapper.nested(i -> i.eq("status", 1).or().eq("type", 2))
  3. .and(j -> j.ge("score", 80).lt("score", 90));

三、代码生成器实战

3.1 依赖配置

pom.xml中添加必要依赖:

  1. <dependency>
  2. <groupId>com.baomidou</groupId>
  3. <artifactId>mybatis-plus-generator</artifactId>
  4. <version>最新版本</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.velocity</groupId>
  8. <artifactId>velocity-engine-core</artifactId>
  9. <version>2.3</version>
  10. </dependency>

3.2 生成器配置示例

  1. public class CodeGenerator {
  2. public static void main(String[] args) {
  3. AutoGenerator generator = new AutoGenerator();
  4. // 全局配置
  5. GlobalConfig globalConfig = new GlobalConfig();
  6. globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
  7. globalConfig.setAuthor("开发者名称");
  8. globalConfig.setOpen(false);
  9. generator.setGlobalConfig(globalConfig);
  10. // 数据源配置
  11. DataSourceConfig dataSourceConfig = new DataSourceConfig();
  12. dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/test_db");
  13. dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
  14. dataSourceConfig.setUsername("root");
  15. dataSourceConfig.setPassword("password");
  16. generator.setDataSource(dataSourceConfig);
  17. // 包配置
  18. PackageConfig packageConfig = new PackageConfig();
  19. packageConfig.setParent("com.example.demo");
  20. generator.setPackageInfo(packageConfig);
  21. // 策略配置
  22. StrategyConfig strategy = new StrategyConfig();
  23. strategy.setInclude("sys_user", "sys_role"); // 指定生成的表
  24. strategy.setRestControllerStyle(true);
  25. strategy.setEntityLombokModel(true);
  26. generator.setStrategy(strategy);
  27. generator.execute();
  28. }
  29. }

四、多表关联查询进阶

4.1 VO对象设计

针对特定查询场景创建值对象:

  1. @Data
  2. public class UserRoleVO {
  3. private Long userId;
  4. private String userName;
  5. private String roleName;
  6. // 其他关联字段...
  7. }

4.2 XML映射实现

在Mapper接口中定义自定义方法:

  1. public interface UserMapper extends BaseMapper<User> {
  2. List<UserRoleVO> selectUserWithRoles(@Param("roleId") Long roleId);
  3. }

对应XML映射文件:

  1. <select id="selectUserWithRoles" resultType="com.example.demo.vo.UserRoleVO">
  2. SELECT
  3. u.id as userId,
  4. u.user_name as userName,
  5. r.role_name as roleName
  6. FROM sys_user u
  7. LEFT JOIN sys_user_role ur ON u.id = ur.user_id
  8. LEFT JOIN sys_role r ON ur.role_id = r.id
  9. WHERE r.id = #{roleId}
  10. </select>

4.3 注解方式实现

使用@Select注解实现简单关联查询:

  1. @Select("SELECT u.id, u.user_name FROM sys_user u WHERE u.dept_id = #{deptId}")
  2. List<Map<String, Object>> selectUsersByDept(@Param("deptId") Long deptId);

五、最佳实践建议

  1. 配置分层管理:将全局配置、数据源配置等分离到不同配置文件
  2. 条件构造器复用:将常用查询条件封装为工具类方法
  3. 分页查询优化:结合PageHelper或MyBatis-Plus内置分页实现
  4. SQL性能监控:集成日志服务记录慢查询
  5. 事务管理:合理使用@Transactional注解保证数据一致性

通过系统掌握上述技术要点,开发者可显著提升数据库操作效率,构建出更健壮、易维护的企业级应用。建议在实际项目中结合具体业务场景进行灵活应用,并持续关注框架版本更新带来的新特性。