2018-11-19 11:38:57 +08:00
|
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
2019-01-02 18:17:01 +08:00
|
|
|
|
"fmt"
|
|
|
|
|
|
"time"
|
2019-07-06 16:14:45 +08:00
|
|
|
|
|
2019-01-02 18:17:01 +08:00
|
|
|
|
//_ "github.com/denisenkom/go-mssqldb"
|
2019-07-29 21:01:19 +08:00
|
|
|
|
"github.com/gogf/gf/database/gdb"
|
|
|
|
|
|
"github.com/gogf/gf/frame/g"
|
2018-11-19 11:38:57 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
// 本文件用于gf框架的mssql数据库操作示例,不作为单元测试使用
|
|
|
|
|
|
|
2019-01-02 18:17:01 +08:00
|
|
|
|
var db gdb.DB
|
2018-11-19 11:38:57 +08:00
|
|
|
|
|
|
|
|
|
|
// 初始化配置及创建数据库
|
2019-01-02 18:17:01 +08:00
|
|
|
|
func init() {
|
|
|
|
|
|
gdb.AddDefaultConfigNode(gdb.ConfigNode{
|
|
|
|
|
|
Host: "127.0.0.1",
|
|
|
|
|
|
Port: "1433",
|
|
|
|
|
|
User: "sa",
|
|
|
|
|
|
Pass: "123456",
|
|
|
|
|
|
Name: "test",
|
|
|
|
|
|
Type: "mssql",
|
|
|
|
|
|
Role: "master",
|
|
|
|
|
|
Charset: "utf8",
|
|
|
|
|
|
})
|
|
|
|
|
|
db, _ = gdb.New()
|
|
|
|
|
|
|
2019-08-01 14:07:25 +08:00
|
|
|
|
//gins.Config().SetPath("/home/john/Workspace/Go/GOPATH/src/github.com/gogf/gf/.example/frame")
|
2019-01-02 18:17:01 +08:00
|
|
|
|
//db = g.Database()
|
|
|
|
|
|
|
|
|
|
|
|
//gdb.SetConfig(gdb.ConfigNode {
|
|
|
|
|
|
// Host : "127.0.0.1",
|
|
|
|
|
|
// Port : 3306,
|
|
|
|
|
|
// User : "root",
|
|
|
|
|
|
// Pass : "123456",
|
|
|
|
|
|
// Name : "test",
|
|
|
|
|
|
// Type : "mysql",
|
|
|
|
|
|
//})
|
|
|
|
|
|
//db, _ = gdb.Instance()
|
|
|
|
|
|
|
|
|
|
|
|
//gdb.SetConfig(gdb.Config {
|
|
|
|
|
|
// "default" : gdb.ConfigGroup {
|
|
|
|
|
|
// gdb.ConfigNode {
|
|
|
|
|
|
// Host : "127.0.0.1",
|
|
|
|
|
|
// Port : "3306",
|
|
|
|
|
|
// User : "root",
|
|
|
|
|
|
// Pass : "123456",
|
|
|
|
|
|
// Name : "test",
|
|
|
|
|
|
// Type : "mysql",
|
|
|
|
|
|
// Role : "master",
|
2019-07-06 16:14:45 +08:00
|
|
|
|
// Weight : 100,
|
2019-01-02 18:17:01 +08:00
|
|
|
|
// },
|
|
|
|
|
|
// gdb.ConfigNode {
|
|
|
|
|
|
// Host : "127.0.0.2",
|
|
|
|
|
|
// Port : "3306",
|
|
|
|
|
|
// User : "root",
|
|
|
|
|
|
// Pass : "123456",
|
|
|
|
|
|
// Name : "test",
|
|
|
|
|
|
// Type : "mysql",
|
|
|
|
|
|
// Role : "master",
|
2019-07-06 16:14:45 +08:00
|
|
|
|
// Weight : 100,
|
2019-01-02 18:17:01 +08:00
|
|
|
|
// },
|
|
|
|
|
|
// gdb.ConfigNode {
|
|
|
|
|
|
// Host : "127.0.0.3",
|
|
|
|
|
|
// Port : "3306",
|
|
|
|
|
|
// User : "root",
|
|
|
|
|
|
// Pass : "123456",
|
|
|
|
|
|
// Name : "test",
|
|
|
|
|
|
// Type : "mysql",
|
|
|
|
|
|
// Role : "master",
|
2019-07-06 16:14:45 +08:00
|
|
|
|
// Weight : 100,
|
2019-01-02 18:17:01 +08:00
|
|
|
|
// },
|
|
|
|
|
|
// gdb.ConfigNode {
|
|
|
|
|
|
// Host : "127.0.0.4",
|
|
|
|
|
|
// Port : "3306",
|
|
|
|
|
|
// User : "root",
|
|
|
|
|
|
// Pass : "123456",
|
|
|
|
|
|
// Name : "test",
|
|
|
|
|
|
// Type : "mysql",
|
|
|
|
|
|
// Role : "master",
|
2019-07-06 16:14:45 +08:00
|
|
|
|
// Weight : 100,
|
2019-01-02 18:17:01 +08:00
|
|
|
|
// },
|
|
|
|
|
|
// },
|
|
|
|
|
|
//})
|
|
|
|
|
|
//db, _ = gdb.Instance()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 创建测试数据库
|
|
|
|
|
|
func create() error {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("drop table aa_user:")
|
|
|
|
|
|
_, err := db.Exec("drop table aa_user")
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("drop table aa_user error.", err)
|
|
|
|
|
|
}
|
2018-11-19 11:38:57 +08:00
|
|
|
|
|
2019-01-02 18:17:01 +08:00
|
|
|
|
s := `
|
2018-11-19 11:38:57 +08:00
|
|
|
|
CREATE TABLE aa_user (
|
|
|
|
|
|
id int not null,
|
|
|
|
|
|
name VARCHAR(60),
|
|
|
|
|
|
age int,
|
|
|
|
|
|
addr varchar(60),
|
|
|
|
|
|
PRIMARY KEY (id)
|
|
|
|
|
|
)
|
|
|
|
|
|
`
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("create table aa_user:")
|
|
|
|
|
|
_, err = db.Exec(s)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("create table error.", err)
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*_, err = db.Exec("drop sequence id_seq")
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("drop sequence id_seq", err)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fmt.Println("create sequence id_seq")
|
|
|
|
|
|
_, err = db.Exec("create sequence id_seq increment by 1 start with 1 maxvalue 9999999999 cycle cache 10")
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("create sequence id_seq error.", err)
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
s = `
|
|
|
|
|
|
CREATE TRIGGER id_trigger before insert on aa_user for each row
|
|
|
|
|
|
begin
|
|
|
|
|
|
select id_seq.nextval into :new.id from dual;
|
|
|
|
|
|
end;
|
|
|
|
|
|
`
|
|
|
|
|
|
_, err = db.Exec(s)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("create trigger error.", err)
|
|
|
|
|
|
return err
|
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
|
|
_, err = db.Exec("drop table user_detail")
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("drop table user_detail", err)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
s = `
|
2018-11-19 11:38:57 +08:00
|
|
|
|
CREATE TABLE user_detail (
|
|
|
|
|
|
id int not null,
|
|
|
|
|
|
site VARCHAR(255),
|
|
|
|
|
|
PRIMARY KEY (id)
|
|
|
|
|
|
)
|
|
|
|
|
|
`
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("create table user_detail:")
|
|
|
|
|
|
_, err = db.Exec(s)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("create table user_detail error.", err)
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println("create table success.")
|
|
|
|
|
|
return nil
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 数据写入
|
|
|
|
|
|
func insert(id int) {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("insert:")
|
|
|
|
|
|
r, err := db.Insert("aa_user", gdb.Map{
|
|
|
|
|
|
"id": id,
|
|
|
|
|
|
"name": "john",
|
|
|
|
|
|
"age": id,
|
|
|
|
|
|
})
|
|
|
|
|
|
fmt.Println(r.LastInsertId())
|
|
|
|
|
|
fmt.Println(r.RowsAffected())
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
r, err = db.Insert("user_detail", gdb.Map{
|
|
|
|
|
|
"id": id,
|
|
|
|
|
|
"site": "http://johng.cn",
|
|
|
|
|
|
})
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
fmt.Printf("id: %d\n", id)
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 基本sql查询
|
|
|
|
|
|
func query() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("query:")
|
|
|
|
|
|
list, err := db.GetAll("select * from aa_user where 1=1")
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
fmt.Println(list)
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
list, err = db.Table("aa_user").OrderBy("id").Limit(0, 5).Select()
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
fmt.Println(list)
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// replace into
|
|
|
|
|
|
func replace() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("replace:")
|
|
|
|
|
|
r, err := db.Save("aa_user", gdb.Map{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"name": "john",
|
|
|
|
|
|
})
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
fmt.Println(r.LastInsertId())
|
|
|
|
|
|
fmt.Println(r.RowsAffected())
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 数据保存
|
|
|
|
|
|
func save() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("save:")
|
|
|
|
|
|
r, err := db.Save("aa_user", gdb.Map{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"name": "john",
|
|
|
|
|
|
})
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
fmt.Println(r.LastInsertId())
|
|
|
|
|
|
fmt.Println(r.RowsAffected())
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 批量写入
|
|
|
|
|
|
func batchInsert() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("batchInsert:")
|
|
|
|
|
|
_, err := db.BatchInsert("aa_user", gdb.List{
|
|
|
|
|
|
{"id": 11, "name": "batchInsert_john_1", "age": 11},
|
|
|
|
|
|
{"id": 12, "name": "batchInsert_john_2", "age": 12},
|
|
|
|
|
|
{"id": 13, "name": "batchInsert_john_3", "age": 13},
|
|
|
|
|
|
{"id": 14, "name": "batchInsert_john_4", "age": 14},
|
|
|
|
|
|
}, 10)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 数据更新
|
|
|
|
|
|
func update1() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("update1:")
|
|
|
|
|
|
r, err := db.Update("aa_user", gdb.Map{"name": "john1", "age": 1}, "id=?", 1)
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
fmt.Println(r.LastInsertId())
|
|
|
|
|
|
fmt.Println(r.RowsAffected())
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 数据更新
|
|
|
|
|
|
func update2() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("update2:")
|
|
|
|
|
|
r, err := db.Update("aa_user", gdb.Map{"name": "john6", "age": 6}, "id=?", 2)
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
fmt.Println(r.LastInsertId())
|
|
|
|
|
|
fmt.Println(r.RowsAffected())
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 数据更新
|
|
|
|
|
|
func update3() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("update3:")
|
|
|
|
|
|
r, err := db.Update("aa_user", "name=?", "id=?", "john2", 3)
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
fmt.Println(r.LastInsertId())
|
|
|
|
|
|
fmt.Println(r.RowsAffected())
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 链式查询操作1
|
|
|
|
|
|
func linkopSelect1() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("linkopSelect1:")
|
|
|
|
|
|
r, err := db.Table("aa_user u").LeftJoin("user_detail ud", "u.id=ud.id").Fields("u.*, ud.site").Where("u.id > ?", 1).Limit(3, 5).Select()
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
fmt.Println(r)
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 链式查询操作2
|
|
|
|
|
|
func linkopSelect2() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("linkopSelect2:")
|
|
|
|
|
|
r, err := db.Table("aa_user u").LeftJoin("user_detail ud", "u.id=ud.id").Fields("u.*,ud.site").Where("u.id=?", 1).One()
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
fmt.Println(r)
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 链式查询操作3
|
|
|
|
|
|
func linkopSelect3() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("linkopSelect3:")
|
|
|
|
|
|
r, err := db.Table("aa_user u").LeftJoin("user_detail ud", "u.id=ud.id").Fields("ud.site").Where("u.id=?", 1).Value()
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
fmt.Println(r.String())
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 链式查询数量1
|
|
|
|
|
|
func linkopCount1() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("linkopCount1:")
|
|
|
|
|
|
r, err := db.Table("aa_user u").LeftJoin("user_detail ud", "u.id=ud.id").Where("name like ?", "john").Count()
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
fmt.Println(r)
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 错误操作
|
|
|
|
|
|
func linkopUpdate1() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("linkopUpdate1:")
|
|
|
|
|
|
r, err := db.Table("henghe_setting").Update()
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
fmt.Println(r.RowsAffected())
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println("error", err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 通过Map指针方式传参方式
|
|
|
|
|
|
func linkopUpdate2() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("linkopUpdate2:")
|
|
|
|
|
|
r, err := db.Table("aa_user").Data(gdb.Map{"name": "john2"}).Where("name=?", "john").Update()
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
fmt.Println(r.RowsAffected())
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 通过字符串方式传参
|
|
|
|
|
|
func linkopUpdate3() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("linkopUpdate3:")
|
|
|
|
|
|
r, err := db.Table("aa_user").Data("name='john3'").Where("name=?", "john2").Update()
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
fmt.Println(r.RowsAffected())
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Where条件使用Map
|
|
|
|
|
|
func linkopUpdate4() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("linkopUpdate4:")
|
|
|
|
|
|
r, err := db.Table("aa_user").Data(gdb.Map{"name": "john11111"}).Where(g.Map{"id": 1}).Update()
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
fmt.Println(r.RowsAffected())
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 链式批量写入
|
|
|
|
|
|
func linkopBatchInsert1() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("linkopBatchInsert1:")
|
|
|
|
|
|
r, err := db.Table("aa_user").Filter().Data(gdb.List{
|
|
|
|
|
|
{"id": 21, "name": "linkopBatchInsert1_john_1", "amt": 21.21, "tt": "haha"},
|
|
|
|
|
|
{"id": 22, "name": "linkopBatchInsert1_john_2", "amt": 22.22, "cc": "hahacc"},
|
|
|
|
|
|
{"id": 23, "name": "linkopBatchInsert1_john_3", "amt": 23.23, "bb": "hahabb"},
|
|
|
|
|
|
{"id": 24, "name": "linkopBatchInsert1_john_4", "amt": 24.24, "aa": "hahaaa"},
|
|
|
|
|
|
}).Insert()
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
fmt.Println(r.RowsAffected())
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 链式批量写入,指定每批次写入的条数
|
|
|
|
|
|
func linkopBatchInsert2() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("linkopBatchInsert2:")
|
|
|
|
|
|
r, err := db.Table("aa_user").Data(gdb.List{
|
|
|
|
|
|
{"id": 25, "name": "linkopBatchInsert2john_1"},
|
|
|
|
|
|
{"id": 26, "name": "linkopBatchInsert2john_2"},
|
|
|
|
|
|
{"id": 27, "name": "linkopBatchInsert2john_3"},
|
|
|
|
|
|
{"id": 28, "name": "linkopBatchInsert2john_4"},
|
|
|
|
|
|
}).Batch(2).Insert()
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
fmt.Println(r.RowsAffected())
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 链式批量保存
|
|
|
|
|
|
func linkopBatchSave() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("linkopBatchSave:")
|
|
|
|
|
|
r, err := db.Table("aa_user").Data(gdb.List{
|
|
|
|
|
|
{"id": 1, "name": "john_1"},
|
|
|
|
|
|
{"id": 2, "name": "john_2"},
|
|
|
|
|
|
{"id": 3, "name": "john_3"},
|
|
|
|
|
|
{"id": 4, "name": "john_4"},
|
|
|
|
|
|
}).Save()
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
fmt.Println(r.RowsAffected())
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 事务操作示例1
|
|
|
|
|
|
func transaction1() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("transaction1:")
|
|
|
|
|
|
if tx, err := db.Begin(); err == nil {
|
|
|
|
|
|
r, err := tx.Insert("aa_user", gdb.Map{
|
|
|
|
|
|
"id": 30,
|
|
|
|
|
|
"name": "transaction1",
|
|
|
|
|
|
})
|
|
|
|
|
|
tx.Rollback()
|
|
|
|
|
|
fmt.Println(r, err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 事务操作示例2
|
|
|
|
|
|
func transaction2() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("transaction2:")
|
|
|
|
|
|
if tx, err := db.Begin(); err == nil {
|
|
|
|
|
|
r, err := tx.Table("user_detail").Data(gdb.Map{"id": 6, "site": "www.baidu.com哈哈哈*?''\"~!@#$%^&*()"}).Insert()
|
|
|
|
|
|
tx.Commit()
|
|
|
|
|
|
fmt.Println(r, err)
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println()
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 主从io复用测试,在mysql中使用 show full processlist 查看链接信息
|
|
|
|
|
|
func keepPing() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("keepPing:")
|
|
|
|
|
|
for i := 0; i < 30; i++ {
|
|
|
|
|
|
fmt.Println("ping...", i)
|
|
|
|
|
|
err := db.PingMaster()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
err = db.PingSlave()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
time.Sleep(1 * time.Second)
|
|
|
|
|
|
}
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// like语句查询
|
|
|
|
|
|
func likeQuery() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
fmt.Println("likeQuery:")
|
|
|
|
|
|
if r, err := db.Table("aa_user").Where("name like ?", "%john%").Select(); err == nil {
|
|
|
|
|
|
fmt.Println(r)
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// mapToStruct
|
|
|
|
|
|
func mapToStruct() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
type User struct {
|
|
|
|
|
|
Id int
|
|
|
|
|
|
Name string
|
|
|
|
|
|
Age int
|
|
|
|
|
|
Addr string
|
|
|
|
|
|
}
|
|
|
|
|
|
fmt.Println("mapToStruct:")
|
|
|
|
|
|
if r, err := db.Table("aa_user").Where("id=?", 1).One(); err == nil {
|
|
|
|
|
|
u := User{}
|
|
|
|
|
|
if err := r.ToStruct(&u); err == nil {
|
|
|
|
|
|
fmt.Println(r)
|
|
|
|
|
|
fmt.Println(u)
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
|
|
fmt.Println(err)
|
|
|
|
|
|
}
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// getQueriedSqls
|
|
|
|
|
|
func getQueriedSqls() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
for k, v := range db.GetQueriedSqls() {
|
|
|
|
|
|
fmt.Println(k, ":")
|
|
|
|
|
|
fmt.Println("Sql :", v.Sql)
|
|
|
|
|
|
fmt.Println("Args :", v.Args)
|
|
|
|
|
|
fmt.Println("Error:", v.Error)
|
|
|
|
|
|
}
|
2018-11-19 11:38:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func main() {
|
2019-01-02 18:17:01 +08:00
|
|
|
|
|
|
|
|
|
|
db.PingMaster()
|
|
|
|
|
|
db.SetDebug(true)
|
|
|
|
|
|
/*err := create()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return
|
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
|
|
//test1
|
|
|
|
|
|
/*for i := 1; i < 5; i++ {
|
|
|
|
|
|
insert(i)
|
|
|
|
|
|
}*/
|
|
|
|
|
|
//insert(2)
|
|
|
|
|
|
//query()
|
|
|
|
|
|
|
|
|
|
|
|
//batchInsert()
|
|
|
|
|
|
//query()
|
|
|
|
|
|
|
|
|
|
|
|
//replace()
|
|
|
|
|
|
//save()
|
|
|
|
|
|
|
|
|
|
|
|
/*update1()
|
|
|
|
|
|
update2()
|
|
|
|
|
|
update3()
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/*linkopSelect1()
|
|
|
|
|
|
linkopSelect2()
|
|
|
|
|
|
linkopSelect3()
|
|
|
|
|
|
linkopCount1()
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/*linkopUpdate1()
|
|
|
|
|
|
linkopUpdate2()
|
|
|
|
|
|
linkopUpdate3()
|
|
|
|
|
|
linkopUpdate4()
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
linkopBatchInsert1()
|
|
|
|
|
|
query()
|
|
|
|
|
|
//linkopBatchInsert2()
|
|
|
|
|
|
|
|
|
|
|
|
//transaction1()
|
|
|
|
|
|
//transaction2()
|
|
|
|
|
|
//
|
|
|
|
|
|
//keepPing()
|
|
|
|
|
|
//likeQuery()
|
|
|
|
|
|
//mapToStruct()
|
|
|
|
|
|
//getQueriedSqls()
|
|
|
|
|
|
}
|