欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring boot开发基础代码生成

程序员文章站 2024-02-27 18:16:57
...

spring boot开发基础代码生成

前言

在spring boot开发中会发现有些代码,如果初始编写时,能自动生成可以提高开发效率。比如spring mvc三层架构下controller、service、dao代码文件的创建和编写。

简介

项目以Mybatis-Plus代码生成以基础,扩展提供yml配置以减少复杂度
项目地址:
https://github.com/shenhb/spring-mvc-code-generator

注:想了解Mybatis-Plus代码生成器更多信息,可以查看Mybatis-Plus代码生成文档

如何使用

下载release

可以前往release页面下载window版程序,配置resources/generator/generator.yml文件,可根据自己的需要修改模板文件,运行spring-mvc-code-generator.exe

下载代码

如果现有功能无法实现你的要求,可以通过下载项目代码进行修改,后运行com.muggle.generator.MpGenerator,运行前需先进入项目根目录执行命令编译工厂注解处理器模块

cd fatory
mvn clean install

示例

1.首先配置generator.yml文件,主要配置前几项额外扩展配置、数据库配置、跟包相关的配置项,其他默认

# 额外扩展配置
ExtraConfig:
  # mapper xml是否生成在根目录 默认true
  xmlInRoot: true

  # 常用项覆盖配置
  # 生成文件的输出目录
#  outputDir : "D://temp//"
  # 需要包含的表名(与exclude二选一配置)(String[])
  include:
    - "sys_user"
  # 需要排除的表名(String[])(yaml中 ~表示null)
  exclude: ~

# 数据库配置
DataSourceConfig:
  # 数据库类型(DbType enum,根据driverName判断可以得出,除SqlServer)
  # 例:mysql,mariadb,oracle,db2,h2,hsql,sqlite,sql_server,postgre_sql,other db
  #dbType:
  # PostgreSQL schemaname
  schemaname: "public"
  # 类型转换
  #typeConvert:
  # 驱动连接的URL
  url: jdbc:mysql://127.0.0.1:3306/muggle?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
  # 驱动名称
  driverName: com.mysql.jdbc.Driver
  # 数据库连接用户名
  username: root
  # 数据库连接密码
  password: root

# 跟包相关的配置项
PackageConfig:
  # 父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名
  parent: "com.muggle.platform"
  # 父包模块名。
  moduleName: ~
  # Entity包名
  entity: "model"
  # Service包名
  service: "service"
  # Service Impl包名
  serviceImpl: "service.impl"
  # Mapper包名
  mapper: "mapper"
  # Mapper XML包名
  #xml: "mapper"
  # Controller包名
  controller: "controller"

# 全局配置
GlobalConfig:
  # 生成文件的输出目录
  outputDir : "D://temp//"
  # 是否覆盖已有文件
  fileOverride : true
  # 是否打开输出目录
  open : true
  # 是否在xml中添加二级缓存配置
  enableCache : false
  # 开发人员
  author: shenhb
  # 开启 Kotlin 模式
  kotlin : false
  # 开启 ActiveRecord 模式
  activeRecord : true
  # 开启 BaseResultMap
  baseResultMap : true
  # 开启 baseColumnList
  baseColumnList : false
  # 指定生成的主键的ID类型
  # AUTO(0, "数据库ID自增"), INPUT(1, "用户输入ID")
  # /* 以下2种类型、只有当插入对象ID 为空,才自动填充。 */
  # ID_WORKER(2, "全局唯一ID"), UUID(3, "全局唯一ID"), NONE(4, "该类型为未设置主键类型"),
  # ID_WORKER_STR(5, "字符串全局唯一ID");
  #idType: 1


# 策略配置项
StrategyConfig:
  # 表名、字段名、是否使用下划线命名(默认 false)
  DB_COLUMN_UNDERLINE: false
  # 是否大写命名  全局大写命名 ORACLE 注意
  isCapitalMode: false
  # 数据库表映射到实体的命名策略(NamingStrategy)  nochange:不做任何改变,原样输出  underline_to_camel:下划线转驼峰命名(默认)
  naming: underline_to_camel
  # 表前缀 String[]
  tablePrefix:
    - "tlog_"
    - "tsys_"
    - ""
  # 自定义继承的Entity类全称,带包名
  #superEntityClass: com.muggle.common.domain.BaseModel
  # 自定义基础的Entity类,公共字段(String[] )
  superEntityColumns:
#    - "id"
    - ""
    - ""
  # 自定义继承的Mapper类全称,带包名(ConstVal.SUPERD_MAPPER_CLASS)
  superMapperClass:
  # 自定义继承的Service类全称,带包名(ConstVal.SUPERD_SERVICE_CLASS)
  superServiceClass:
  # 自定义继承的ServiceImpl类全称,带包名(ConstVal.SUPERD_SERVICEIMPL_CLASS)
  superServiceImplClass:
  # 自定义继承的Controller类全称,带包名
  superControllerClass:
  # 需要包含的表名(与exclude二选一配置)(String[])
  include:
    - ""
    #- ""
    #- ""
  # 需要排除的表名(String[])(yaml中 ~表示null)
  exclude: ~
  #      - ""
  #      - ""
  #      - ""
  # 【实体】是否生成字段常量(默认 false)<br>
  # -----------------------------------<br>
  # final ID = "test_id":
  entityColumnConstant: false
  # 【实体】是否为构建者模型(默认 false)<br>
  # -----------------------------------<br>
  # public User setName(name) { this.name = name: return this: }
  entityBuilderModel: false
  # 【实体】是否为lombok模型(默认 false)<br>
  # <a href="https://projectlombok.org/">document</a>
  entityLombokModel: false
  # 类型字段是否移除is前缀(默认 false)<br>
  # 比如 : 数据库字段名称 : 'is_xxx',类型为 : tinyint. 在映射实体的时候则会去掉is,在实体类中映射最终结果为 xxx
  entityBooleanColumnRemoveIsPrefix: false
  # 生成 <code>@RestController</code> 控制器
  # <pre>
  #      <code>@Controller</code> -> <code>@RestController</code>
  # </pre>
  restControllerStyle: true
  # 驼峰转连字符
  # <pre>
  #      <code>@RequestMapping("/managerUserActionHistory")</code> -> <code>@RequestMapping("/manager-user-action-history")</code>
  # </pre>
  controllerMappingHyphenStyle: false
  # 乐观锁属性名称
  versionFieldName: version
  # 逻辑删除属性名称
  logicDeleteFieldName: is_del
  # 表填充字段(List<TableFill>)
  tableFillList: ~


# 模板路径配置项(如下任何一个模块如果设置 ~,将不生成该模块。)
TemplateConfig:
  # (ConstVal.TEMPLATE_ENTITY_JAVA = "/templates/entity.java.vm")
  entity: /templates/entity.java.vm
  # (ConstVal.TEMPLATE_SERVICE = "/templates/service.java.vm")
  #service:
  # (ConstVal.TEMPLATE_SERVICEIMPL = "/templates/serviceImpl.java.vm")
  #serviceImpl:
  # (ConstVal.TEMPLATE_MAPPER = "/templates/mapper.java.vm")
  #mapper:
  # 设置为null关闭生成(ConstVal.TEMPLATE_XML = "/templates/mapper.xml.vm")
  xml: /templates/mapper.xml.vm
  # (ConstVal.TEMPLATE_CONTROLLER = "/templates/controller.java.vm")
  #controller:

2、运行spring-mvc-code-generator.exe
spring boot开发基础代码生成

3、生成代码
spring boot开发基础代码生成

SysUser.java

package com.muggle.platform.model;

import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.annotations.TableLogic;
import com.baomidou.mybatisplus.annotations.Version;
import java.io.Serializable;
import java.io.Serializable;

/**
 * <p>
 * 
 * </p>
 *
 * @author shenhb
 * @since 2018-07-17
 */
@TableName("sys_user")
public class SysUser extends Model<SysUser> {

    private static final long serialVersionUID = 1L;

    private String name;
    private String password;
    /**
     * 1 男 2女
     */
    private Integer sex;
    @TableField("group_id")
    private String groupId;
    @Version
    private Integer version;
    @TableField("is_del")
    @TableLogic
    private Integer isDel;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getSex() {
        return sex;
    }

    public void setSex(Integer sex) {
        this.sex = sex;
    }

    public String getGroupId() {
        return groupId;
    }

    public void setGroupId(String groupId) {
        this.groupId = groupId;
    }

    public Integer getVersion() {
        return version;
    }

    public void setVersion(Integer version) {
        this.version = version;
    }

    public Integer getIsDel() {
        return isDel;
    }

    public void setIsDel(Integer isDel) {
        this.isDel = isDel;
    }

    @Override
    protected Serializable pkVal() {
        return null;
    }

    @Override
    public String toString() {
        return "SysUser{" +
        ", name=" + name +
        ", password=" + password +
        ", sex=" + sex +
        ", groupId=" + groupId +
        ", version=" + version +
        ", isDel=" + isDel +
        "}";
    }
}

SysUserServiceImpl.java

package com.muggle.platform.service.impl;

import com.muggle.platform.model.SysUser;
import com.muggle.platform.mapper.SysUserMapper;
import com.muggle.platform.service.ISysUserService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author shenhb
 * @since 2018-07-17
 */
@Service
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService {

}

参考项目

https://github.com/baomidou/mybatis-plus
https://github.com/sockeqwe/annotationprocessing101

结语

在spring boot开发中,觉得还有哪些代码可以自动生成以提高效率的或者有什么好的想法,欢迎留言,笔者将在项目内扩展和维护。