前言
随着敏捷开发模式的推广,伴着日益增长的需求,日常工作中我们越来越注重效率和便捷性。今天我们就来探讨下如何自动生成代码,准确地说是如何依赖数据库生成我们的entity、mapper、mybatis xml、service、serviceImpl、controller,搭建我们的项目模板,提高我们的开发效率。这里我们的实现方式是基于mybatis-plus来实现的,废话少说,直接开始吧。创建项目
这里创建的maven项目,核心依赖如下: <properties> <mybatis-plus.version>2.1.9mybatis-plus.version> <mybatis-plus-generator.version>2.1.9mybatis-plus-generator.version> properties> <dependencies> <dependency> <groupId>com.baomidougroupId> <artifactId>mybatis-plus-generateartifactId> <version>${mybatis-plus-generator.version}version> dependency> <dependency> <groupId>com.baomidougroupId> <artifactId>mybatis-plusartifactId> <version>${mybatis-plus.version}version> dependency>
这里需要还需要引入slf4j-log4j12和slf4j-api的依赖,否则会报找不到org/slf4j/LoggerFactory的错误:
<dependency> <groupId>org.slf4jgroupId> <artifactId>slf4j-log4j12artifactId> <version>1.7.12version> dependency> <dependency> <groupId>org.slf4jgroupId> <artifactId>slf4j-apiartifactId> <version>1.6.1version> dependency>
因为要通过数据库自动构建代码,所以数据库驱动必不可少,这里演示用的是mysql数据库:
<dependency> <groupId>mysqlgroupId> <artifactId>mysql-connector-javaartifactId> <version>8.0.16version> dependency>
项目创建完后,下面我们要编写代码自动生成器。
导入代码模板
在编写自动生成器之前,更重要的工作是导入代码模板,模板决定了后续你代码生成后的样式,如果第一次接触,先不要考虑如何自己构建模板,我们先照猫画虎改一个呗:entity.java的模板:
文件名及路径:
mybatis-templates/entity.java.vm
package ${package.Entity}; #if(${activeRecord}) import java.io.Serializable; #end #foreach($pkg in ${table.importPackages}) import ${pkg}; #end #if(${entityLombokModel}) import com.baomidou.mybatisplus.annotations.Version; import lombok.Data; import lombok.experimental.Accessors; import java.io.Serializable; #end /********************************************** * 描述:$!{table.comment} * * @author ${author} * @version 1.0 * @date:${date} *********************************************/ #if(${entityLombokModel}) @Data @Accessors(chain = true) #end #if(${table.convert}) @TableName("${table.name}") #end #if(${superEntityClass}) public class ${entity} implements Serializable {
#elseif(${activeRecord}) public class ${entity} extends Model {
#else public class ${entity} implements Serializable {
#end private static final long serialVersionUID = 1L; ## ---------- BEGIN 字段循环遍历 ---------- #foreach($field in ${table.fields}) #if(${field.keyFlag}) #set($keyPropertyName=${field.propertyName}) #end #if("$!field.comment" != "") /** * ${field.comment} */ #end #if(${field.keyFlag}) ## 主键 #if(${field.keyIdentityFlag}) @TableId(value="${field.name}", type= IdType.AUTO) #elseif(${field.convert}) @TableId("${field.name}") #end ## 普通字段 #elseif(${field.fill}) ## ----- 存在字段填充设置 ----- #if(${field.convert}) @TableField(value = "${field.name}", fill = FieldFill.${field.fill}) #else @TableField(fill = FieldFill.${field.fill}) #end #elseif(${field.convert}) @TableField("${field.name}") #end ## 乐观锁注解 #if(${versionFieldName}==${field.name}) @Version #end ## 逻辑删除注解 #if(${logicDeleteFieldName}==${field.name}) @TableLogic #end private ${field.propertyType} ${field.propertyName}; #end ## ---------- END 字段循环遍历 ---------- #if(!${entityLombokModel}) #foreach($field in ${table.fields}) #if(${field.property