【freemarker】【代码生成器的halloWorld】【数据模型的规则】

环境准备

导入包 freemarker.jar  (struts2自带)

代码生成器的halloWorld

案例:每个IXXXDAO都要继承于泛型dao接口,比如

package com.lwf.dao;  //包所在目录

import com.lwf.domain.Permission;  //引用的domain包

public interface IPermissionDAO extends IgenericDAO<Permission>{
}
1 . 创建模版文件夹,和IDAO的模版文件
//用${className} 代替Permission
package com.lwf.dao;

import com.lwf.domain.${className};

public interface I${className}DAO extends IgenericDAO<${className}>{

}

这里写图片描述

2 . 编写代码生成器的java代码
  • 目标=模版+数据模型,
  • 此处的路径,都是在项目的根目录下的路径
    public static void main(String[] args) throws Exception {
        //声明模版的目录
        Configuration cfg=new Configuration();
        File f = new File("src/main/java/codegen/template");
        cfg.setDirectoryForTemplateLoading(f);
        //获取模版对象
        Template template = cfg.getTemplate("IDAO.ftl");

        //创建数据模型对象
        Map<String,Object> map= new HashMap<>();
        map.put("className", "Brand");

        //生成代码
        File out=new File("src/main/java/com/lwf/dao/IBrandDAO.java");
        template.process(map, new FileWriter(out));

    }

之后会在src/main/java/com/lwf/dao中生成IBrandDAO.java的文件

package com.lwf.dao;

import com.lwf.domain.Brand;

public interface IBrandDAO extends IgenericDAO<Brand>{

}

数据模型的规则

1. 模板语言概念
- 插值:`${XX}`,在生成目标文件时候,根据数据模型,替换模版中的${XX}内容
- FTL标签: 逻辑语言,指令
- 注释:  <#-XXX->
- 标准本文,除了上面三个,其他原样输出. 
2. 插值的使用
  • 简单使用
    • 直接输出${userName},${user.userName}
    • 若不存在该userName,会报错.
    • 不存在user,会报错.
  • 处理不存在的插值

    • ${插值!”默认值”},若插值不存在,取默认值.
    • ${插值!”“},若插值不存在,就不写.
    • ${user.userName!”“} ,若user不存在,依然报错,仅代码最后一个可以为空
    • ${(user.userName)!”“},诺user不存在,就不写,不会报错
  • 对象中的方法

    • ${user.getName()};
  • 与el表达式不同点

    • el表达式可以访问简单值的在java中方法 如:${字符串.subString(1)}
    • freemarker,使用简单值的方法,是其内建的,不是java中的方法.
    • 复杂操作,尽量在后台完成.
  • freemarker的内建函数
    • 首字母大写 ${"green mouse"?cap_first} 结果:Green mouse
3. 指令的使用
  • 判断指令

    • <#if 条件1>结果1
      <#elseif 条件2>结果2
      <#else>其他结果</#if>
    • 条件语句为boolean表达式: <,>,==,!=,==null
  • 判断对象是否存在:

    • <#if user.name??> user.name存在就返回true,若user不存在,就报错.
    • <#if (user.name)??>任何一个层级不存在,就返回false .

这里写图片描述

  • 遍历指令
    • <#list 集合 as 元素>
        ${元素}
      </#list>

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值