先来看下一个普通的pojo类由哪几部分组成
因此,只要我们想办法获取到表结构的一些信息,然后把这些信息拼装成对应的java类信息即可.
就Mysql数据库来说,获取一个数据库中的表名的SQL是:SHOW TABLES
如图所示,这里我查询了autoCode自己的数据库
数据库表名获取到了,接着我们应该获取一张表里面的所有字段信息,mysql对应的SQL是:DESC 表名
如图所示,我们查询了datasource_config表的信息.其中字段名,字段类型,主键,自增都可以得到
我们只要把这些信息放在对应的java类里面就可以使用了.系统对应的是ColumnDefinition类
一个类代表一个字段的信息,因此所有字段的信息我们应该用List<ColumnDefinition>来保存
我们得到了表名以及字段信息,现在要做的是把这些信息放到velocity上下文中去
然后通过模板来来生成代码
private String doGenerator(SQLContext sqlContext,String template){ VelocityContext context = new VelocityContext(); context.put("context", sqlContext); context.put("table", sqlContext.getTableDefinition()); context.put("pkColumn", sqlContext.getTableDefinition().getPkColumn()); context.put("columns", sqlContext.getTableDefinition().getColumnDefinitions()); return VelocityUtil.generate(context, template); }
这里是GeneratorService类中的一个方法,SQLContext中存放了表名,字段信息
然后安装事先约定好的velocity语法生成内容.String template是模板内容