velocity模板引擎语法
最近,脚手架和代码生成器比较火。mybatis-plus,mybatis-generator,gun,码云上也有很多项目有这个功能.最近我根据公司的编程习惯以及微服务框架,为我们公司定制化了一个代码生成器,采用的是velocity模板引擎(当然模板引擎有多种,如freemarker等,可以按需选择哈)。 下面总结一下velocity的常用语法:比如有一个JSONObject...
最近,脚手架和代码生成器比较火。mybatis-plus,mybatis-generator,gun,码云上也有很多项目有这个功能.
最近我根据公司的编程习惯以及微服务框架,为我们公司定制化了一个代码生成器,采用的是velocity模板引擎(当然模板引擎有多种,如freemarker等,可以按需选择哈)。
下面总结一下velocity的常用语法:
比如有一个JSONObject parameter,它的值为:
{
"a": true,
"b": "test",
"c": 123,
"d": {
"e": ["试一下", "test", "demo"],
"f": "哈哈哈"
}
}
1、${变量名} 或 $变量名,有赋值时输出对应的值,没赋值则输出“${变量名} ”或 “$变量名” 。
${parameter.d.f}的输出结果就是:"哈哈哈";
${parameter.d.g}的输出结果就是:"${parameter.d.g}",为什么呢,因为没有这个属性哈。
2、$!{变量名}
没有这个属性就输出为空,$!{parameter.d.g}的输出结果就是:""。
3、#[[${变量名}]]#
原生代码中刚好有一个${parameter.a}与模板变量冲突了怎么办?这时候就将代码中的${parameter.a}写成#[[${parameter.a}]]#,这样无论怎样最终输出的结果都是:${parameter.a}。
这种方法还能解决前端语法和 velocity语法的冲突。
4、逻辑判断(温馨提示:注意闭环)
#if(logic expression)
…(content)
#else if(logic expression)
…(content)
#else
…(content)
#end
逻辑表达式中支持常用的&&,||,!,(),== 等。
5、循环(温馨提示:注意闭环)
#foreach(logic expression)
…(content)
#end
当前循环到第几个:$foreach.count(网上也有说用${velocityCount}),从1开始不是从0开始。
集合大小:${parameter.d.e.size()}
获取集合中的某个值:${parameter.d.e.get(2)
ps:这个我试了一下,好像只对List类型有效,set类型只能老老实实循环(当然你要是找到了它的获取方法,可以留言告诉我哈)
6、#set
定义中间变量 比如在某种情况下,你需要取出某个循环的下标,#set($i = ${foreach.count} - 1)
温馨提示:上面的表达式“-1“减后前后都得有空格(这个真心比较恶心哈,但也木有办法)。
示例:Model.java.vm (至于对象cfg的数据结构就不贴了哈)
package ${cfg.filePath.modelPackagePath};
#foreach( $javaImport in ${cfg.tableInfo.javaImport})
import $javaImport;
#end
import java.io.Serializable;
#if(${cfg.lombok})
import lombok.Data;
#end
/**
#if(${cfg.tableInfo.tableComment}!="")
* <p>
* ${cfg.tableInfo.tableComment}
* </p>
#end
* @author ${cfg.author}
* @since ${cfg.date}
*/
#if(${cfg.lombok})
@Data
@ToString
#end
public class ${cfg.tableInfo.className} implements Serializable {
private static final long serialVersionUID=1L;
#foreach( $columnInfo in ${cfg.tableInfo.columnInfoList})
#if($columnInfo.columnComment&&$columnInfo.columnComment!="")
/**
* $columnInfo.columnComment
*/
#end
private $columnInfo.javaType $columnInfo.javaName;
#end
#if(!${cfg.lombok})
#foreach( $columnInfo in ${cfg.tableInfo.columnInfoList})
public void set${columnInfo.javaName1}($columnInfo.javaType $columnInfo.javaName){
this.${columnInfo.javaName}=$columnInfo.javaName;
}
public $columnInfo.javaType get${columnInfo.javaName1}(){
return $columnInfo.javaName;
}
#end
#end
#if(!${cfg.lombok})
@Override
public String toString() {
return "${cfg.tableInfo.className}{" +
#foreach( $columnInfo in ${cfg.tableInfo.columnInfoList})
#if($foreach.count==1)
#if(${columnInfo.javaType}=="byte[]")
"${columnInfo.javaName}=" + Arrays.toString(${columnInfo.javaName}) +
#else
"${columnInfo.javaName}=" + ${columnInfo.javaName} +
#end
#else
#if(${columnInfo.javaType}=="byte[]")
",${columnInfo.javaName}=" + Arrays.toString(${columnInfo.javaName}) +
#else
",${columnInfo.javaName}=" + ${columnInfo.javaName} +
#end
#end
#end
"}";
}
#end
}
更多推荐
所有评论(0)