golang-gosql 发布新版 v0.1.3,一款轻量级 Golang 操作 MySQL 的类库
v0.1.3 版本更新:
- 修复一个排序bug
- 调整优化实现,减少内部复杂度
gosql 是一款开源的 操作mysql类库, 支持用golang方式书写复杂sql。
- 特有的风格写法
- 支持嵌套的复杂sql
- 支持读写分离
- 支持延时链接
- 结构映射
- 事务支持
- 多数据库实例
- 用例即文档
- 条件插件机制
代码方便,实现 87% 的测试覆盖 试图提供优质的代码供开发者使用
其sql 构建库可单独使用 实现自行构建复杂sql
如:
s := gosql.NewSQLSegment() s.Flag("DISTINCT") s.Field("*") s.Table("tbl1.t1") s.Where("t1.status", "0") s.Where("name", "jack") s.Where("[!=]nick", "tom") s.Where("[in]role1", []string{"1", "2", "3", "4"}) s.Where("[!in]role2", []string{"1", "2", "3", "4"}) s.Where("[in]card1", 1) s.Where("[!in]card2", 1) s.Where(func(s *Clause) { s.Where("[>]age", "20") s.Where("[<]", "50") }) s.Where("v1 = 1") s.Where("[#]v2 = ?", 2) s.Join("tbl3", "a", "=", "b") s.Having("class", "one") s.Where("[~]desc", "student") s.Where("[!~]desc", "teacher") s.Where("[exists]my_card", "select 1") s.Where("[!exists]my_card2", func(s *SQLSegments) { s.Table("tbl2.t2") s.Where("t2.id", 10000) }) s.GroupBy("class","group") s.OrderBy("score desc", "name asc","age") s.Limit(30) s.Offset(10) s.ForUpdate() fmt.Println(s.BuildSelect())
构建出如下sql:
SELECT DISTINCT * FROM `tbl1`.`t1` JOIN `tbl3` ON `a` = `b` WHERE (`t1`.`status` = ? AND `name` = ? AND `nick` != ? AND `role1` IN (?, ?, ?, ?) AND `role2` NOT IN (?, ?, ?, ?) AND `card1` IN (?) AND `card2` NOT IN (?) AND (`age` > ? AND `age` < ?) AND v1 = 1 AND v2 = ? AND `desc` LIKE ? AND `desc` NOT LIKE ? AND EXISTS ( SELECT 1 ) AND NOT EXISTS ( SELECT * FROM `tbl2`.`t2` WHERE `t2`.`id` = ? )) GROUP BY `class`, `group` HAVING `class` = ? ORDER BY `score` DESC, `name` ASC, `age` LIMIT 10, 30 FOR UPDATE
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
DECODE 函数和 CASE-WHEN 表达式的比较
在 SQL中我们通常认为以下两种写法是等价的: DECODE(PARAM, VALUE1, RESULT1, [VALUE2, RESULT2, ...]DEFAULT_RESULT) CASE PARAM WHENVALUE1 THEN RESULT1 [WHENVALUE2THEN RESULT2...]ELSEDEFAULT_RESULT END 虽然一个叫函数,一个叫表达式,但实际上二者都在行为上都很像 IF-ELSIF-ELSE 流程控制语句,会按书写顺序执行判断,遇到符合条件的情况则返回相应的值,后面的情况涉及到的语句不会被执行(例如开销较大的函数); 都可以省略默认值的(CASE省略默认值的方式是不写 ELSE子句),如果省略默认值但又未找到匹配则返回 NULL; 都可以在 SQL中任何需要“值”的地方使用; 实际上 DECODE和 CASE-WHEN 还是有一些差别的,我把自己知道的列在了下面,欢迎读者补充! DECODE CASE-WHEN 适用数据库 Oracle专属 SQL标准 可用于 PL/SQL 否 是 特殊匹配逻辑 NULL可与NULL 匹配 (通常情况下...
- 下一篇
goproxy-android v1.3 发布,打造全能的安卓代理服务
goproxy-android 是全能代理服务器snail007/goproxy安卓版。高性能的 http 代理、https 代理、socks5 代理、ss 代理、内网穿透、内网穿透 p2p、内网穿透代理、内网穿透反向代理、内网穿透服务器、游戏代理,支持 API 代理认证,TCP/UDP 端口映射、SSH 中转、TLS 加密传输、协议转换、防污染 DNS 代理,限速,限连接数。 更新内容: UI简化。 增加同时启动多个服务。 sdk更新至10.0。 运行截图
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS关闭SELinux安全模块
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8编译安装MySQL8.0.19