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
3、生成代码
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开发中,觉得还有哪些代码可以自动生成以提高效率的或者有什么好的想法,欢迎留言,笔者将在项目内扩展和维护。