资讯动态

MyBatisCodeHelperPro插件实战:从数据库表逆向生成CRUD代码

发布时间:2026/9/17 13:17:11 来源:尧图企业网站定制
1. 从零搭建个人博客为什么我选择用MyBatisCodeHelperPro逆向生成CRUD代码先交代一下背景。我在做自己的个人博客项目时后端表结构设计得差不多了大概七八张表涉及文章、标签、评论、用户这些核心模块。表建模阶段挺痛快但真到了写实体类、mapper接口、mapper.xml、service接口和实现类这一步整个人就不太想动了。每张表都得重复一套“复制字段、改类型、写注解、补方法”的机械操作再加上博客项目里字段命名基本是下划线风格Java里又得转驼峰手敲特别容易漏字段或者打错类型。后来我在IDEA插件市场里翻到了MyBatisCodeHelperPro试了一个下午直接把生成实体类、mapper接口、service方法这些活全部交给它来干我只负责调整细节和补业务逻辑。这篇文章就是想把我的实际用法、踩过的坑、以及IDEA连接MySQL 5和MySQL 8两套版本时分别要注意什么一次性说清楚。适合正在做个人项目、又不想在CRUD里浪费太多时间的人参考。MyBatisCodeHelperPro这个插件简单说就是给你提供一条从数据库表到Java代码的“逆向生成流水线”。它不是你手写SQL文件的替代品而是帮你把最枯燥的映射层基础代码生成好让你把精力放到查询优化、事务控制、业务判断这些真正影响项目质量的地方去。个人博客项目里我的文章表、标签表、评论表都是靠它生成的后面改字段、加索引也是直接在数据库里改完再重新生成效率确实高很多。2. 环境准备与IDEA连接MySQL的两套方法2.1 插件安装与版本选择MyBatisCodeHelperPro在IDEA插件市场可以直接搜到安装没什么难度。需要注意版本兼容性我用的是IDEA 2022.3和2023.2两个版本插件在2023版上表现更稳定菜单响应速度也正常。如果你用的是更老的2019、2020版本IDEA建议先看一下插件支持的IDE版本范围直接装最新版可能会提示不兼容。安装完之后IDEA右侧或者工具窗口里会多出一个MyBatisCodeHelper的入口。如果你打算用它的收费功能可以找找离线激活的方式但我的建议是先用免费功能跑通流程确定它真的能节省你写基础CRUD的时间再考虑进阶功能。2.2 IDEA连接MySQL 5版本的方法个人博客项目早期我用的数据库是MySQL 5.7当时IDEA连接时踩了不少坑核心问题基本集中在驱动、时区、SSL这几个方面。打开IDEA右侧的Database面板点加号选择Data Source再选MySQL。这时候IDEA会提示你下载驱动或者让你手动选择本地的驱动包。如果你是MySQL 5.7驱动版本选5.1.49或者8.0.x都能连上关键点在于连接URL里的参数。我常用的MySQL 5.7连接URL长这样jdbc:mysql://localhost:3306/blog?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrueuseSSLfalse本机开发没有必要用SSL减少不必要的握手耗时。serverTimezoneAsia/Shanghai不设置的话IDEA连接时经常报“The server time zone value”相关的错误。allowPublicKeyRetrievaltrueMySQL 8默认开启caching_sha2_password加密MySQL 5.7如果也有类似问题这个参数能解决。用户名密码填对以后Test Connection显示绿色勾就说明连上了。如果提示Access denied优先检查密码是否包含特殊字符比如、#这些在驱动配置里可能需要转义。还有一种情况本地MySQL 5.7的root用户默认用了mysql_native_password插件IDEA连接正常但如果你创建过新用户并指定了caching_sha2_password连接时就要额外注意上面提到的allowPublicKeyRetrieval参数。2.3 IDEA连接MySQL 8版本的方法MySQL 8.0和5.7最直观的区别就是默认认证插件变成了caching_sha2_password。IDEA连接MySQL 8时我建议直接使用MySQL Connector/J 8.0.33以上版本驱动太旧会出现无法识别插件的情况。连接URL基本格式jdbc:mysql://localhost:3306/blog?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghai如果连接时遇到Public Key Retrieval is not allowed这个报错就在URL后面加上allowPublicKeyRetrievaltrue。这个参数在很多开发环境里相当关键尤其是MySQL 8首次连接时客户端需要向服务端获取公钥做密码加密传输。另外本地MySQL 8默认的root用户密码如果包含特殊字符在IDEA Database面板里填写密码时不会有大问题但在后面写项目配置文件时要注意把特殊字符做转义。比如密码是Abc123在application.yml里可能需要写成Abc123或者整个连接串用引号包起来。连接成功以后Database面板里能看到blog库下的所有表。右键任意一张表就是MyBatisCodeHelperPro逆向生成的入口。3. 核心操作MyBatisCodeHelperPro逆向生成全套CRUD代码3.1 生成前的表设计规范检查插件不是万能的它依赖数据库表的注释、字段名、主键索引这些元数据。想生成一份好用的代码表设计阶段就得做几件事每张表必须有主键而且主键尽量用id这种命名别搞成user_id作为唯一主键的复杂情况生成时会多出不少需要手动修改的地方。字段要有注释因为插件默认会把数据库字段注释当作实体类字段的注释生成没有注释的话生成的Java代码就是光秃秃的后期阅读成本高。表名和字段名要统一风格我习惯全部小写加下划线比如article_tag、created_at。插件默认能识别下划线转驼峰不用额外配置。如果你的表已经设计得很乱建议先花点时间调整表结构再生成代码不然出来的代码会让你花更多时间去清理。3.2 右键表选择生成方式在IDEA的Database面板中右键点击你要操作的表菜单里会看到MyBatisCodeHelperPro相关选项。主要就是生成实体类、生成Mapper接口、生成Mapper XML、生成Service和ServiceImpl这么几项。我的博客项目里article表、tag表、comment表、user表都是这么生成的。以article表为例表结构里包含了id、title、summary、content、category_id、tags、views、create_time、update_time、deleted这些字段。生成时插件会让你选择生成到哪个模块、哪个包下面。我一般按下面的方式配置实体类com.blog.entityMapper接口com.blog.mapperMapper XMLsrc/main/resources/mapperService接口com.blog.serviceService实现类com.blog.service.impl插件会根据表名自动生成实体类名、Mapper名、Service名。比如article表会生成Article实体、ArticleMapper接口、ArticleService接口和ArticleServiceImpl实现类。生成的代码里CRUD方法整整齐齐包括插入、删除、更新、按主键查询、查询全部列表、分页查询等。3.3 实体类生成的关键配置生成实体类的时候有几个配置项需要特别注意。第一个是“是否使用Lombok”。我博客项目的pom.xml里已经引入了lombok依赖所以生成实体类时勾选使用Lombok这样不会生成一堆getter/setter代码实体类看起来干净很多。第二个是“是否使用MyBatis-Plus”。如果你项目里用了MyBatis-Plus插件也能适配生成出来的Mapper接口会继承BaseMapper并且用上Mapper注解。个人博客这种项目用MyBatis-Plus确实能省不少事我推荐使用。第三个是“是否生成查询条件”。这个默认不勾选也行但如果你需要精确查询、模糊查询、时间范围查询建议勾选上插件会生成一个Query对象里面包含各种查询字段和条件拼接方法。生成实体类的代码大致长这样Data EqualsAndHashCode(callSuper false) public class Article implements Serializable { private static final long serialVersionUID 1L; /** * 文章ID */ private Long id; /** * 标题 */ private String title; /** * 摘要 */ private String summary; /** * 正文内容 */ private String content; /** * 分类ID */ private Long categoryId; /** * 标签JSON数组字符串 */ private String tags; /** * 浏览量 */ private Integer views; /** * 创建时间 */ private LocalDateTime createTime; /** * 更新时间 */ private LocalDateTime updateTime; /** * 逻辑删除标记 */ private Integer deleted; }如果没勾选Lombok生成出来的类就是一长串getter/setter看得人头晕。勾选之后清爽很多。3.4 Mapper接口与XML生成生成的ArticleMapper接口默认会继承MyBatis-Plus的BaseMapper然后自带Mapper注解这样Spring容器能扫描到它。接口里的方法就是你刚才勾选的CRUD方法比如

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价