在mybatis-flex中,有了一个名称为mybatis-flex-codegen的模块,提供了可以通过数据库表,生成代码的功能。当我们把数据库表设计完成后,就可以使用其快速生成Entity、Mapper、Service、Controller等产物。
另外:MyBatis-Flex也提供了一个在线的AI代码生成器,可以通过您的产品(或项目)需求描述,自动帮你生成完整的SpringBoot+MyBatisFlex项目代码以及SQL脚本,下载导入到开发工具即可使用。
在使用之前,我们需要先添加mybatis-flex-codegen的Maven依赖:
在Mybatis-Flex的代码生成器中,支持如下8种类型的的产物生成:
启用或关闭某种类型产物的生成,代码如下:
//开启Entity的生成globalConfig.enableEntity();//关闭Entity的生成globalConfig.disableEntity();所有方法均支持链式调用配置,代码如下:
setEntitySuperClassFactory示例代码:
MyBatis-Flex内置了一个名为:JdbcTypeMapping的java类,我们可以用其配置映射Jdbc驱动的数据类型为自定义的数据类型,在开始生成代码之前,可以先调用其进行配置,例如:
JdbcTypeMapping.registerMapping(LocalDateTime.class,Date.class);那么,当我们生成代码的时候,发现JDBC驱动的数据类型为LocalDateTime,则Entity对应的属性类型为Date。
方式2:通过JdbcTypeMapper
示例代码如下:
JdbcTypeMapping.setTypeMapper(newJdbcTypeMapping.JdbcTypeMapper(){@OverridepublicStringgetType(StringjdbcType,Tabletable,Columncolumn){if(table.getName().equals("tb_sys_permission")&&column.getName().equals("type")){returnPermissionType.class.getName();}returnnull;}});在以上的示例中,如果表名为tb_sys_permission且列名为type,生成的Entity的属性类型为PermissionType;
注意,通过JdbcTypeMapper设置的优先级要高于JdbcTypeMapping.registerMapping设置的内容。
方式3:使用ColumnConfig定义
如下方示例代码所示:
方言可以通过如下的方式进行使用:
Generatorgenerator=newGenerator(dataSource,globalConfig,IDialect.ORACLE);//使用哪个方言generator.generate();不传入方言的情况下,使用默认方言。
针对不同的数据库,我们也可以通过自定义方言来实现代码生成,例如:
MyDialect.java
publicclassEntityGeneratorimplementsIGenerator{privateStringtemplatePath="/templates/enjoy/entity.tpl";@Overridepublicvoidgenerate(Tabletable,GlobalConfigglobalConfig){if(!globalConfig.isEntityGenerateEnable()){return;}PackageConfigpackageConfig=globalConfig.getPackageConfig();EntityConfigentityConfig=globalConfig.getEntityConfig();StringentityPackagePath=packageConfig.getEntityPackage().replace(".","/");FileentityJavaFile=newFile(packageConfig.getSourceDir(),entityPackagePath+"/"+table.buildEntityClassName()+".java");if(entityJavaFile.exists()&&!entityConfig.isOverwriteEnable()){return;}Map
publicclassHtmlGeneratorimplementsIGenerator{@Overridepublicvoidgenerate(Tabletable,GlobalConfigglobalConfig){//在这里生成html代码}}最后,通过GeneratorFactory来注册HtmlGenerator即可:
MySQL
JdbcUrl上注意添加useInformationSchema=true配置,如下代码所示:
HikariDataSourcedataSource=newHikariDataSource();//注意:url需添加上useInformationSchema=true才能正常获取表的注释dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/dbuseInformationSchema=true&characterEncoding=utf-8");dataSource.setUsername("username");dataSource.setPassword("password");Oracle
JdbcUrl上注意添加remarksReporting=true配置,如下代码所示: