gorose -链式调用
最后更新于:2022-04-02 02:37:15
[TOC]
> [github地址](https://github.com/gohouse/gorose/blob/master/examples/mysql.go)
## 起始配置
```
package main
//导入的包
import (
"fmt"
"github.com/gohouse/gorose"
_ "github.com/go-sql-driver/mysql"
)
var DbConfig = map[string]interface{}{
"Default": "mysql_dev",
"SetMaxOpenConns": 300,
"SetMaxIdleConns": 10,
"Connections": map[string]map[string]string{
"mysql_dev": {
"host": "192.168.0.70",
"username": "root",
"password": "www.upsoft01.com",
"port": "3306",
"database": "demo",
"charset": "utf8",
"protocol": "tcp",
"prefix": "", // Table prefix
"driver": "mysql", // Database driver(mysql,sqlite,postgres,oracle,mssql)
},
},
}
func main() {
//连接
connection, err := gorose.Open(DbConfig)
if err != nil {
fmt.Println(err)
return
}
// 关闭 DB
defer connection.Close()
db := connection.GetInstance()
}
```
## 查
```
//对table 进行复制
user := db.Table("users")
```
### 原生语句查询
```
//直接查询
userInfo,err := db.Query("select * from user")
if err != nil{
panic(err)
}
for _,v :=range userInfo{
fmt.Println(v) //map[id:19 name:salamander created_at:1531993413]
}
```
### 快速查第一条
```
res ,err :=db.Table("user").Where("id = 50").First() //First 返回的是一维数组
if err!=nil {
panic(err)
}
fmt.Println(res) //[map[id:50 name:salamander1 created_at:1531993414]]
```
### get 函数返回多维数组
```
res ,err :=db.Table("user").Where("id = 50").Get() //get 返回的是多维数组
if err!=nil {
panic(err)
}
fmt.Println(res) //map[id:50 name:salamander1 created_at:1531993414]
```
### 返回json值
```
result,err := db.Table("user").Get()
if err !=nil {
panic(err)
}
fmt.Print(db.JsonEncode(result)) //返回多维数组的json
```
### 大量数据 分块处理
```
db.Table("user").Fields("name ").Where("id > 49").Chunk(100, func(data []map[string]interface{}) {
for _,item :=range data{
fmt.Println(item["name"])
}
})
```
### 其他查询
```
res, err := db.Table("users").Count()
min, err := db.Table("users").Min("age")
avg, err := db.Table("users").Avg("age")
sum, err := db.Table("users").Sum("age")
```
## 插入
### 插入一条
```
//方法一,初始化并赋值
data := map[string]interface{}{
"name":"abc",
"create_at":"1235454",
}
//方法二 初始化 后赋值
//var data []map[string]interface{}
//data["name"]="ceswasd"
//data["create_at"]="1235454"
res, err := db.Table("user").Data(data).Insert()
if err != nil {
panic(err)
}
//判断是否插入成功
if res > 0 {
fmt.Printf("RowsAffected: %v \n", res) //受影响行数
}
fmt.Printf("LastInsertId: %d", db.LastInsertId) //返回受影响的id
fmt.Printf("SqlLogs: %v", db.SqlLogs) //日志记录
```
## 更新
```
data := map[string]interface{}{
"name":"update",
"created_at":1324563,
}
where :=map[string]interface{}{
"id":53,
}
res,err :=db.Table("user").Data(data).Where(where).Update()
if err !=nil{
panic(err)
}
fmt.Println(res)
```
## 删除
```
where := map[string]interface{}{
"id": 17,
}
res, err := db.Table("user").Where(where).Delete()
if err != nil {
panic(err)
}
fmt.Println(res)//1
```
## 其他
### 多条件语句
```
where := [][]interface{}{
{"id", ">", 1},
{"name", "=", "salamander"},
}
res, err := db.Table("user").Where(where).Get()
if err != nil {
panic(err)
}
fmt.Println(res)
```
### 处理事务
```
db.Transaction(func(){
db.Table("user").Data(map[string]interface{}{"name":"fizz"}).Insert()
db.Table("user").Data(map[string]interface{}{"name":"fizz2"}).Where("id",1).Update()
})
```
或
```
trans,err := db.Transaction(func() error {
res2, err2 := db.Table("users").Data(data2).Insert()
if err2 != nil {
return err2
}
if res2 == 0 {
return errors.New("Insert failed")
}
fmt.Println(res2)
res1, err := db.Table("users").Data(data2).Where(where).Update()
if err != nil {
return err
}
if res1 == 0 {
return errors.New("update failed")
}
fmt.Println(res1)
return nil
})
fmt.Println(trans, err)
}
```
';