• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

教你用Java实现一个简单的代码生成器

java 搞代码 4年前 (2022-01-05) 45次浏览 已收录 0个评论
文章目录[隐藏]

今天给大家带来的是关于Java的相关知识,文章围绕着如何用Java实现一个简单的代码生成器展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下

前言

逆向工程从数据库表直接生成代码,是日常开发中常用的敏捷开发手段,常见的例如:mybatis-plus的代码生成器等

为什么要自己写代码生成器呢?MP的生成器不香吗?香!

但是自己写的工具用起来最顺手,可以随意扩展,想怎么玩就怎么玩,只要自己有想法,玩出花来都没问题来源[email protected]搞@^&代*@码网,当然了,能力有限,现在还只能实现简单版本,更多骚操作自己发挥!

思路:

1、建立jdbc连接,执行查询sql,获取表结构信息。

2、在指定的路径上创建文件。

3、按照我们的布局排版要求,根据表结构信息拼接文件的内容。

4、将字符输出到文件中。

以上即可完成一个文件的自动生成

编码 

通用部分

几个内部工具类

file工具类:创建、读取文件

字符串工具类:驼峰标识、下划线互转,首字母大写,数据库字段类型转java类型等

jdbc连接:连接数据库

表注释、表结构信息实体类、执行sql获取表结构信息的方法

表结构信息

 private String columnName;//字段名 private String dataType;//字段类型 private String columnComment;//字段注释 private String columnKey;//主键 private String extra;//主键类型

mysql查询表注释、表字段信息使用的是

表字段信息

 SELECT column_name, data_type, column_comment, column_key, extra FROM information_schema.COLUMNS WHERE table_schema = ( SELECT DATABASE ()) AND table_name =?

表注释

 SELECT table_comment FROM information_schema.TABLES WHERE table_schema = ( SELECT DATABASE ()) AND table_name =?

需要支持其他数据库类型的,自己调整就好了,例如oracle获取表注释、表结构sql如下:

 -- 表、表注释 SELECT t.table_name, t1.comments FROM user_tables t JOIN user_tab_comments t1 ON t.table_name = t1.table_name; -- 表字段、字段注释 SELECT t.table_name, c.column_name, c.data_type, cc.comments FROM USER_TAB_COLUMNS c JOIN user_tables t ON c.table_name = t.table_name JOIN user_col_comments cc ON cc.table_name = t.table_name WHERE cc.column_name = c.column_name;

另外,数据连接、基础路径的配置也是一样

 /** * 数据连接相关,需要手动设置 */ private static final String URL = "jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&characterEncoding=utf-8"; private static final String USERNAME = "root"; private static final String PASSWORD = "123456"; private static final String DRIVER_CLASSNAME = "com.mysql.cj.jdbc.Driver"; /** * 基础路径,需要手动设置 */ private String basePackage = "cn\\huanzi\\qch\\baseadmin\\";//根包位置 private String filePackage = basePackage + "sys\\";//文件所在包位置

2.0版本多一个模板文件路径

 private String tlfPath = System.getProperty("user.dir") + "\\src\\main\\resources\\tlf\\";//模板文件位置

main函数也一样,调用构造参数,传入表名,调用入口函数

 public static void main(String[] args) { //        String[] tables = {"sys_user","sys_menu","sys_authority","sys_user_menu","sys_user_authority","sys_shortcut_menu","sys_setting"}; String[] tables = {"tb_user"}; for (String table : tables) { String msg = new AutoGenerator(table).create(); System.out.println(msg); } }

V1.0版本

AutoGenerator,1.0版本采用原始的在代码拼接字符串,然后创建文件将字符串输出的方法,比较原始但个人觉得可玩性较高

几个创建方法,就拿实体类来举例

 /** * 创建pojo实体类 */ private void createPojo(List tableInfos) { //创建文件 File file = FileUtil.createFile(filePath + "pojo\\" + StringUtil.captureName(StringUtil.camelCaseName(tableName)) + ".java"); //拼接文件内容 StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append( "package " + filePackage.replaceAll("\\\\", ".") + "pojo;\n" + "\n" + "import lombok.Data;\n" + "import javax.persistence.*;\n" + "import java.io.Serializable;\n" + "import java.util.Date;\n" + "\n" + "@Entity\n" + "@Table(name = \"" + tableName + "\")\n" + "@Data\n" + "public class " + StringUtil.captureName(StringUtil.camelCaseName(tableName)) + " implements Serializable {\n" ); //遍历设置属性 for (TableInfo tableInfo : tableInfos) { //主键 if ("PRI".equals(tableInfo.getColumnKey())) { stringBuffer.append("    @Id\n"); } //自增 if ("auto_increment".equals(tableInfo.getExtra())) { stringBuffer.append("    @GeneratedValue(strategy= GenerationType.IDENTITY)\n"); } stringBuffer.append("    private ").append(StringUtil.typeMapping(tableInfo.getDataType())).append(" ").append(StringUtil.camelCaseName(tableInfo.getColumnName())).append(";//").append(tableInfo.getColumnComment()).append("\n\n"); } stringBuffer.append("}"); //写入文件内容 FileUtil.fileWriter(file, stringBuffer); }

其他的也一样,无非就:创建文件、拼接文件内容、输出文件内容

入口函数,供main函数直接调用

 /** * 快速创建,供外部调用,调用之前先设置一下项目的基础路径 */ private String create() { System.out.println("生成路径位置:" + filePath); //获取表信息 List tableInfo = getTableInfo(); //开始生成代码 createPojo(tableInfo); createVo(tableInfo); createRepository(tableInfo)

以上就是教你用Java实现一个简单的代码生成器的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:教你用Java实现一个简单的代码生成器

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址