刚接手一个新微服务项目时,最头疼的就是要手动创建几十个表的CRUD代码。我去年做过一个电商项目,光是商品模块就有23张表,如果每个实体类、Mapper、Service都手写,至少得浪费3天时间。这时候renren-generator就像个救星——它能根据数据库表结构,自动生成全套基础代码。
这个脚手架工具特别适合快速启动项目的中小型团队。想象一下,你新建一个订单服务,连上数据库点几下鼠标,5分钟内就能拿到所有表的增删改查接口。实测生成一个包含20张表的微服务模块,比手动编写效率提升10倍不止。
不过要注意,它生成的是基础模板代码。就像装修房子的毛坯房,后续你还得根据业务需求进行二次开发。但至少省去了最枯燥的重复劳动,让开发者能专注在核心业务逻辑上。
首先访问码云仓库:
bash复制git clone https://gitee.com/renrenio/renren-generator.git
用IDEA打开项目后,你会看到标准的Spring Boot结构。我建议在pom.xml里先把Spring Boot版本锁定为2.3.x以上,避免依赖冲突。
打开application.yml,修改数据源部分:
yaml复制spring:
datasource:
url: jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=UTF-8
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
遇到过一个小坑:如果用的是MySQL 8.0+,记得在pom.xml添加对应驱动:
xml复制<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
generator.properties文件控制着代码生成的关键参数:
properties复制# 包路径配置
mainPath=com.yourcompany
package=com.yourcompany.modules
moduleName=order
author=YourName
建议把moduleName改成你的微服务名称,比如"product"或"user"。这样生成的代码包结构会更清晰。
启动应用后访问 http://localhost:80 (默认端口),你会看到一个极简的UI界面。勾选需要生成代码的表,点击生成按钮,控制台会输出类似日志:
code复制生成表:order_info 成功
生成表:order_item 成功
生成的文件结构是这样的:
code复制main
├── java
│ └── com
│ └── yourcompany
│ └── modules
│ └── order
│ ├── controller
│ ├── entity
│ ├── dao
│ └── service
└── resources
└── mapper
└── order
遇到过最坑的问题是:直接复制生成的main目录到项目里,所有类都会报错。这是因为缺少公共依赖。
新建一个common模块,pom.xml关键配置如下:
xml复制<dependencies>
<!-- MyBatis Plus必须 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<!-- 其他公共依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
</dependencies>
把renren-generator中这些类复制到common模块:
R.java(统一返回结果)AbstractController.javaPageUtils.javaQuery.java然后在业务模块的pom中添加:
xml复制<dependency>
<groupId>com.yourcompany</groupId>
<artifactId>common</artifactId>
<version>1.0.0</version>
</dependency>
如果想自定义生成的代码风格,可以修改resources/template下的vm模板文件。比如要给所有Controller添加Swagger注解:
java复制@Api(tags = "${className}管理")
@RestController
@RequestMapping("/${moduleName}/${pathName}")
public class ${className}Controller {
记得修改后clean再重新编译项目。
在application.yml配置多个数据源:
yaml复制spring:
datasource:
db1:
url: jdbc:mysql://localhost:3306/db1
db2:
url: jdbc:mysql://localhost:3306/db2
然后在generator.properties指定:
properties复制# 使用db2数据源
dbName=db2
在电商项目中,我们对生成的代码做了这些改进:
有个特别实用的技巧:在AbstractController里添加全局异常处理:
java复制@ExceptionHandler(Exception.class)
public Result handleException(Exception e){
log.error(e.getMessage(), e);
return Result.error("系统繁忙");
}
遇到字段类型不匹配时,可以修改resources/generator.properties中的类型映射:
properties复制# 将数据库的tinyint映射为Integer
tinyint=Integer
最后提醒:生成代码后一定要检查Mapper XML文件。有一次我发现它把create_time字段生成了两次,导致插入失败。这种小问题用MyBatis Plus的@TableField注解就能解决。