7.4 MyBatis-Plus扩展功能
面试重要程度:⭐⭐⭐⭐
常见提问方式:代码生成器使用、条件构造器、分页插件配置
预计阅读时间:25分钟
开场白
兄弟,MyBatis-Plus绝对是提升开发效率的神器!在面试中,如果你能展现出对MP的深度理解,绝对是加分项。特别是它的条件构造器和代码生成器,能让面试官看出你对现代化开发工具的掌握。
今天我们就把MyBatis-Plus的核心功能全部搞定,让你在面试中展现出对开发效率工具的深度理解。
🛠️ 代码生成器
快速生成基础代码
面试加分项:
面试官:"你们项目中如何提升开发效率?用过哪些代码生成工具?"
代码生成器配置:
// MyBatis-Plus 3.5.x 版本代码生成器 public class CodeGenerator { public static void main(String[] args) { // 1. 数据源配置 FastAutoGenerator.create("jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8", "root", "password") // 2. 全局配置 .globalConfig(builder -> { builder.author("developer") // 作者 .enableSwagger() // 开启swagger模式 .outputDir(System.getProperty("user.dir") + "/src/main/java") // 输出目录 .commentDate("yyyy-MM-dd") // 注释日期格式 .disableOpenDir(); // 禁止打开输出目录 }) // 3. 包配置 .packageConfig(builder -> { builder.parent("com.example") // 父包名 .entity("entity") // 实体类包名 .mapper("mapper") // Mapper包名 .service("service") // Service包名 .serviceImpl("service.impl") // ServiceImpl包名 .controller("controller") // Controller包名 .xml("mapper.xml"); // XML文件包名 }) // 4. 策略配置 .strategyConfig(builder -> { builder.addInclude("user", "order", "product") // 需要生成的表名 .addTablePrefix("t_", "tb_") // 过滤表前缀 // Entity策略配置 .entityBuilder() .enableLombok() // 启用Lombok .enableTableFieldAnnotation() // 启用字段注解 .naming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略 .columnNaming(NamingStrategy.underline_to_camel) // 字段映射命名策略 .addSuperEntityColumns("id", "create_time", "update_time") // 父类公共字段 .enableActiveRecord() // 启用ActiveRecord模式 .versionColumnName("version") // 乐观锁字段名 .logicDeleteColumnName("deleted") // 逻辑删除字段名 .enableChainModel() // 启用链式模型 // Mapper策略配置 .mapperBuilder() .enableMapperAnnotation() // 启用@Mapper注解 .enableBaseResultMap() // 启用BaseResultMap .enableBaseColumnList() // 启用BaseColumnList // Service策略配置 .serviceBuilder() .formatServiceFileName("%sService") // Service接口名格式 .formatServiceImplFileName("%sServiceImpl") // ServiceImpl名格式 // Controller策略配置 .controllerBuilder() .enableRestStyle() // 启用RestController .enableHyphenStyle(); // 启用驼峰转连字符 }) // 5. 模板引擎配置 .templateEngine(new FreemarkerTemplateEngine()) // 6. 执行生成 .execute(); } }
生成的代码示例:
// 生成的Entity @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("user") @ApiModel(value="User对象", description="用户表") public class User implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "主键ID") @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty(value = "用户名") @TableField("username") private String username; @ApiModelProperty(value = "邮箱") @TableField("email") private String email; @ApiModelProperty(value = "状态") @TableField("status") private Integer status; @ApiModelProperty(value = "创建时间") @TableField(value = "create_time", fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty(value = "更新时间") @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty(value = "逻辑删除") @TableField("deleted") @TableLogic private Integer deleted; @ApiModelProperty(value = "版本号") @TableField("version") @Version private Integer version; } // 生成的Mapper @Mapper public interface UserMapper extends BaseMapper<User> { // 自定义查询方法 List<User> selectUserWithOrders(@Param("userId") Long userId); // 分页查询 IPage<User> selectUserPage(Page<User> page, @Param("query") UserQuery query); } // 生成的Service public interface UserService extends IService<User> { // 自定义业务方法 boolean registerUser(UserRegisterDTO registerDTO); PageResult<UserVO> pageUsers(UserQuery query); }
🔍 条件构造器
强大的查询构建能力
面试重点:
面试官:"MyBatis-Plus的条件构造器有什么优势?如何避免SQL注入?"
QueryWrapper使用:
@Service public class UserQueryService { @Autowired private UserMapper userMapper; //
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
Java面试圣经 文章被收录于专栏
Java面试圣经,带你练透java圣经