freemarker动态页面静态化模板

完成静态化的步骤:
            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 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 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 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 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};
	}
	
	
}

 

你可能感兴趣的:(java基础,cms)