序:
特点:基本上能够满足简单JavaBean的生成,可以通过配置文件的更改,灵活自动生成对应的bean。
缺点:
1.这里只是作为一个简单的例子,在实际应用当中仍需要更改具体的代码,以应对不同名称,不同包名的类,总言之就是配置方面还不够灵活。
2.对于配置资源文件的对应参数,虽然很方便,但并没有对其参数进行严格的格式指定,即没有对应的正则表达式对其获取的参数进行校验。因此使用时需较为注意。
正文:
下面直接切入正题:
前提是引入:freemark-xxxx.jar包
/*
Modification Log:
-----------------------------------------------------------------------------------
Version Notes By Date
------- -------------------------- ---------------------------------------
1.0 Create Techbirds 2012-12-13
-----------------------------------------------------------------------------------
*/
package main.classinfo;
/**
* 封装属性信息
*
*/
public class Attribute {
private String name;
private String type;
public Attribute() {
}
public Attribute(String name, String type) {
this.name = name;
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
/*
Modification Log:
-----------------------------------------------------------------------------------
Version Notes By Date
------- -------------------------- ---------------------------------------
1.0 Create Techbirds 2012-12-13
-----------------------------------------------------------------------------------
*/
package main.classinfo;
/**
* 封装类信息
*
*/
public class Class {
private String packagename;
private String classname;
private String[] imports;
public Class() {
}
public Class(String classname, String[] imports,String packagename) {
super();
this.classname = classname;
this.imports = imports;
this.packagename=packagename;
}
public String getClassname() {
return classname;
}
public void setClassname(String classname) {
this.classname = classname;
}
public String[] getImports() {
return imports;
}
public void setImports(String[] imports) {
this.imports = imports;
}
public String getPackagename() {
return packagename;
}
public void setPackagename(String packagename) {
this.packagename = packagename;
}
}
public class BeanByCreateMain {
private final static String TEMPLATE_NAME="template.ftl";
private Configuration cfg;
private Properties ploader;
/**
* 初始化工作
*/
public void init() throws Exception {
// 负责管理的实例创建+设置模板文件所在的目录
cfg = new Configuration();
// load资源的实例创建
ploader = new Properties();
cfg.setDirectoryForTemplateLoading(new File(
"E:\\Workspaces\\workspace\\javabean_complier\\bean_template"));
ploader.load(new FileInputStream(
"E:\\Workspaces\\workspace\\javabean_complier\\src\\bean.properties"));
}
public void process() throws IOException, TemplateException {
//1.load信息
Class clazz=loadClass();
List<Attribute> attributes=loadAttr();
//2.向root中放入模版中所需信息
Map<String, Object> root = new HashMap<String, Object>();
root.put("clazz",clazz);
root.put("attributes",attributes);
//3.将模版进行指定文件的输出
write(root);
}
/*
* 执行入口
*/
public static void main(String[] args) throws Exception {
BeanByCreateMain hfm = new BeanByCreateMain();
hfm.init();
hfm.process();
}
/*
* 加载类信息:包名,类名,import
*/
public Class loadClass() {
String packagename=ploader.getProperty("packagename");
String classname=ploader.getProperty("classname");
String values=ploader.getProperty("imports");
String[] imports=values.split(",");
Class clazz = new Class(classname, imports, packagename);
return clazz;
}
/*
* 加载属性:属性名,属性类型
*/
public List<Attribute> loadAttr() {
List<Attribute> attributes = new ArrayList<Attribute>();
String values=ploader.getProperty("attribute");
String[] strs=values.split(",");
for (String s : strs) {
String[] sp=s.split(":");
attributes.add(new Attribute(sp[0],sp[1]));
}
return attributes;
}
/*
* 将模版进行指定文件的输出
*/
public void write(Map<String, Object> root) throws IOException, TemplateException{
Template t = cfg.getTemplate(TEMPLATE_NAME);
OutputStream out = new FileOutputStream(
new File("E:\\Workspaces\\workspace\\javabean_complier\\src\\bean\\User.java"));
t.process(root, new OutputStreamWriter(out));
}
}
bean.properties资源文件
packagename=bean
classname=User
imports=java.util.ArrayList,java.util.List
attribute=name:String,age:int
template.ftl模版文件:
package ${clazz.packagename};
<#list clazz.imports as being>
import ${being};
</#list>
public class ${clazz.classname} {
<#list attributes as being>
private ${being.type} ${being.name};
public ${being.type} get${being.name?cap_first}() {
return ${being.name};
}
public void set${being.name?cap_first}(${being.type} ${being.name}) {
this.${being.name} = ${being.name};
}
</#list>
执行结果:
package bean;
import java.util.ArrayList;
import java.util.List;
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
分享到:
相关推荐
利用FreeMarker生成word文件例子
freemarker根据模版生成文件使用例子
给初学者一个简单的利用freemarker生成xml文件的例子
1.终于在这个版本中实现了模板化管理,采用freeMarker模板来生成代码, 真正实现了自定义代码模板; 2.理论上可以生成任何语言的任何所需要的模板; 3.更改了内部逆向工程的实现方式,提高效率和稳定性; 4.修正了...
Freemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+java
Java利用Freemarker模板自动生成dto、dao、rowmapper、bo、service代码,代码可以直接复制到项目中使用,代码是基于pring框架的
通过程序生成PDF文件, wkhtmltox-0.12.3.2_msvc2013-win64.exe html-url
利用freemarker 模板生成pdf ,利用easypoi 生成excel(带图片,水印,分页)
freemarker实现代码生成器详细教程
主要是利用freemarker根据数据库字段自动生成form表单以及dao层和service层的增删改查等功能
1.html模板+model数据,通过freemarker进行渲染,便于维护和修改 2.渲染后的html流,可通过Flying Saucer组件生成pdf文件流,或者生成pdf后再转成jpg文件流
Springboot项目中: 1. 使用Apache POI 3.9 自定义样式导出Excel文件...2. 使用freemarker动态生成word .doc文档(带图片Word以及复杂格式word) 详细说明见个人博客及 github: https://github.com/DuebassLei/excel-poi
本人最近在做word生成,网上找了很多,都有各种问题,懒得码字,粘贴了介绍,代码是自己的demo,本地服务器都没有什么问题,目前测试没有什么问题
代码生成器支持model、Mapper、Dao、Service、ServiceImpl、Controller 一次性的生成,支持同时生成多张表,此代码生成器依赖JAR包比较少,除了必用Freemarker 和JDBC之外基本上完全个人编写
java利用freemarker生成[归纳].pdf
java利用freemarker生成word.pdf
FreeMarker生成word,比较简单
freemarker html生成pdf 通过freemarker 和html模板生成对应的pdf或者图片 参考使用,欢迎下载
最近在做一个出卷系统,需要通过试卷模板从数据库中抽取题目,然后按照模板的样式生成完整的试卷,包括试卷格式的排版和图片的写入。这是用freemarker模板生成word文档。里面包括完整代码和所需jar包。
对于没有使用宏、函数等word、excel,需要按模板动态生成word、excel、html,只需要一个freemarker,先将word、excel、html等另存为**xml**,即可使用模板动态生成文件,目前xlsx是不支持的 4. PdfTemplate 对于不会...