完成静态化的步骤:
1.导入jar包:freemarker.jar
2.创建一个配置对象 1.传递一个版本
3.设置模板加载路径
4设置一个模板编码
5.获取一个模板对象
6获取一个数据
7生成文件
一。再执行下面的代码的时候,你需要先有一张数据库的表
package cn.fr.itsource.cms.freemarker;
import static org.junit.Assert.*;
import java.io.File;
import java.io.FileWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import freemarker.template.Configuration;
import freemarker.template.Template;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class CreateDomainTest {
@Autowired
private DataSource dataSsource;
//增加代码扩展性:数据库表名
String tableName = "t_address";
//生成的模板名
String className = "Address";
@Test
public void testCreate() throws Exception {
/** 一. 拿到数据库里面的数据 */
//1.拿到数据库链接对象
Connection connection = dataSsource.getConnection();
//2.查询数据库里的数据
PreparedStatement ps = connection.prepareStatement("select * from "+tableName);
//3.拿到查询的结果集
ResultSet executeQuery = ps.executeQuery();
//4.根据结果集拿到表单的源数据
ResultSetMetaData metaData = executeQuery.getMetaData();
//5.根据 表单的源数据 拿到字段的数量
int columnCount = metaData.getColumnCount();
//7.准备一个arrylist集合,并把map集合装进arrylist里面
ArrayList<Map> arrayList = new ArrayList<>();
//6.根据表单的字段数量,循环拿到每个字段的对象
for (int i = 1; i <= columnCount; i++) {//字段的计数从1开始,从0开始要报错
//6.1 拿到表单 源数据的 数据类型,replaceFirst(参1,参2):参2替换参1的值
String type = metaData.getColumnClassName(i).replaceFirst("java.lang.","");
//6.2 拿到表单 源数据的 字段名称
String name = metaData.getColumnName(i);
//6.3 把字段的第一个字母变成大小字母
//substring(0, 1):截取第一个字符,toUpperCase:变为大小字母,substring(1):截取第一个字符后的所有内容
String subName = name.substring(0, 1).toUpperCase() + name.substring(1);
//8.准备一个map集合,把获取到的数据装进map集合里面
HashMap<String, Object> hashMap = new HashMap<>();
//8.1 每次map循环,map获得表单的1行的所有数据
hashMap.put("type", type);
hashMap.put("name", name);
hashMap.put("subName", subName);
//把map封装进list集合里面
arrayList.add(hashMap);
}
/** 二. 准备模板技术 */
//1.配置对象(添加版本号)
Configuration cfg = new Configuration(Configuration.VERSION_2_3_28);
//2.配置路径
String path = "E:/Eclipse/JavaEcode/cms/src/main/webapp/template";
cfg.setDirectoryForTemplateLoading(new File(path));
//3.配置编码
cfg.setDefaultEncoding("UTF-8");
//4.创建模板
Template template = cfg.getTemplate("domain.java");
//5.准备数据
Map<String, Object> hashMap = new HashMap<>();
hashMap.put("className", className);
hashMap.put("arrayList", arrayList);
//6.生成模板
//6.1创建一个新的文件
File file = new File(path, className+".java");
//6.2创建输出流
FileWriter fileWriter = new FileWriter(file);
//6.3生成模板
template.process(hashMap,fileWriter);
//刷新流
fileWriter.flush();
}
}
二。模板domain.java
package cn.fr.itsource.cms.domain;
public class ${className} {
<#list arrayList as list>
private ${list.type} ${list.name} ;
</#list>
<#list arrayList as list>
public ${list.type} get${list.subName}() {
return ${list.name};
}
public void set${list.subName}(${list.type} ${list.name}) {
this.${list.name} = ${list.name};
}
</#list>
}