Closed chenbaiyu0414 closed 5 years ago
过长的sql语句还是建议用NamedQuery自己来写,因为如果你用map[string]interface{}来描述太长的sql语句,你作为用户几乎不太可能能确信gendry最终帮你生成的sql语句是什么。NamedQuery可以在任何时候使用,NamedQuery("select * from table_foo where age > {{age}} and MATCH(col_bar) AGAINST({{keyword}} IN BOOLEAN MODE)", map[string]interface{}{"age":5,"keyword":"xxx"})
这种并不比map[string]interface{}写起来更复杂吧?
我认为map[string]interface{}适合用来描述简单的、可以用and连接起来的sql语句,剩下的还是建议使用namedquery
在某些场景下,要根据条件的不同在SQL里and上不同的语句,这个时候NameQuery
里的SQL可能还是需要大量的进行手动拼接,而当这种需求和较长的sql语句撞车,就只有求助于手动拼接SQL了,gendry无法解决
我理解你的需求了,你最终的sql语句可能需要根据上下文才能确定要哪些where条件,但是又是一个比较复杂的语句对吧。我们会认真考虑要不要做上这个功能,但是目前你还是只能先用NamedQuery手动拼接一下。等我们确定好了开发计划,会reopen这个issue
目前对于
map[string]interface{}
类型的条件拼接我觉得很不错,但是在有些需求上还不能完全满足,希望可以添加。比如在比较高版本的mysql上已经支持在innodb引擎中建立全文索引,而对应的查询语句则类似于
SELECT * FROM table1 WHERE MATCH(somecolumns) AGAINST('keyword' IN BOOLEAN MODE) AND someCondition
在这里语句中可能需要将参数使用插值的方式插入到条件中去,而目前的SQL拼接的where map结构中还不支持以下这种方式
由于还同时可能存在其他的普通的where条件,例如
>, =
等等,无法完全使用NamedQuery
代替,所以希望能加入类似原生的sql.DB
中查询语句可以使用以?
为标记的插值参数的条件的支持如果添加了以上需求,在构造查询条件时,类似
的条件语句可能会更加的容易理解