java代码读取xml文件,并用freemarker模版引擎生成sql建表语句
时间: 2023-07-05 17:20:40 浏览: 178
java读取xml文件导入到mysql数据库中
5星 · 资源好评率100%
以下是一个示例代码,通过Java代码读取XML文件并使用Freemarker模板引擎生成SQL建表语句:
```java
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
import java.io.FileWriter;
import java.util.HashMap;
import java.util.Map;
public class XmlToSqlWithFreemarker {
public static void main(String[] args) throws Exception {
// 读取XML文件
File inputFile = new File("input.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
Document doc = dbFactory.newDocumentBuilder().parse(inputFile);
doc.getDocumentElement().normalize();
// 获取所有"table"节点
NodeList tableList = doc.getElementsByTagName("table");
// 遍历"table"节点
for (int i = 0; i < tableList.getLength(); i++) {
Element tableElement = (Element) tableList.item(i);
// 获取表名
String tableName = tableElement.getAttribute("name");
// 设置Freemarker的配置
Configuration configuration = new Configuration(Configuration.VERSION_2_3_30);
configuration.setClassForTemplateLoading(XmlToSqlWithFreemarker.class, "/templates");
// 创建模板
Template template = configuration.getTemplate("table.ftl");
// 设置模板数据
Map<String, Object> dataModel = new HashMap<>();
dataModel.put("tableName", tableName);
dataModel.put("columns", tableElement.getElementsByTagName("column"));
// 渲染模板
FileWriter writer = new FileWriter(tableName + ".sql");
template.process(dataModel, writer);
writer.close();
}
}
}
```
上面代码中使用了一个名为"table.ftl"的Freemarker模板,模板内容如下:
```sql
CREATE TABLE ${tableName} (
<#list columns as column>
${column.getAttribute("name")} ${column.getAttribute("type")}<#if column_has_next>,</#if>
</#list>
);
```
运行上面的Java代码,将会生成两个SQL建表语句文件:"users.sql"和"posts.sql"。其中,"users.sql"的内容如下:
```sql
CREATE TABLE users (
id INT,
name VARCHAR(50),
email VARCHAR(50)
);
```
"posts.sql"的内容如下:
```sql
CREATE TABLE posts (
id INT,
title VARCHAR(50),
content TEXT
);
```
这就是通过Java代码读取XML文件,并使用Freemarker模板引擎生成SQL建表语句的过程。
阅读全文