简介:gdao是一种创新的持久层解决方案。主要目的在于 减少编程量,提高生产力,提高性能,支持多数据源整合操作,支持数据读写分离,制定持久层编程规范。 灵活运用gdao,可以在持久层设计上,减少30%甚至50%以上的编程量,同时形成持久层的统一编程规范,减少持久层错误,同时易于维护和扩展。
gdao对于go语言,相当于 hibernate+ mybatis 对于java语言,gdao框架融合了Hibernate的抽象性和MyBatis的灵活性,并解决了它们各自在ORM框架上长久以来使用上的痛点。关于hibernate与mybatis在痛点问题,可以参考 jdao使用文档
gdao设计结构简洁且严谨,所有接口与函数均能见名知意。即使从未接触过gdao,看到gdao持久层代码,也能马上知道它的代码表达的意思和相关的数据行为。你可以在几分钟内,掌握它的用法,这是它的简洁性与设计规范性带来的优势。
Gdao是Jdao的功能等价框架,设计模式来自Jdao。
# gdao 导入 go get github.com/donnie4w/gdao
gdao.Init(mysqlDB,gdao.MYSQL) // mysqlDB 为数据源 // gdao.MYSQL 为数据库类型
// 数据源设置 gdao.init(mysqlDB,gdao.MYSQL) // 读取 hs := dao.NewHstest() hs.Where(hs.Id.EQ(10)) h, _ := hs.Select(hs.Id, hs.Value, hs.Rowname) logger.Debug(h) //[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)) t.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.SetFloa(123456) hs.SetAge(123) hs.Insert() //[DEBUG][INSERT][insert into hstest(floa,age,value,level,body,rowname,updatetime )values(?,?,?,?,?,?,?)][123456 123 hello123 12345 [104 101 108 108 111] hello1234 2024-07-17 19:36:44]
//查询,返回单条 bean, _ := gdao.ExecuteQueryBean("select id,value,rowname from hstest where id=?", 10) logger.Debug(bean) //insert int i = gdao.ExecuteUpdate("insert into hstest2(rowname,value) values(?,?)", "helloWorld", "123456789"); //update int i = gdao.ExecuteUpdate("update hstest set value=? where id=1", "hello"); //delete int i = gdao.ExecuteUpdate("delete from hstest where id = ?", 1);
//绑定Hstest 启用缓存, 缓存时效为 300秒 gdaoCache.BindClass[dao.Hstest]() //Hstest 第一次查询,并根据条件设置数据缓存 hs := dao.NewHstest() hs.Where((hs.Id.Between(0, 2)).Or(hs.Id.Between(10, 15))) hs.Limit(3) hs.Selects() //相同条件,数据直接由缓存获取 hs = dao.NewHstest() hs.Where((hs.Id.Between(0, 2)).Or(hs.Id.Between(10, 15))) hs.Limit(3) hs.Selects()
[DEBUG][SELETE LIST][ select id,age,rowname,value,updatetime,body,floa,level from hstest where id between ? and ? or (id between ? and ?) LIMIT ? ][0 2 10 15 3] [DEBUG][SET CACHE][ select id,age,rowname,value,updatetime,body,floa,level from hstest where id between ? and ? or (id between ? and ?) LIMIT ? ][0 2 10 15 3] [DEBUG][SELETE LIST][ select id,age,rowname,value,updatetime,body,floa,level from hstest where id between ? and ? or (id between ? and ?) LIMIT ? ][0 2 10 15 3] [DEBUG][GET CACHE][ select id,age,rowname,value,updatetime,body,floa,level from hstest where id between ? and ? or (id between ? and ?) LIMIT ? ][0 2 10 15 3]
设置备库数据源:mysql mysql, _ := getDataSource("mysql.json") gdaoSlave.BindClass[dao.Hstest](mysql, gdao.MYSQL) //这里主数据库为sqlite,备数据库为mysql,Hstest读取数据源为mysql hs := dao.NewHstest() hs.Where(hs.Id.Between(0, 5)) hs.OrderBy(hs.Id.Desc()) hs.Limit(3) hs.Selects()
//数据源设置 if db, err := getDataSource("sqlite.json"); err == nil { gdao.Init(db, gdao.SQLITE) gdao.SetLogger(true) } //读取解析xml配置 hs1, _ := gdaoMapper.Select[dao.Hstest1]("user.selectHstest1", 1) fmt.Println(hs1) id, _ := gdaoMapper.Select[int64]("user.selectHstest1", 1) fmt.Println(*id)
[DEBUG][Mapper Id] user.selectHstest1 SELECTONE SQL[SELECT * FROM hstest1 order by id desc limit ?]ARGS[1] Id:52,Rowname:rowname>>>123456789,Value:[104 101 108 108 111 32 103 100 97 111],Goto:[49 50 51 52 53] [DEBUG][Mapper Id] user.selectHstest1 SELECTONE SQL[SELECT * FROM hstest1 order by id desc limit ?]ARGS[1] 52
查看gdao使用文档,了解详细的性能测试数据与测试过程,和实践案例
上一篇:opencv-图像透视变换
下一篇:小巧免费的笔记本电池检测工具