ClouGence / hasor

Hasor是一套基于 Java 语言的开发框架,区别于其它框架的是 Hasor 有着自己一套完整的体系,同时还可以和先有技术体系做到完美融合。它包含:IoC/Aop容器框架、Web框架、Jdbc框架、RSF分布式RPC框架、DataQL引擎,等几块。
http://www.hasor.net
Apache License 2.0
983 stars 273 forks source link

返回字段的属性名 驼峰 命名转换 #15

Closed haowang21-hub closed 4 years ago

haowang21-hub commented 4 years ago

目前查询返回结果统一都是数据库字段名-下划线分割,比如goods_id,能否提供公共函数自动转换驼峰命名 如goods_id=>goodsId

zycgit commented 4 years ago

目前的形式可以通过 DataQL 自身的结果转换来实现。 类似 下面这样进行处理。

var data = ...
return data => [
    {
        "goodsId" : goods_id
    }
]

对于字段 key的批量转换,确实可以考虑如何优化。但实际上最容易引发问题的是,两个字段在驼峰转换之后重名的情况,例如这样的一个 map:

{
     "goodsId" : 123,
    "goods_id" : 321
}

对于这种潜在重名的问题,如果框架 在做一些默认行为。可能解释成本会更高把? 所以暂时我还没想到有什么好的解决办法。

haowang21-hub commented 4 years ago

{ "goodsId" : 123, "goods_id" : 321 } 这种情况应该还是比较少的,看能否通过全局可选配置做默认转换,或者添加公共函数手动调用

zycgit commented 4 years ago

函数手动调用,这个是可以的。

zycgit commented 4 years ago

等待 Dataway 出一个函数时间可能会长一些, 建议你自己可以先实现一个 UDF 函数。然后用过 自定义 UDF 函数来进行转换,入参,出参都是一个 Map 。最后 DataQL 代码层面是这样:

var data = ...
return data => [
    yourUDF(#)
]
zycgit commented 4 years ago

4.1.4 中可以通过下面两种方式实现驼峰转换。

方式一:

  1. hint = FRAGMENT_SQL_COLUMN_CASE = "hump" // 后面所有的 @@sql 定义的 SQL 执行结果列全部都做驼峰转换。

方式二:

  1. 引入 import 'net.hasor.dataql.fx.basic.CollectionUdfSource' as collect; 函数库。然后利用 collect.mapKeyToHumpCase( Map ) 函数来转换。

return data => [ collect.mapKeyToHumpCase(# )
]