前言:
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。
根据数据库指定的表,使用FreeMarker生成该表的VO.java类和sqlMap.xml
直接上代码:
要求:数据表字段用下划线分割单词,写清楚每个字段的注释
ColumnBeanVO
/**
* ColumnBeanVO
*
* @author zhangsonglin
* @version 2022/11/14 zhangsonglin
* @description 数据库转换实体VO
*/
public class ColumnBeanVO {
//成员变量类型
private String type;
//成员变量名称
private String name;
//注释
private String remarks;
//首字母大写
private String firstUpperName;
//字段(大写)
private String columnName;
//指定长度的字段大写,不足右侧补空格
private String columnNameWithLen;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRemarks() {
return remarks;
}
public void setRemarks(String remarks) {
this.remarks = remarks;
}
public String getFirstUpperName() {
return firstUpperName;
}
public void setFirstUpperName(String firstUpperName) {
this.firstUpperName = firstUpperName;
}
public String getColumnName() {
return columnName;
}
public void setColumnName(String columnName) {
this.columnName = columnName;
}
public String getColumnNameWithLen() {
return columnNameWithLen;
}
public void setColumnNameWithLen(String columnNameWithLen) {
this.columnNameWithLen = columnNameWithLen;
}
public ColumnBeanVO(String type, String name, String remarks, String firstUpperName, String columnName, String columnNameWithLen) {
this.type = type;
this.name = name;
this.remarks = remarks;
this.firstUpperName = firstUpperName;
this.columnName = columnName;
this.columnNameWithLen = columnNameWithLen;
}
public ColumnBeanVO() {
}
@Override
public String toString() {
return "ColumnBeanVO{" +
"type='" + type + '\'' +
", name='" + name + '\'' +
", remarks='" + remarks + '\'' +
", firstUpperName='" + firstUpperName + '\'' +
", columnName='" + columnName + '\'' +
", columnNameWithLen='" + columnNameWithLen + '\'' +
'}';
}
}
模板我们放到了:项目下的\resources\static\templates里
bean.ftl
实体VO.java的模板
package com.xxxx;
import com.alibaba.fastjson.JSONObject;
import java.util.Date;
public class ${className} implements Serializable {
private static final long serialVersionUID = 1L;
<#-- 循环类型及属性 -->
<#list attrs as attr>
//${attr.remarks}
private ${attr.type} ${attr.name};
</#list>
<#-- 循环生成set get方法 -->
<#list attrs as attr>
public void set${attr.firstUpperName}(${attr.type} ${attr.name}) {
this.${attr.name} = ${attr.name};
}
public ${attr.type} get${attr.firstUpperName}() {
return ${attr.name};
}
</#list>
@Override
public String toString() {
return JSONObject.toJSONString(this);
}
}
sqlMap.ftl
实现简单CRUD的sqlmap,需要复杂的也可以实现,再配置模板,传参
<?xml version="1.0&#