如题, 要想书写格式化的sql 必须是多行的。 多行的字符串, 用 nodejs 书写有什么快捷的方式或工具。 一个个+号写过去, 实在太麻烦。
使用的编辑是vim, 有相关的快捷方式推荐更好了
没什么特别好的方法,一般对于长字符串有两种写法:
第一,用 \
换行,注意,这样做是不会在字符串中插入 \n
,最终结果将是 'Line 1Line 2Line 3'
。
sql = 'Line 1\
Line 2\
Line 3';
第二,用数组再 join,这样做性能会好一些,但写起来跟 +
一样蛋疼。
sql = [
'Line 1',
'Line 2',
'Line 3'
].join('');
P.S. 如果真的想要写的爽,建议尝试一下 coffeescript 的 string 语法,如果从 python 过来的人应该会很熟悉且很顺手吧。
sublime Package: JavaScript Multiline
可以参考这个
[
'select * from',
'table',
'where username =',
'username'
].join(' ')
把 SQL 语句写在一个外部文件中,然后再读取文件内容。有点类似于在前端渲染结构较复杂的 DOM 元素时,使用模板引擎来取代用 + 号拼接字符串的方式。
我也提供下现在采用的方案:
使用一个orm, 这个orm的特点如下:
1. 完全不支持复杂表连接
2. 极高的缓存命中率
说明:大部分应用中使用的sql
复杂度不高, 即使个别需要表连接的也完全可以拆分成两条sql。咋看可能增加了代码量,但这样做避免了复杂sql
带来的高负载,同时拆分成简单sql
能够很好的提升缓存命中率。
可能回答牛头不对马嘴,只是分享这个思路,目前在应用开发中没写过
sql
,全是通过orm
function a() {
/*
select *
from youtable
where 1 <> 0
*/
}
function getString(f) {
return f.toString().replace(/^function[^/*]*?\/\*|\*\/[^*/]*\}$/g, "")
}
getString(a)
结果(引号仅用于表示起始位置)
"
select *
from youtable
where 1 <> 0
"