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圣经
