一、核心配置优化指南
1.1 基础配置参数详解
MyBatis-Plus的全局配置通过application.yml文件实现,关键参数配置如下:
mybatis-plus:configuration:map-underscore-to-camel-case: true # 开启驼峰命名自动映射auto-mapping-behavior: full # 启用完整自动映射cache-enabled: true # 开启二级缓存global-config:db-config:id-type: auto # 主键策略设置为数据库自增table-underline: true # 启用表名下划线转换
1.2 主键映射策略
针对数据库字段与实体类属性名不一致的场景,可通过@TableId注解实现精确映射:
@Data@TableName("sys_user") // 指定数据库表名public class User {@TableId(value = "id", type = IdType.AUTO) // 主键映射配置private Long userId; // 实体类属性名private String userName;// 其他字段...}
主键生成策略包含以下类型:
AUTO:数据库自增(需数据库支持)ASSIGN_ID:雪花算法生成分布式IDINPUT:手动赋值ASSIGN_UUID:生成UUID字符串
二、条件构造器深度解析
2.1 QueryWrapper基础用法
条件构造器支持链式调用,示例实现年龄等于20的查询:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("age", 20).between("create_time", "2023-01-01", "2023-12-31").orderByDesc("update_time");List<User> users = userMapper.selectList(queryWrapper);
2.2 Lambda表达式增强
通过LambdaQueryWrapper实现类型安全的条件构造:
LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();lambdaWrapper.eq(User::getAge, 20).like(User::getUserName, "张").isNotNull(User::getEmail);List<User> result = userMapper.selectList(lambdaWrapper);
2.3 复杂条件组合
支持嵌套条件与逻辑运算符组合:
QueryWrapper<User> complexWrapper = new QueryWrapper<>();complexWrapper.nested(i -> i.eq("status", 1).or().eq("type", 2)).and(j -> j.ge("score", 80).lt("score", 90));
三、代码生成器实战
3.1 依赖配置
在pom.xml中添加必要依赖:
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>最新版本</version></dependency><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3</version></dependency>
3.2 生成器配置示例
public class CodeGenerator {public static void main(String[] args) {AutoGenerator generator = new AutoGenerator();// 全局配置GlobalConfig globalConfig = new GlobalConfig();globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java");globalConfig.setAuthor("开发者名称");globalConfig.setOpen(false);generator.setGlobalConfig(globalConfig);// 数据源配置DataSourceConfig dataSourceConfig = new DataSourceConfig();dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/test_db");dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");dataSourceConfig.setUsername("root");dataSourceConfig.setPassword("password");generator.setDataSource(dataSourceConfig);// 包配置PackageConfig packageConfig = new PackageConfig();packageConfig.setParent("com.example.demo");generator.setPackageInfo(packageConfig);// 策略配置StrategyConfig strategy = new StrategyConfig();strategy.setInclude("sys_user", "sys_role"); // 指定生成的表strategy.setRestControllerStyle(true);strategy.setEntityLombokModel(true);generator.setStrategy(strategy);generator.execute();}}
四、多表关联查询进阶
4.1 VO对象设计
针对特定查询场景创建值对象:
@Datapublic class UserRoleVO {private Long userId;private String userName;private String roleName;// 其他关联字段...}
4.2 XML映射实现
在Mapper接口中定义自定义方法:
public interface UserMapper extends BaseMapper<User> {List<UserRoleVO> selectUserWithRoles(@Param("roleId") Long roleId);}
对应XML映射文件:
<select id="selectUserWithRoles" resultType="com.example.demo.vo.UserRoleVO">SELECTu.id as userId,u.user_name as userName,r.role_name as roleNameFROM sys_user uLEFT JOIN sys_user_role ur ON u.id = ur.user_idLEFT JOIN sys_role r ON ur.role_id = r.idWHERE r.id = #{roleId}</select>
4.3 注解方式实现
使用@Select注解实现简单关联查询:
@Select("SELECT u.id, u.user_name FROM sys_user u WHERE u.dept_id = #{deptId}")List<Map<String, Object>> selectUsersByDept(@Param("deptId") Long deptId);
五、最佳实践建议
- 配置分层管理:将全局配置、数据源配置等分离到不同配置文件
- 条件构造器复用:将常用查询条件封装为工具类方法
- 分页查询优化:结合PageHelper或MyBatis-Plus内置分页实现
- SQL性能监控:集成日志服务记录慢查询
- 事务管理:合理使用
@Transactional注解保证数据一致性
通过系统掌握上述技术要点,开发者可显著提升数据库操作效率,构建出更健壮、易维护的企业级应用。建议在实际项目中结合具体业务场景进行灵活应用,并持续关注框架版本更新带来的新特性。