想写个灵活拼接sql语句的函数,把select
,from
,where
,group by
,order by
,limit这些都作为参数传递。但是如果每一个都作为独立的参数传递,调用函数的时候,就会受到参数顺序的限制,简单的sql也可能写好几个无用空参数。
如果要是通过构造一个对象来传递所有参数,参数列表短了,也不受顺序限制了,但是每次调用函数前又都要构造对象,也挺麻烦,感觉用起来不自然。有什么好的方法解决吗?
过长的函数拼接可读性差,也就是说,代码没有表达性。
给一个DSL的传送门,很可以没有对应中文版 http://en.wikipedia.org/wiki/Domain-s...
如果你不喜欢面对对象的语法:
query().from("user")
.where(
(user.firstName.like("Bob")).or(user.firstName.like("Ann")))
.orderBy(user.firstName.asc())
.list(user);
面向对象语法:
InsertSQL sql = new InsertSQL();
sql.insertInto("students")
.value("id", new Integer(id))
.value("name", name)
.value("gender", gender);
最后赠送你一个我以前用过的DSL
/**
* 配置路由规则
*/
RouteBuilder builder = new RouteBuilder() {
public void configure() {
from("/user").filter(header("language").isEqualTo("zh")).to("/zh/user");
from("/user/edit/3").choice()
.when(header("foo").isEqualTo("bar")).to("queue:d")
.when(header("foo").isEqualTo("cheese")).to("queue:e")
.otherwise().to("queue:f");
}
};
具有表达性的代码是:做什么,而不是怎么做。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
你好,我是AI助理
可以解答问题、推荐解决方案等
评论
全部评论 (0)