手写代码生成器。
今天给大家分享如何手写一个代码生成器。
·首先要清楚需要表的什么信息,比如需要一个表的名字对应类名,需要表的类名对应属性名ftl语法,需要列的类型对应属性类型,还有比如是否是主键需要列的注释来生成这样的注释。
·这些信息其实都可以从jdbc里面去获取,比如有这样的一段代码,通过这个方法就可以连接到数据库,拿到这样的连接,并且传入了一些属性值,在这个值里面额外添加这样的值可以获取到表的注释。
·通过这个连接就可以拿到元数据,比如在这边拿到表的信息, 在这边就可以打印表名以及表的备注信息。
·通过这个元信息还可以拿到列的信息,比如它的列名、列的类型还有列的对应的备注都可以在这边进行打印。
·当然还可以在这边拿到主键信息运行一下,这边就显示了表信息,比如库的表的备注,显示了列信息,比如ID、类型以及备注,这边还映射了主键信息,主键就是库的表的列。
·拿到这个信息该如何生成这样的pojo?也很简单,可以利用引擎去做这样的事情。比如这边写了一个的demo,首先构造了这样的对象,然后设置模板文件所在的路径,比如在d盘的目录下,然后在这边拿到目录下面的文件构造了这样的模板对象,通过模板对象调用这个方法传入了真实的数据,并最终输出到目录下面。
·这个数据传入了一个变量,它是name,value是蜗牛。可以看一下这个文件,它就是这样的标签,里面通过的语法,在这边写了一个占位符,相当于未来会把name的真实的值替换掉这样的变量。
·执行一下这个方法,执行之后就输出到目录里面,然后这边就拼接了一个蜗牛。
·当然也可以用模板引擎来生成这样的类,比如这边有一个pojo的ftl,这个里面就有很多信息,比如table name、table 、表名、pojo名。
·通过这样的一种语法判断这个列是否存在,这个列如果存在就遍历这个列,并且每一列都有注释,有注释就把它放到注释符后面,然后在这边还判断它是否是主键,如果是主键还拼接了这样的注解。
·这边拿到列对应的Java名字,然后拿到列对应的Java类型,拿到列对应的Java名字,这边就写了一个demo,生成user表对应的pojo。
·这边的方法跟刚才就是一样了,通过拿到对象设置了模板文件的目录,拿到对应的文件,然后构造了这样的对象,通过对象的方法传入了数据,并且输出到目录下。
·这个目录其实就是对应的目录,主要其实就是拼接参数,在这个里面拼凑参数,其实拿到表,通过这样的处理拿到了对应的pojo的名字,就放到map里面,拿到了时间,放到map里面。
·在这个里面比如表名是这个,表的注释是这个,往下翻看到这个还放了一个列的名字,这个列肯定是一个集合,可以看到在这边是一个list的集合,并且里面每一个对象就是map类型,在这边就构造每一个列的信息,比如构造了列名、列的类型、Java对应的类型、Java名字,然后get set方法,列的备注,是否是主见ftl语法,最终放到这个集合里面。
运行一下这个方法,生成完之后这个类就生成了,它就已经帮我们主动的替换掉了所有的信息。
再看-plus-的生成器,它的方式其实也是用的这样的方式。这个Demo我也会放到我的java高并发实战课程里面,如果你有兴趣,左下角可以了解一下。