Go使用其他主流的库操作mysql对比

参考Github地址:https://github.com/didi/gendry

导包

import (
	"github.com/didi/gendry"
)

建立连接

db, err := manager
		.New(dbName, user, password, host)
		.Set(
			manager.SetCharset("utf8"),
			manager.SetTimeout(1 * time.Second),
			manager.SetReadTimeout(1 * time.Second)
		).Port(3302).Open(true)

原生MySQL:

db, err := sql.Open(“mysql”, “用户名:密码@tcp(ip:端口)/数据库名字?charset=utf8”)

查询

where := map[string]interface{}{
	"sex": ”男“,
	"age >": 35,
}
table := "tableName"
selectFields := []string{"name", "age", "sex"}
cond, values, err := builder.BuildSelect(table, where, selectFields)

//cond = select name, age, sex from tableName where sex="男" and age>35
//values = []interface{}{"男",  35
 

原生:

		rows, err := db.Query(sql语句,value)
		if err != nil {
			Logger.Println("err:", err)
			return
		}
		defer rows.Close()
		//遍历每一条数据
		for rows.Next() {
			......
			if err != nil {
				Logger.Println("err:", err)
				return
			}
		}

聚合查询
where := map[string]interface{}{
    "score > ": 100,
    "city in": []interface{}{"Beijing", "Shijiazhuang", }
}
// AggregateSum 求和
// AggregateMax 最大值
// AggregateMin 最小值
// AggregateCount 数量
// AggregateAvg 平均值
result, err := AggregateQuery(ctx, db, "tableName", where, AggregateSum("age"))

result, err = AggregateQuery(ctx, db, "tableName", where, AggregateCount("*")) 

result, err = AggregateQuery(ctx, db, "tableName", where, AggregateAvg("score"))

复杂条件查询
cond, vals, err := builder.NamedQuery("select * from tb where name={{name}} and id in (select uid from anothertable where score in {{m_score}})", map[string]interface{}{
	"name": "caibirdme",
	"m_score": []float64{3.0, 5.8, 7.9},
})

assert.Equal("select * from tb where name=? and id in (select uid from anothertable where score in (?,?,?))", cond)
assert.Equal([]interface{}{"caibirdme", 3.0, 5.8, 7.9}, vals)
Scanner

把返回的结果集和自定义的struct进行映射。

type Person struct {
	Name string `ddb:"name"`
	Age int `ddb:"m_age"`
}

rows,err := db.Query("select age as m_age,name from xxx where xxx")
defer rows.Close()

var students []Person

scanner.Scan(rows, &students)

for _,student := range students {
	fmt.Println(student)
}
ScanMap

ScanMap方法返回的是一个map

rows,_ := db.Query("select name,m_age from person")
result,err := scanner.ScanMap(rows)
defer rows.Close()
for _,record := range result {
	fmt.Println(record["name"], record["m_age"])
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值