一、JDBC代码生成:
1.代码生成器:
package coden;
import ins.framework.mybatis.generator.GenConfig;
import ins.framework.mybatis.generator.GenParam;
import ins.framework.mybatis.generator.GenType;
import ins.framework.mybatis.generator.Generator;
import ins.framework.mybatis.generator.util.GeneratorUtils;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class CodeGenerator {
public static void main(String[] args) throws Exception {
List<GenParam> paramList = new ArrayList<GenParam>();
/**
* 请保持生成参数的完整,不要注释
* 包名,表名
*/
paramList.add(new GenParam("aaa", new String[] { "main"}));
paramList.add(new GenParam("aaa", new String[] { "itemKind"}));
paramList.add(new GenParam("aaa", new String[] { "zrRiskInfo"}));
paramList.add(new GenParam("aaa", new String[] { "insuredIdvList"}));
paramList.add(new GenParam("aaa", new String[] { "insuredIdvListTemp"}));
paramList.add(new GenParam("aaa", new String[] { "itemAddress"}));
paramList.add(new GenParam("aaa", new String[] { "itemEmployList"}));
paramList.add(new GenParam("aaa", new String[] { "limit"}));
paramList.add(new GenParam("aaa", new String[] { "ration"}));
GenConfig gc = new GenConfig();
// 设置外层包名
gc.setBasePackage("com");
// 设置要忽略的表名前缀,默认空
gc.setIgnoreTablePrefixs(new String[]{""});
// 设置PO是否保留前缀(设置忽略表名前缀时),默认true
gc.setKeepPrefixForPO(false);
// 设置取操作时间函数,默认空
// gc.setOperateTimeForHisFunc("now()");
// 设置是否默认开启二级缓存(影响base中的MapperXML),默认false
// gc.setDefaultCache(false);
// mysql 数据库相关配置
// 设置基本保存目录(Java源代码根目录)----- 绝对路径
gc.setSaveDir("D:\\ideaproject\\项目名称\\src\\main\\java");
// 可代码指定vo和xml的位置
// gc.setSaveDirForVo(new File(gc.getSaveDir(),
// "../../../../misc-vo/src/main/java").getAbsolutePath());
// gc.setSaveDirForXml(new File(gc.getSaveDir(),
// "../resources/mapper").getAbsolutePath());
// 数据库驱动类
gc.setDbDriverName("com.mysql.cj.jdbc.Driver");
// 数据库链接信息
gc.setDbUrl("jdbc:mysql://localhost:3306");
gc.setDbSchema("database"); // 库名
gc.setDbUser("user"); // 用户名
gc.setDbPassword("user"); // 密码
// 支持生成的文件类型:生成PO、BASE_MAPPER_XML(自动覆盖)、Dao、VO、MapperXML(不覆盖)
gc.setGenTypes(
new GenType[]{GenType.VO, GenType.PO, GenType.DAO, GenType.BASE_MAPPER_XML, GenType.MAPPER_XML});
Generator generator = new Generator();
generator.setGenConfig(gc);
generator.setParamList(paramList);
generator.generate();
StringBuffer sb = new StringBuffer();
for (GenParam param : paramList) {
String module_name = param.getModule();
for (String table_name : param.getTables()) {
String beanName = GeneratorUtils.getObjectName(table_name);
String table_base_xml_file_path = gc.getSaveDir() + "/../resources/mapper/base" + "/" + module_name
+ "/" + beanName + "BaseDao.xml";
// String table_base_xml_file_path = "D:\\tempcode\\" + beanName + "BaseDao.xml";
log.debug("table {}'s base xml file path is {}", table_name, table_base_xml_file_path);
File baseXmlFile = new File(table_base_xml_file_path);
if (!baseXmlFile.exists()) {
log.error("wrong file path {} ", table_base_xml_file_path);
} else {
BufferedReader br = new BufferedReader(new FileReader(baseXmlFile));
String line = null;
String keyProperty = null;
boolean resultMap_line = false;
while ((line = br.readLine()) != null) {
if (line.indexOf("<resultMap id") > 0) {
resultMap_line = true;
sb.append(line);
} else if (resultMap_line) {
if (line.indexOf("<id ") > 0) {
keyProperty = line.substring(line.indexOf("property") + 10, line.indexOf("/") - 1);
resultMap_line = false;
}
sb.append(line);
} else if (line.indexOf("<insert id") > 0) {
sb.append(line.replace(">",
" useGeneratedKeys=\"true\"" + " keyProperty=\"" + keyProperty + "\">"));
} else {
sb.append(line);
}
sb.append("\n");
}
log.debug("new content \n {} ", sb.toString());
br.close();
FileWriter fw = new FileWriter(baseXmlFile, false);
fw.write(sb.toString());
fw.close();
sb.delete(0, sb.length());
}
}
}
}
}
2.resources文件夹下:属性驼峰命名配置
wordroot.properties
// 类属性名称=数据库字段名称
liabilityModifyRate=LIABILITYMODIFYRATE
visitorsNumRate=VISITORSNUMRATE
二、MybatisPlus-代码生成器
3.5.3.1版本 MybatisPlus 代码生成器、
使用Freemarker引擎模板
pom.xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3.1</version>
</dependency>
java代码
package com.sinosoft.tmnch.api;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* 3.5.3.1版本 MybatisPlus 代码生成器
* 使用Freemarker引擎模板
*/
public class CodeGeneration {
public static void main(String[] args) {
// TODO 1.添加要生成的表名——List为空时,则生成所有表的相关类
List<String> tableList = new ArrayList<>();
tableList.add("log");
tableList.add("tb_log_api");
// TODO 2.父包名
String parent = "com.itheima";
// TODO 3.模块名
String moduleName = "api.system";
// TODO 4.数据库连接信息
String url = "jdbc:mysql://localhost:3306/mp?&useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";
String username = "root";
String password = "root";
// TODO 5.xml文件的生成路径(一般不改)
String xmlPath = System.getProperty("user.dir") + "/src/main/resources/mapper";
// TODO 6.表名前缀
ArrayList<String> tablePrefix = new ArrayList<>();
tablePrefix.add("tb_");
FastAutoGenerator.create(url, username, password)
// 全局配置
.globalConfig(builder -> {
builder.author("xxx") // 设置作者
// .enableSpringdoc()
.disableOpenDir() // 禁止完成后打开文件夹
.commentDate("yyyy-MM-dd HH:mm:ss") // 注释的时间格式
.dateType(DateType.TIME_PACK) // 数据库日期 与 实体类中日期类型 的映射关系
.enableSwagger() // 开启 swagger 模式
.outputDir(System.getProperty("user.dir") + "/src/main/java"); // 指定输出目录
})
// 数据库配置
.dataSourceConfig(builder -> builder
.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
int typeCode = metaInfo.getJdbcType().TYPE_CODE;
if (typeCode == Types.SMALLINT) {
// 自定义类型转换
return DbColumnType.INTEGER;
}
return typeRegistry.getColumnType(metaInfo);
}))
// 包配置
.packageConfig(builder -> {
builder.parent(parent) // 设置父包名
.moduleName(moduleName) // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.xml, xmlPath)); // 设置mapperXml生成路径
})
// 策略配置
.strategyConfig(builder -> builder.addInclude(tableList) // 设置需要生成的表名
.addTablePrefix(tablePrefix) // 设置过滤表前缀
// 4.1、Mapper策略配置
.mapperBuilder()
.superClass(BaseMapper.class) // 继承BaseMapper
.enableFileOverride() // 允许覆盖文件
.enableMapperAnnotation() // TODO弃用了??? @Mapper注解
.enableBaseResultMap() // ResultMap
.enableBaseColumnList() // sql片段
.formatMapperFileName("%sDao") // 生成的Dao名称
// .formatXmlFileName("%s") // 不注释Log.xml、注释后,LogMapper.xml
// 4.2、service 策略配置
.serviceBuilder()
.enableFileOverride() // 允许覆盖文件
.formatServiceFileName("%sService")
.formatServiceImplFileName("%sServiceImp")
// 4.3、实体类策略配置
.entityBuilder()
.enableActiveRecord() // 开启AR
.enableFileOverride() // 允许覆盖文件
.enableLombok() // lombok注解
.enableTableFieldAnnotation() // @TableField注解
.columnNaming(NamingStrategy.underline_to_camel) // 小驼峰
// .addTableFills(new Column("create_time", FieldFill.INSERT)) // 字段填充
// .addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE)) // 字段填充
.idType(IdType.AUTO) // ID生成策略
.formatFileName("%sEntity") .build()// 格式化实体类名
// 4.4、Controller策略配置
.controllerBuilder()
.enableFileOverride() // 允许覆盖文件
.enableHyphenStyle() // controller上的映射路径上有小变化
.enableRestStyle() // Rest风格
.formatFileName("%sController")) // 格式化Controller名称
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
}