今天努力了一下午,终于弄出来生成xml接口文档了。这两天一直在重复干一件事,就是根据数据库的表结构,手写对应的xml文档。虽然eclipse有很方便的快捷键,但是重复的工作还是很多。特别是当字段很多时,就需要注意很多地方。于是今天下午就自己写了一个这样的程序。
原来的工作是这样子的:
根据下面表结构
手敲出对应的接口xml文件。这里面使用了freemarker语法。虽然可以使用alt+shift+a快速编写,但是还是很费时间。
于是今天做了一个这样的程序,用程序生成xml文件。结果如下。
虽说页面不咋地,但具体功能实现了。下面是实现过程,就是查出表结构,用freemarker生成。
controller代码:使用sql语句,查出表结构【sql server专用】
public void codeFactoryFinal(){
String tableName = "Project";
List<Record> list = Db.find("select * from information_schema.columns where table_name='"+tableName+"'");
setAttr("tableStruct",list);
setAttr("tableName", tableName);
System.out.println(list);
renderFreeMarker("codeFactoryFinal.html");
}
页面代码:使用freemarker语法生成
<?xml version="1.0" encoding="utf-8"?>
<list>
<#list tableStruct as vo>
<${tableName}>
<#noparse><#if </#noparse>${tableName}.${vo.COLUMN_NAME}<#noparse>?exists> </#noparse>
<${vo.COLUMN_NAME}>
<#noparse>${</#noparse>${tableName}.${vo.COLUMN_NAME}<#if vo.DATA_TYPE == 'bit'><#noparse>?string('true','false')</#noparse></#if><#noparse>}</#noparse>
</${vo.COLUMN_NAME}>
<#noparse></#if></#noparse>
</${tableName}>
</#list>
</list>
主要判断字段的值是否存在和是否为bit类型。当然也可以把tableName弄成可以输出进来的。
最后祝JFinal越来越火!
第二版:renderXml方法返回的。PS:晚上连不上服务器上的sql server数据库,用mysql数据库演示。
controller的代码:
public void renderDesc(){
List<Record> list = Db.find("desc blog");
setAttr("tableStruct", list);
setAttr("tableName", "blog");
renderXml("descTest.xml");
}
xml代码:xml输出需要用CDATA标记包裹才会正常输出的。
<?xml version="1.0" encoding="utf-8"?>
<list>
<#list tableStruct as vo>
<![CDATA[<${tableName}>
<#noparse><#if </#noparse>${tableName}.${vo.Field}<#noparse>?exists> </#noparse>
<${vo.Field}>
<#noparse>${</#noparse>${tableName}.${vo.Field}<#if vo.Type == 'bit'><#noparse>?string('true','false')</#noparse></#if><#noparse>}</#noparse>
</${vo.Field}>
<#noparse></#if></#noparse>
</${tableName}>]]>
</#list>
</list>
输出结果如下:多余的CDATA标记,替换掉即可。