当前位置: 首页 > news >正文

MyBatis-Plus一站式增强组件MyBatis-Plus-kit(更新2.0版本):零Controller也能生成API?

MyBatis-Plus-Kit

🚀 MyBatis-Plus-Kit 是基于MyBatis-Plus的增强组件,专注于提升开发效率,支持零侵入、即插即用的能力扩展。它聚焦于 免写 Controller、代码一键生成、通用响应封装 等核心场景,让您只需专注业务建模,繁琐的样板代码交给我们自动完成。项目地址请添加图片描述

✨ 特性

  • ✅ 动态代理生成 RESTful API,实现零Controller编码

    在实体类上添加 @AutoApi 注解,即可自动生成完整 CRUD 接口,无需手写 Controller。

  • ✅ 支持手动继承 BaseController 进行个性化定制

    如需特殊接口或权限控制,可继承 BaseController 自定义扩展。

  • ✅ 支持一键生成所有代码

    包括实体类、Mapper、Service、Controller 等,并自动添加 @AutoApi 注解,开箱即用。

  • ✅ 统一分页模型

    提供 PageQuery + PageResult 模型,统一分页请求和响应结构。

  • ✅ 自动封装响应体

    可配置开启或关闭,对所有 Controller 返回值进行统一包装。

  • ✅ 统一异常捕获机制

    提供全局异常处理,支持自定义异常配置。

  • ✅ 无侵入设计,可按需引入功能

🧩 模块结构

mybatis-plus-kit
├── kit-core       // 核心能力,动态代理,通用Service、Controller、分页、封装等
├── kit-starter    // Spring Boot Starter,自动装配、配置处理、响应/异常支持
├── kit-example    // 示例模块,演示如何使用kit-core + kit-starter
├── kit-generator    // 代码生成器,一键生成entity,service,mapper,controller

📦 快速开始

  1. 引入依赖(Maven Central)
<dependency><groupId>io.github.l4vid4</groupId><artifactId>kit-starter</artifactId><version>0.2.0</version>
</dependency>
<dependency><groupId>io.github.l4vid4</groupId><artifactId>kit-generator</artifactId><version>0.2.0</version>
</dependency>
  1. 新建Test.java,配置代码生成器参数,运行生成所有代码
public class Test {public static void main(String[] args) {// 数据库链接(必填)String url = "jdbc:mysql://192.168.56.10:3306/mp?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai"; String username = "root";String password = "root";// 生成Entity,Service,Mappernew CodeGenerator().dataSource(url, username, password).packageName("io.github.l4vid4.example") //包名(必填).module("kit-example") //模块名.tables("user") //表名,支持传多个表(必填).author("l4vid4") //用户名.build().execute();//        // 生成Controller
//        new ControllerGenerator()
//                .dataSource(url, username, password)
//                .packageName("io.github.l4vid4.example")
//                .module("kit-example")
//                .tables("user1")
//                .author("l4vid4")
//                .build()
//                .execute();}
}
  • 生成的代码示例:

    • entity
    @TableName(value ="user")
    @Data
    @AutoApi(path = "/user")
    public class User implements Serializable {/*** 用户id*/@TableId(type = IdType.AUTO)private Long id;/*** 用户名*/private String username;/*** 密码*/private String password;
    }
    
    • service
    public interface UserService extends BaseService<User> {}
    
    • serviceImpl
    @Service
    public class UserServiceImpl extends BaseServiceImpl<UserMapper, User>implements UserService {}
    
    • mapper
    @Mapper
    public interface UserMapper extends BaseMapper<User> {}
    
  1. 可以在entity上加上@DisableApis(Api.GET_BY_ID)动态控制不想暴露的API
@TableName(value ="user")
@Data
@DisableApis(Api.GET_BY_ID)
@AutoApi(path = "/user")
public class User implements Serializable {/*** 用户id*/@TableId(type = IdType.AUTO)private Long id;/*** 用户名*/private String username;/*** 密码*/private String password;
}
  1. 如果不想使用动态代理的功能暴露API,也可以将@AutoApi(path = "/user")加上mode = AutoApiMode.EXTENDS,然后手动继承BaseController也会实现所有方法
@RestController
@RequestMapping("/user")
@DisableApis({DisableApis.Api.DELETE, DisableApis.Api.UPDATE}) //自定义不想暴露的接口
public class UserController extends BaseController<User, UserService> {//重写User → UserVO转换方法@Overrideprotected Function<User, UserVO> voConvertor() {return user -> {UserVO userVO = new UserVO();BeanUtils.copyProperties(user, userVO);return userVO;};}
}

配置完上述所有后,自动拥有所有增删改查方法。

  • 可以在entity或Controller类上加上@DisableApis({DisableApis.Api.DELETE, DisableApis.Api.UPDATE}) 自定义不想暴露的接口
HTTP 方法接口路径方法名称功能描述是否可禁用(通过注解)
GET/user/getById/{id}getById根据 ID 查询单个实体GET_BY_ID
GET/user/listlist查询所有数据(不分页)LIST
GET/user/listByIdslistByIds根据 ID 集合批量查询(不分页)LIST_BY_IDS
POST/user/listByConditionlistByCondition根据实体字段进行条件查询(不分页)LIST_BY_CONDITION
POST/user/pagepage分页查询实体(返回实体 T)PAGE
POST/user/pageVopageVo分页查询(返回 VO,默认无转换)PAGE_VO
POST/user/savesave新增数据SAVE
POST/user/updateupdate更新数据(根据 ID)UPDATE
GET/user/deleteById/{id}deleteById删除单条数据(根据 ID)DELETE_BY_ID
POST/user/deletedelete批量删除(根据 ID 集合)DELETE

🧾 通用分页组件

分页参数类

@Data
public class PageQuery {private Integer pageNo; // 页码private Integer pageSize; // 每一页数据量private String sortBy; // 排序字段private Boolean isAsc; // 是否正序// 将分页条件转换为Page<T>public <T> Page<T> toMpPage(OrderItem ... orders){}// 默认分页条件public <T> Page<T> toMpPage(String defaultSortBy, boolean isAsc){}// 按照create_time字段降序public <T> Page<T> toMpPageDefaultSortByCreateTimeDesc() {}// 按照update_time字段降序public <T> Page<T> toMpPageDefaultSortByUpdateTimeDesc() {}
}

分页响应类

@Data
@AllArgsConstructor
public class PageResult<T> {private Long total;  //总条数private Long pages; // 总页数private List<T> list; // 数据// 返回空分页结果public static <V, P> PageResult<V> empty(Page<P> p){}//将MybatisPlus分页结果转为 VO分页结果public static <V, P> PageResult<V> of(Page<P> p, Class<V> voClass) {}//将MybatisPlus分页结果转为 VO分页结果,允许用户自定义PO到VO的转换方式public static <V, P> PageResult<V> of(Page<P> p, Function<P, V> convertor) {}
}

⚙️ 配置项说明(application.yml

mybatis-plus-kit:response-wrapper-enabled: true  # 是否启用统一响应封装(默认 true)exception-handler-enabled: true # 是否启用全局异常处理(默认 true)auto-api-proxy-enabled: true # 是否启用全局动态代理 (默认 true)base-package: io.github.l4vid4.example # 包路径

✅ TODO(未来计划)

  • 开发代码生成插件
  • 通用字段自动填充(createTime, updateTime)
  • 多数据源/分表兼容支持
  • 添加swagger支持

🧑‍💻 贡献指南

欢迎 PR 或 issue!如果你觉得这个项目对你有帮助,欢迎点个 ⭐!

📄 License

Apache 2.0

相关文章:

  • 数据库MySQL学习——day13(索引与查询优化)
  • 深度解读 Qwen3 大语言模型的关键技术
  • 2025年上半年软考系统架构设计师--案例分析试题与答案
  • 使用Auto-Coder对js文件进行审计并修复漏洞1.3 1.4 1.5版本
  • 组合API-provide和inject函数
  • 颠覆传统,智领未来——UMI企业智脑:重新定义企业智能化转型的全新可能
  • SIGGRAPH 2025 | 快手可灵团队提出3D感知的电影级文本到视频生成框架CineMaster
  • 视频监控联网系统GB28181协议中历史视音频的回放流程详解以及查询失败常见原因
  • 测试 Gemini Pro 2.5
  • 电机控制杂谈(26)——电机驱动系统的编码器的测速噪声
  • 迪米特法则 (Law of Demeter, LoD)
  • ISP图像处理算法之Demosaic
  • 第1章 计算机系统知识
  • Spring Boot 深度集成 Ollama 指南:从聊天模型配置到生产级应用开发
  • 计算机网络实验课(二)——抓取网络数据包,并实现根据条件过滤抓取的以太网帧,分析帧结构
  • 5.27打卡
  • 3D Web轻量化引擎HOOPS Communicator实时协作功能深度解析
  • 4.GIS迁移步骤+注意事项+部署常见问题
  • 欧拉定理:若 gcd(a,n)=1,则 a^φ(n)≡1(mod n)。
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月27日第90弹
  • 怎么看一个网站谁做的优化/自助发稿
  • wordpress密码长度/宁波网站推广网站优化
  • 领优惠券的网站怎么建设的/免费外国网站浏览器
  • 自己建设网站麻烦吗/公司网站建设要多少钱
  • 珠海网站建设 旭洁科技/南宁百度seo排名公司
  • 天元建设集团有限公司第二建筑工程分公司/厦门seo全网营销