Gdao v1.2.0:Go 语言高效 ORM 框架
gdao是一个全面的go持久层解决方案。主要目的在于 减少编程量,提高生产力,提高性能,支持多数据源整合操作,支持数据读写分离,制定持久层编程规范。 灵活运用 gdao,可以在持久层设计上,减少30%甚至50%以上的编程量,同时形成持久层的统一编程规范,减少持久层错误,同时易于维护和扩展。 gdao对于go语言,相当于 hibernate+ myBatis对于java语言
gdao完整地在go语言中实现 myBatis的核心功能,实现SQL与程序分离,实现强大的动态SQL功能
GitHub : Gdao Repository
示例程序: Gdaodemo
使用文档: Gdaodoc
同类型框架性能压测 对比
性能压测数据:《Gdao—orm框架性能压测 gdao+gorm+sqlx+原生sql执行》
特点
- 规范性:用标准化结构体统一映射表增删改查操作
- 高效性:比直接调用驱动执行SQL的性能更高
- 丰富动态SQL支持:在go语言上实现了myBatis 映射核心功能
- 实用性:支持读写分离,数据缓存等高级orm功能,支持高效序列化
主要功能
- 生成代码:运行gdao代码生成工具,创建数据库表的标准化实体类。类似thrift/protobuf。
- 高效序列化:表的标准化实体类实现了高效的序列化与反序列化。性能更高,数据体积更小。
- 读写分离:gdao支持绑定多个备库数据源,并对绑定的表或SQL实现数据读写分离
- 数据缓存:gdao支持数据缓存,并支持对缓存数据时效,与数据回收等特性进行细致控制
- 广泛兼容性:gdao理论上支持所有实现 go 数据库驱动接口的数据库
- 高级特性:支持事务,存储过程,批处理等数据库操作
- 动态SQL:gdao实现丰富的动态SQL构建功能。支持动态SQL标签映射构建与原生SQL动态构建等多种模式。
- myBatis特性:Gdao的映射模块是myBatis在go上的实现。也是所知的go orm中,唯一支持SQL与程序分离的orm。
快速入门
1. 安装
go get github.com/donnie4w/gdao
2. 配置数据源
gdao.Init(mysqldb,gdao.MYSQL) //gdao初始化数据源 mysqldb 为sql.DB对象 , gdao.MYSQL 为数据库类型
3. 标准化结构体操作
// 读取 hs := dao.NewHstest() hs.Where(hs.Id.EQ(10)) h, err := hs.Select(hs.Id, hs.Value, hs.Rowname) //[DEBUG][SELETE ONE][ select id,value,rowname from hstest where id=?][10]
// 更新 hs := dao.NewHstest() hs.SetRowname("hello10") hs.Where(hs.Id.EQ(10)) hs.Update() //[DEBUG][UPDATE][update hstest set rowname=? where id=?][hello10 10]
// 删除 hs := dao.NewHstest() hs.Where(hs.Id.EQ(10)) hs.delete() //[DEBUG][UPDATE][delete from hstest where id=?][10]
//新增 hs := dao.NewHstest() hs.SetValue("hello123") hs.SetLevel(12345) hs.SetBody([]byte("hello")) hs.SetRowname("hello1234") hs.SetUpdatetime(time.Now()) hs.Insert() //[DEBUG][INSERT][insert into hstest(floa,age,value,level,body,rowname,updatetime )values(?,?,?,?,?)][hello123 12345 hello hello1234 2024-07-17 19:36:44]
4. 原生SQL操作
//查询,返回单条 gdao是原生SQL操作入口 gdao.ExecuteQueryBean("select id,value,rowname from hstest where id=?", 10) //insert gdao.ExecuteUpdate("insert into hstest2(rowname,value) values(?,?)", "helloWorld", "123456789"); //update gdao.ExecuteUpdate("update hstest set value=? where id=1", "hello"); //delete gdao.ExecuteUpdate("delete from hstest where id = ?", 1);
5. 配置缓存
//绑定Hstest 启用缓存, 缓存默认时效为300秒, gdaoCache为缓存操作入口 gdaoCache.BindClass[dao.Hstest]()
6. 读写分离
mysqldb := getDataSource("mysql.json") // 获取备库数据源:mysqldb gdaoSlave.BindClass[dao.Hstest](mysqldb, gdao.MYSQL) //这里主数据库为sqlite,备数据库为mysql,Hstest读取数据源为mysql, gdaoSlave为读写分离操作入口
7. SQL映射
<!-- MyBatis 风格的 XML 配置文件 --> <mapper namespace="user"> <select id="selectHstest1" parameterType="int64" resultType="hstest1"> SELECT * FROM hstest1 order by id desc limit #{limit} </select> </mapper>
//读取解析xml配置 hs1, _ := gdaoMapper.Select[dao.Hstest1]("user.selectHstest1", 1) fmt.Println(hs1)
8. 动态SQL映射
<!-- where if --> <select id="demo1" resultType="Hstest"> SELECT * FROM hstest <where> <if test="rowname== 'hello'"> and rowname = #{rowname} </if> <if test="id >0"> AND id = #{id} </if> </where> </select>
hs := dao.NewHstest() hs.SetId(12) gdaoMapper.SelectBean("dynamic.demo1", hs) //执行映射id [SELECT * FROM hstest WHERE id = ?]ARGS[12]
9. SqlBuilder 动态SQL
func Test_sqlBuilder_if(t *testing.T) { context := map[string]any{"id": 12} builder := &SqlBuilder{} builder.Append("SELECT * FROM hstest where 1=1"). AppendIf("id>0", context, "and id=?", context["id"]) //动态SQL,当id>0时,动态添加 and id=? bean := builder.SelectOne() //查询SQL: SELECT * FROM hstest where 1=1 and id=? [ARGS][12] logger.Debug(bean) }

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
脚本语言 Tcl 与 Python 使用的那个 GUI 包 Tk 发布 9.0 版本,上一次大版 8.0 发布于 1997 年
Tcl/Tk 9.0 已经发布,它具有许多新功能,但与 Tcl/Tk 8 存在一些不兼容性。 Tcl(最早称为 “工具命令语言”"Tool Command Language",但是目前已经不是这个含义,不过我们仍然称呼它为 TCL)是一种 脚本语言。由John Ousterhout创建。 TCL 很好学,功能很强大。TCL 经常被用于快速原型开发,脚本编程,GUI 和测试等方面。TCL 念作 “踢叩”(tickle)。 使用最广泛的 TCL 扩展是 Tk,Tk 提供了各种 OS 平台下的图形用户界面 GUI。连强大的 Python 语言都不单独提供自己的 GUI,而是提供接口适配到 Tk 上。是的,Python 上用的那个 Tk。 下载 Tcl/Tk 9.0.0 源代码 Tcl 9.0 的亮点 64位容量:数据值大于2Gb Unicode 和编码:完整的代码点范围、添加的编码、用于管理 I/O 的编码配置文件等。 Zip 文件系统:将 zip 文件挂载为文件系统 附加档案:启用 starkit 样式的应用程序部署,将文件系统档案中的支持数据附加到可执行文件或库。构建 tclsh 并按此...
- 下一篇
《灯灯》多租户快速开发平台 4.22.0 预览版发布,单体版和微服务版融合
java17_dev 分支升级以下内容: feat: 新增lamp-sa-token-ext模块,重新实现 sa-token 的SaRequestForServlet fix: 修复跨服务调用接口时,传递的请求头Token无法被sa-token解析的问题 refactor: uri鉴权时,查询系统所有的URI接口缓存至redis refactor:lamp-cloud-pro-datasource-column 和 lamp-boot-pro-datasource-column项目合并为一个工程,实现1个工程同时支持单体版和微服务版,项目源代码存放于lamp-cloud-pro-datasource-column项目的java17_dev分支,项目依赖关系如下图: refactor: 原来的api层变更为facade层,以方便适配单体版或微服务版 facade层包含3层:lamp-xx-api、lamp-xx-boot-impl、lamp-xx-cloud-impl api层用于定义接口,boot-impl层用于单体版实现api层接口,cloud-impl层用于微服务版实现api层接口...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS6,CentOS7官方镜像安装Oracle11G
- Mario游戏-低调大师作品
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果