Class MyBatisParamDirective

java.lang.Object
org.mybatis.scripting.freemarker.MyBatisParamDirective
All Implemented Interfaces:
freemarker.template.TemplateDirectiveModel, freemarker.template.TemplateModel

public class MyBatisParamDirective extends Object implements freemarker.template.TemplateDirectiveModel
Custom FreeMarker directive for generating "#{paramName}" declarations in convenient way. Problem is FreeMarker supports this syntax natively and there are no chance to disable this (although it is deprecated). And to get "#{paramName}" we should write ${r"#{paramName}"}. With this directive you can write more simple:

    <@p name="paramName"/>

Also directive supports `value` attribute. If it is specified, param will take passed value and create the corresponding #{}-parameter. This is useful in loops:

    <#list ids as id>
      <@p value=id/>
      <#if id_has_next>,</#if>
    </#list>

will be translated into

    #{_p0},#{_p1},#{_p2}

And MyBatis engine will convert it to `?`-params finally.

Author:
elwood
  • Field Details

    • DEFAULT_KEY

      public static String DEFAULT_KEY
    • DATABASE_ID_KEY

      public static String DATABASE_ID_KEY
  • Constructor Details

    • MyBatisParamDirective

      public MyBatisParamDirective()
  • Method Details

    • execute

      public void execute(freemarker.core.Environment env, Map params, freemarker.template.TemplateModel[] loopVars, freemarker.template.TemplateDirectiveBody body) throws freemarker.template.TemplateException, IOException
      Specified by:
      execute in interface freemarker.template.TemplateDirectiveModel
      Throws:
      freemarker.template.TemplateException
      IOException