代码生成器
API开发时首先使用代码生成器生成目录结构以及class主体。
代码生成器位置:
└── test
└── java
└── com
└── sofast
├── MybatisPlusUIServer.java // 代码生成器
代码生成器配置:
public static void main(String[] args) {
GeneratorConfig config = GeneratorConfig.builder().jdbcUrl("jdbc:mysql://x.x.x.x:3306/so-fast")
.userName("db-username") // TODO 修改为自己数据库用户名
.password("db-password") // TODO 修改为自己数据库密码
.driverClassName("com.mysql.cj.jdbc.Driver")
.basePackage("com.sofast.biz") // TODO 设置要生成的业务包路径
.port(8068) // TODO 设置服务端口号
.build();
MybatisPlusToolsApplication.run(config);
}
运行:
右键执行main函数即可。服务启动之后,在浏览器打开地址http://localhost:8068/

输出配置:


代码生成器提供对Entity、Mapper、Service、Controller的全部生成。so-fast框架提供了模板,可通过上传模板进行自定义代码格式生成。
这里需要注意「输出路径」,一定要写正确,这里的输出路径是开发工程中的package路径,根据自己业务期望位置进行填写,比如我希望生成到biz目录下,并新建一个test业务模块,在test业务模块中创建自己的Controller、Service、Mapper、Entity,我期望的目录结构如下:文件模板位置:
doc └── code_tpls ├── controller.java.btl ├── entity.java.btl ├── mapper.java.btl ├── service.java.btl └── serviceimpl.java.btl
biz
├── test
│ ├── controller
│ ├── entity
│ ├── mapper
│ └── service
│ └── impl
另外,针对entity和controller需要在页面进行一些设置,便于生成更符合要求的代码。
点击Entity行的「操作」按钮,打开「策略配置」选项,将启用lombok、生成注解、生成swagger2注解选项打开并保存。

点击Controller行的「操作」按钮,打开「策略配置」选项,在「Controller的超类名称」栏中填入Controller的父类「com.sofast.core.framework.web.controller.BaseController」,so-fast要求所有的Controller类必须继承该父类。另外将「启用REST接口注解」选项打开并保存。

代码生成:
重新回到Table列表页面,选中需要操作的表,并点击「代码生成」按钮

在打开的页面中,输入以下内容,点击「开始生成」进行定制化代码生成。代码会自动生成到工程对应的包下。

注意:因为在「输出路径」已经填写好了,完整的路径,这里的「功能模块名」请不要填写任何东西!!!
如果需要进行重复生成时,可以开启文件覆盖选项,将之前的旧文件覆盖,但使用时要注意,别覆盖了已经编写好的代码!!!
点击「开始生成」后,我们来看下代码生成结果:

如我们预期一样,我们得到了正确的代码结构和代码文件。
常见问题:
Q:代码生成器页面一段时间后,Table列表显示不出来,控制台有Exception抛出?
A:这个是因为数据库连接池问题,过一会刷新页面就正常了。
Q:自动生成的模块代码,启动服务时报错Bean唯一性冲突,搜索到两个以上Bean?
A:这个是因为MapperScan的扫描问题,需要在MybatisPlusConfig文件中修改@MapperScan注解的值
@MapperScan({"com.sofast.system.*.mapper", "com.sofast.cms.mapper","com.sofast.demo.mapper", "com.sofast.biz.**.mapper"})如果有自定义报名的,请在此添加自定义包名路径,末尾必须是mapper。
A2:还有一种可能是确实发生了重名的问题,需要开发人员搜索检查是否有重名文件存在,解决自动生成重名文件有两种方式:1,设计的表名称在去掉固定前缀的前提下不要存在重复的名字;2,可以修改代码生成器的配置,生成文件时带上表的固定前缀。配置如下:
.basePackage("com.sofast.biz") // TODO 修改为自己要生成的业务包 // TODO 不移除表头前缀,如果想移除,请注释此配置 .nameConverter(new NameConverter() { public String entityNameConvert(String tableName) { if (Strings.isNullOrEmpty(tableName)) { return ""; } else { return StrUtil.upperFirst(StrUtil.toCamelCase(tableName.toLowerCase())); } } })
