一个号称比 FizzBuzzWhizz 更有意思的题目

黄勇 发布于 2014/05/16 11:48
阅读 348
收藏 0

这是一个 SQL 语句的转换器,仅用于对 where 部分的条件表达式进行转换。

例如:

转换前:fizzBuzz = '1' and (buzzWhizz = '2' or fizzWhizz = '3')

转换后:fizz_buzz = '1' and (buzz_whizz = '2' or fizz_whizz = '3')

转换规则:将字段名由“驼峰式”转换为“下划线式”,程序中最好能提供灵活的规则配置。

注意:

  1. 操作符不限于与“=”,需要考虑到 SQL 的所有操作符,包括 like、between 等。
  2. 需要考虑到灵活的括号优先级问题。
  3. 操作数不限于常量,也包括“?”占位符。
这不是一道面试题,而是一个非常实际的需求,请大家提供解决方案,优胜者有惊喜奉献!
加载中
0
黄勇
黄勇

我们团队里有位小伙伴是这样实现的:

...
        Conditions conditions = new Conditions()
            .append("fizzBuzz", "=", "1")
            .and()
            .left()
            .append("buzzWhizz", "=", "2")
            .or()
            .append("fizzWhizz", "=", "3")
            .right();
        System.out.println(conditions.toString());
...

他定义了一个 Conditions 类,将表达式拆分成三部分:字段名、操作符、字段值。

通过链式方法构造 Conditions 对象,通过 toString 方法转为最终的字符串。

返回顶部
顶部