手写Java代码生成工具(一)


前言

写博客是为了记录和分享自己的学习,所分享内容是网上的资源,由于非原创项目,主要分享学习思路,只贴图部分代码(本人不分享本项目源码,支持项目付费


一、逆向读取配置文件application.properties

在这里插入图片描述
这段代码的主要功能是从名为 “application.properties” 的配置文件中读取键值对,并将其存储在一个ConcurrentHashMap中,以便后续能够通过给定的键快速获取对应的值。

1.首先定义了两个静态变量:

  • props是一个Properties对象,用于加载和存储属性文件中的键值对。
  • PROPER_MAP是一个ConcurrentHashMap,用于以更方便的方式存储和检索属性值。

2.在静态代码块中:

  • 尝试从类加载器中获取 “application.properties” 文件的输入流。
  • 如果成功获取输入流,则使用props.load(is)加载属性文件中的键值对。
  • 接着,使用迭代器遍历props中的所有键,将每个键值对存入PROPER_MAP中。
  • 最后,在finally块中,确保输入流被正确关闭,防止资源泄漏。

3.定义了一个公共静态方法get(String key),用于根据给定的键从PROPER_MAP中获取对应的值。


二、通过配置文件连接到数据库

在这里插入图片描述
这段代码的主要功能是在类加载时建立与数据库的连接,并提供了一些用于查询数据库表信息的 SQL 语句和日志记录功能。

1.定义了静态变量:

  • conn是一个Connection对象,用于表示数据库连接。
  • logger是一个日志记录器,用于记录错误信息。
  • 定义了三个静态的字符串常量,分别用于查询表状态、表字段和表索引的 SQL 语句。

2.在静态代码块中:

  • 从配置文件中获取数据库驱动名、连接 URL、用户名和密码。
  • 使用Class.forName()加载数据库驱动。
  • 通过DriverManager.getConnection()建立数据库连接。如果连接失败,会记录错误日志。

三、读取数据库表的基本信息

在这里插入图片描述
这个方法的主要功能是获取数据库中所有表的信息,并将其封装成TableInfo对象的列表。它通过执行show table status SQL 语句获取表的基本信息,然后进一步获取每个表的字段信息和索引信息,并将这些信息封装到TableInfo对象中。

1.首先定义了一个PreparedStatement对象和一个ResultSet对象,用于执行 SQL 查询并获取结果集。还定义了一个List用于存储查询到的表信息。
2.在try块中:

  • 准备并执行show table status SQL 查询,获取结果集。
  • 遍历结果集,从每一行中获取表名、注释等信息,并根据一些规则处理表名生成 bean 名称。
  • 创建TableInfo对象,设置表名、bean 名称、注释等属性。
  • 调用readFieldInfo方法读取表的字段信息并设置到TableInfo对象中。
  • 调用getKeyIndexInfo方法获取表的索引信息并设置到TableInfo对象中。
  • 打印每个TableInfo对象的 JSON 表示形式。

3.在finally块中:关闭结果集、预处理语句和数据库连接,以防止资源泄漏。
4.最后返回存储表信息的列表。

四、读取数据库表字段

在这里插入图片描述
这个方法用于读取指定表的字段信息,并将其封装到FieldInfo对象中,然后添加到给定的TableInfo对象的字段信息列表中。同时,它还会根据字段的类型设置TableInfo对象中的一些标志位,用于表示表中是否包含特定类型的字段(如日期时间类型、日期类型、大数字类型等)。

1.定义了一个PreparedStatement对象和一个ResultSet对象,用于执行 SQL 查询并获取结果集。还定义了一个List< FieldInfo >用于存储字段信息。
2.在try块中:

  • 使用给定的表名格式化SQL_SHOW_TABLE_FIELDS SQL 语句,准备并执行查询。
  • 遍历结果集,从每一行中获取字段名、类型、注释和额外属性等信息。
  • 处理字段类型字符串,去除括号及里面的内容(如果存在)。
  • 生成属性名。
  • 创建FieldInfo对象,设置字段名、SQL 类型、注释、是否自增、属性名和 Java 类型等属性。
  • 将FieldInfo对象添加到列表中。
  • 根据字段类型判断表中是否包含特定类型的字段,并设置相应的标志位在TableInfo对象中。
  • 将字段信息列表设置到TableInfo对象中。

3.在finally块中:关闭结果集和预处理语句,防止资源泄漏。

五、读取数据库表索引

在这里插入图片描述
这个方法用于获取指定表的关键索引信息,并将其存储在TableInfo对象中。它通过执行格式化后的show index from %s SQL 语句,遍历结果集,筛选出非唯一索引(non_unique值为 1 的被跳过),然后根据索引名和列名找到对应的FieldInfo对象,并将其添加到TableInfo对象的keyIndexMap中对应的索引列表中。最后返回一个包含索引相关FieldInfo的列表,但这个列表在方法中并没有被实际使用。

1.定义了一个PreparedStatement对象和一个ResultSet对象,用于执行 SQL 查询并获取结果集。
2.在try块中:

  • 使用给定的表名格式化 SQL 查询语句,准备并执行查询。
  • 遍历结果集,获取索引名、是否唯一、列名等信息。
  • 如果索引不是唯一索引,则跳过。
  • 根据索引名从TableInfo对象的keyIndexMap中获取对应的索引字段列表,如果不存在则创建一个新的列表并放入keyIndexMap。
  • 遍历表的字段信息列表,找到与当前索引列名匹配的FieldInfo对象,并添加到索引字段列表中。

3.在finally块中:关闭结果集和预处理语句,防止资源泄漏。

六、个人总结

这三条sql语句非常重要,是java代码生成工具的核心,所有关于表的操作都是基于这三句

show table status
show full fields from %s
show index from %s

1.show table status

  • 这个语句用于显示数据库中每个表的状态信息。
  • 它可以提供关于表的名称、引擎类型、行数、数据长度、索引长度、创建时间、更新时间等详细信息。这对于了解数据库中表的整体情况非常有用。

2.show full fields from %s

  • 这个语句用于显示指定表的所有字段的详细信息。
  • 通过格式化字符串中的占位符%s,可以在运行时指定具体的表名。
    它会返回字段名、字段类型、是否允许为空、默认值、额外的属性(如自增属性等)以及字段的注释等信息。

3.show index from %s

  • 这个语句用于显示指定表的索引信息。
  • 同样,通过占位符%s可以指定要查询的表名。它会返回索引的名称、索引类型(如主键索引、唯一索引、普通索引等)、包含的字段以及索引的其他属性。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值