先来看下一个普通的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是模板内容