Java 手写简单代码生成器

本片博客只讲述了实现过程和功能,具体源码在我的百度云盘上获取:

链接:https://pan.baidu.com/s/1Gree8UreYtcZjHelOh6FRw   提取密码:oheo 

原理:导入模板,连接数据库获取数据库表的元数据,解析获取到的元数据,将解析到的所有表的数据遍历,使用FreeMarker将数据与模板合成,最终以输出流的形式生成文件。

〇、代码生成器的三要素

  1. 数据
  2. 模板
  3. 合成机制

一、实现功能

  1. 自动生成实体类(pojo)
  2. 自动生成mapper接口
  3. 自动生成SQL映射文件

二、实现步骤

  1. 编写要自动生成的FreeMarker模板,如实体类(pojo.ftl)、mapper接口(mapper.ftl)、SQL映射文件(sql.ftl)。编写模板可以根据自己的需求自定义编写。
  2. 创建TableVo类。用来保存从数据库中获取到的表的信息。此类中创建的字段如下
    1. 1.帕斯卡风格的类名(className):创建实体类文件时所需的文件名

      2.骆驼风格的类名(camelName):创建mapper接口文件时,方法中以实体类作为参数时需要的对象名

      3.下划线风格的表名(tableName):创建SQL映射文件时,SQL语句需要的表名;还有用它进行转换,转换成所需的帕斯卡命名和骆驼命名

      4.表注释(comment):获取表注释,生成类的描述

      5.列集合(columns):获取对应表中所有列的所有信息

  3. 创建ColumnVo类。用来保存对应列的所有信息。

    1. 获取Java类的字段名(fieldName)及字段类型(javaType),生成Java类时需要用到

    2. 获取到数据库列的类型(dbType):用来进行判断,“转为”对应的字段类型

    3. 获取到数据库列名称(name):用来进行转换成类变量;SQL映射文件中,对表操作也需要列也是自动生成的

    4. 列注释(comment):自动生成为字段的注释

    5. 帕斯卡命名的列名(upperCaseColumnName):创建类时,自动生成get set方法

  4. 创建转换工具类(JavaNameConvertTool类)。目的是为了:

    1. 将下划线的表名或列名转为帕斯卡风格类名(toCamel方法)和骆驼风格类名(toPascal方法)

    2. 将表中字段类型转为java类的字段类型(dbTypeToJavaType方法)

  5. 创建获取数据库元数据的工具类(ParseMetadataUtil类)。目的是为了:

    1. 连接数据库获取元数据(openConnection方法),再从元数据中获取所有表的信息(getTables)和列的信息(getColumns方法)

  6. 抽象出一个代码生成器类(CodeGeneratorAbstract类)。

    1. 创建CodeGeneratorAbstract有参构造方法,通过传入的参数(模板文件名)初始化Configuration、Template等对象

    2. 解析元数据获取表以及表所对应的所有列信息封装到 tableVos 中

    3. 抽象出一个代码生成器方法(generateCode方法)。因为本代码生成器在生成文件时,保存在不同根目录下

  7. 创建实体生成器类(PojoCodeGenerator类)。继承CodeGeneratorAbstract类,重写generateCode方法

  8. 创建mapper文件和SQL映射文件生成器类(MapperAndXmlGenerator类)。继承CodeGeneratorAbstract类,重写generateCode,注意看这个方法的实现过程,我把生成的对应的mapper接口文件和SQL映射文件放在了同一个目录下,且他们的上一级目录是表名没有下划线的风格。源码中:

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值