代码拉取完成,页面将自动刷新
gom是一个基于golang语言的关系型数据库ORM框架(CRUD工具库,支持事务)
目前最新版本为v2.0,于2022年4月15 发布
当前支持的数据库类型仅为 mysql
及其衍生品 mariadb
数据库类型支持自定义扩展(参考factory/mysql/mysql.go)
gom是goroutine安全的(自认为的安全)
和原生查询接近的查询性能(甚至更好),增删改性能略比原生差一些。
单元测试覆盖率90%,测试比较充分,但是仍不排除还有漏网之BUG
但是逻辑覆盖率没法做到百分之百,如使用过程中如出现问题,欢迎邮件我:kmlixh@foxmail.com或者直接给PR
本地测试的结果详见迭代注记
使用go mod的情况下:
require github.com/kmlixh/gom/v2 v2.0.0
require github.com/go-sql-driver/mysql v1.6.0 // indirect,
或者
go get github.com/kmlixh/gom/v2
package main
import (
"github.com/kmlixh/gom/v2"
"github.com/kmlixh/gom/v2/cnds"
_ "github.com/kmlixh/gom/v2/factory/mysql"
"github.com/google/uuid"
"time"
)
var dsn = "remote:remote123@tcp(10.0.1.5)/test?charset=utf8&loc=Asia%2FShanghai&parseTime=true"
type User struct {
Id int64 `json:"id" gom:"@,id"`
Pwd string `json:"pwd" gom:"pwd"`
Email string `json:"email" gom:"email"`
Valid int `json:"valid" gom:"valid"`
NickName string `json:"nicks" gom:"nick_name"`
RegDate time.Time `json:"reg_date" gom:"reg_date"`
}
var db *gom.DB
func init() {
//Create DB ,Global
var er error
db, er = gom.Open("mysql", dsn, true)
if er != nil {
panic(er)
}
}
func main() {
var users []User
//Query
db.Where(cnds.New("name",cnds.Eq,"kmlixh")).Page(0, 100).Select(&users)
//Update
temp := users[0]
temp.NickName = uuid.New().String()
temp.RegDate = time.Now()
db.Update(temp)
//Delete
db.Delete(users[1])
tt := User{
Pwd: "123213",
Email: "1@test.com",
Valid: 1,
NickName: uuid.New().String(),
RegDate: time.Now(),
}
db.Insert(tt)
}
RawDb() 获取原生的sql.Db对象
Table(tableName string) 设置表名
Raw() *sql.Db 获取go底层的db对象
OrderBy()排序
CleanOrders清除排序
OrderByAsc
OrderByDesc
Where2
Where
Clone
Page
Count
Sum
Select
SelectByModel
First
Insert
Delete
Update
ExecuteRaw
ExecuteStatement
Begin
IsInTransaction
Commit
Rollback
DoTransaction
CleanDb
v2.0
代码几乎全部重构,你大概可以认为这是一个全新的东西,API全变了(不过也没事,之前的版本也就我一个人在用^_^自嗨锅)
代码测试覆盖率93.0%(相关的测试覆盖率结果可以看test_cover.html以及cover.out)
此处略作测试摘录证明一下我真的做过测试了:
go test -cover -coverprofile=cover.out -coverpkg=./...
init DB.............
PASS
coverage: 93.0% of statements in ./...
ok github.com/kmlixh/gom 9.112s
然后Benchmark也顺手写了粗糙的两个:
go test -bench="." -benchmem -run="TestNothing"
init DB.............
goos: darwin
goarch: amd64
pkg: github.com/kmlixh/gom
cpu: Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
BenchmarkBaseSelect-16 138 8654269 ns/op 662728 B/op 10397 allocs/op
BenchmarkBaseSelectGom-16 122 8936071 ns/op 679967 B/op 14406 allocs/op
BenchmarkDB_InsertSingle-16 74 19828957 ns/op 5403 B/op 109 allocs/op
BenchmarkRaw_InsertSingle-16 66 17606781 ns/op 1175 B/op 22 allocs/op
PASS
ok github.com/kmlixh/gom 6.176s
查询的性能比原始查询是差了一些的,这个需要承认
v1.1.2
修复CreateSingleTable的一些bug
v1.1.1
修复一些bug;
增加NotIn模式
v1.0.8
截止1.0.8又修复了若干bug,详细请看commit
1.修复了大量的bug;(具体可以看提交记录)
2.改造了数据获取的方式,从原来的固定格式转换,变成了接近于数据库底层的Scanner模式的性能
3.优化了自定义类型的查询和存储
1.修复若干bug(具体修复哪些bug记不清了 ^_^)
2.修复Update,Insert,Delete方法传入不定参数时的bug(无法解析,或者解析不正确,使用递归解决)
3.修复Condition为空的情况下会莫名注入一个“where”进入sql语句的bug
4.Db对象增加了一个Count函数,故名思议,用来做count的
1.修复无法使用事务的bug
2.修改了数据库操作的一些基础逻辑,每次操作前都会进行Prepare操作,以提高一些“性能”
3.为了修复上面的bug,修改了整体的gom.Db结构
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。