ScriptTransformer可能由java支持的JavaScript语言或者其他脚本语言写成的转换器.只支持Java 6以上版本.
例1:
<dataConfig> <script><![CDATA[ function f1(row) { row.put('message', 'Hello World!'); return row; } ]]></script> <document> <entity name="e" pk="id" transformer="script:f1" query="select * from X"> .... </entity> </document> </dataConfig>
例2:
<dataConfig> <script><![CDATA[ function CategoryPieces(row) { var pieces = row.get('category').split('/'); var arr = new java.util.ArrayList(); for (var i=0; i<pieces.length; i++) { arr.add(pieces[i]); } row.put('categorypieces', arr); row.remove('category'); return row; } ]]></script> <document> <entity name="e" pk="id" transformer="script:CategoryPieces" query="select * from X"> .... </entity> </document> </dataConfig>
例3:
<script><![CDATA[ id = 1; function GenerateId(row) { row.put('id', (id ++).toFixed()); return row; } function WipOffHtml(row) { var file = row.get('file'); row.put('file',file.substr(0,file.indexOf('.'))); return row; } ]]> </script>
- 脚本标签放置在dataConfig节点里边, 默认情况下,该语言被认为是使用Javascript.如果想要使用其他语言,在script标签中指定属性language="MyLanguage".必须支持jdk1.6以上
- 可以写你想要使用的尽可能多的transformer 函数.每个函数都必须接收row变量,对应于Map<String, Object> .并且返回row结果集.
- 使用row.remove(keyname)删除条目.
- 使用var arr = new java.util.ArrayList()为单个字段添加多个条目,不能使用JavaScript数组.
- 文档为Java Map对象
- 文档为Java ArrayList对象
- 通过在实体中指定transformer="script:<function-name>",来使用函数生成条目.
- 在上面的data-config中,实体e返回的每一个row都会执行一个f1函数.
- 执行语法和java变压器一样,在抽象类Transformer中,transformRow(Map<String,Object> , Context context)中有两个参数,因为它是JavaScript的第二个参数,可以omittted,它仍然有效。
不当之处,敬请指正 ! 谢谢!