MyBatis-Generator和Swagger-Codegen

序言

之前使用的spring-boot架构,采用了MyBatis-Generator的代码生成工具,现在的公司使用spring架构,采用了Swagger-Codegen的代码生成工具,下面就来对比一下这两个代码自动生成工具。

MyBatis-Generator

介绍

MyBatis Generator 是 MyBatis 的代码生成器。它可以为任何版本的 MyBatis 生成代码。它将内省一个数据库表(或多个表)并生成可用于访问数据库表。这减少了设置对象和配置文件以与数据库表交互的初始化工作量。它试图对大量简单的 CRUD(创建、检索、更新、删除)的数据库操作产生重大影响。

根据它的配置方式,MyBatis Generator 可能会生成

与表结构匹配的 Java 或 Kotlin 类:

  • 匹配表主键的类(如果有主键)
  • 匹配表的非主键字段的类(BLOB 字段除外)
  • 一个包含表的 BLOB 字段的类(如果表有 BLOB 字段)
  • 启用动态选择、更新和删除的类

这些类之间有适当的继承关系。请注意,生成器可以配置为

生成不同类型的 POJO 层次结构 - 例如,如果您愿意,您可以选择为每个表生成单个域对象。在某些情况下,MBG 会生成 MyBatis3 Compatible SQL Map XML Files。MBG 为配置中的每个表上的简单 CRUD 函数生成 SQL。生成的 SQL 语句包括:

  • insert
  • update by primary key
  • update by example (using a dynamic where clause)
  • delete by primary key
  • delete by example (using a dynamic where clause)
  • select by primary key
  • select by example (using a dynamic where clause)
  • count by example

适当使用上述对象的 Java 或 Kotlin 客户端类、接口和 Kotlin 扩展方法。客户端类的生成是可选的。MBG 将生成一个与 MyBatis 3.x 映射器基础设施配合使用的映射器接口。

依赖

            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-generator</artifactId>
                <version>3.2.0</version>
            </dependency>

IDEA生成代码过程

写一个代码生成类,建立数据库连接,com.baomidou.mybatisplus.generator.AutoGenerator对象获取全局配置、数据库配置等信息,执行execute方法自动生成代码,如下,

  • model文件夹中包含数据库表对应的实体类(数据库字段与实体类成员一一对应),或者称之为域模型。
  • mapper文件夹中包含mapper接口和mapper.xml映射文件,mybatis通过JDK动态代理生成实现类完成SqlSession对象SQL语句执行。
  • service文件夹中有实体类对应的服务类接口和服务实现类,具体提供的服务类接口由我们自己实现。
  • web文件夹中的类提供可以访问的http接口。

上面的四个文件夹是在给AutoGenerator对象注入PackageConfig信息时写的输出文件夹包路径,model中的java文件放在Model层(数据访问层),mapper中的java文件放在DAO层(数据持久层),servcie中的java文件放在service层(业务逻辑层),web中的java文件放在controller层(控制层)。

MyBatis的mapper参数传递#{}和${}区别:

  • #{} 实现的是sql语句的预处理参数,之后执行sql中用?号代替,使用时不需要关注数据类型,Mybatis自动实现数据类型的转换。并且可以防止SQL注入。 
  • ${} 实现是sql语句的直接拼接,不做数据类型转换,需要自行判断数据类型。不能防止SQL注入。

另外,对实体类/域模型我们还可以做一些操作:

  • 添加@Data在实体类上,编译时自动生成各个成员变量的get、set方法。
  • 添加@NoArgsConstructor、@AllArgsConstructor在实体类上,编译时自动生成无参和全部参数的构造方法。
  • 添加@Builder在实体类上,通过建造者设计模式简化对象实例化时添加属性值。
  • 添加@Pattern(regexp="")在成员变量上,通过正则表达式限制成员变量属性值。

前几个注解是lombok包下的注解,最后一个validation包下的注解。

如下图,springboot编译生成的文件都在target目录下,lombok的注解直接帮忙生成了上面那些方法。

Swagger-CodeGen

介绍

swagger-codegen 包含一个模板驱动的引擎,通过解析 OpenAPI / Swagger 定义来生成不同语言的文档、API 客户端和服务器存根。

代码生成过程

swagger-codegen可以很简单的生成服务端的代码。举个例子,

1、首先我们在下面的网页下载swagger-codegen客户端:

https://oss.sonatype.org/content/repositories/releases/io/swagger/swagger-codegen-cli/2.2.1/swagger-codegen-cli-2.2.1.jar

2、任何服务器对外开放使用swagger-ui的页面:https://petstore.swagger.io/,它开放的接口的json文件是https://petstore.swagger.io/v2/swagger.json,记录下服务器端的json文件url。

3、在下好的jar包目录下输入命令 java -jar swagger-codegen-cli-2.2.1.jar generate -i https://petstore.swagger.io/v2/swagger.json -l java -o samples/client/pestore/java

则会把该json文件进行解析编译再写到-o后指定的文件路径。

4、最后输出的文件如下,里面包含API、Model等,这里是由于没有把一些依赖引入,

总结

MyBatis-Generator和Swagger-Codegen各有优点,个人还是比较习惯使用前者,后者可以从服务端通过json文件解析并生成域模型、接口等。对于后者目前还不太了解,只是知道怎么用,不好评判谁好谁坏。

参考链接:

1、http://mybatis.org/generator/

2、https://swagger.io/docs/open-source-tools/swagger-codegen/

3、https://editor.swagger.io/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值