From be1e250a6bb620fea392eae2cbf9508d68214b92 Mon Sep 17 00:00:00 2001 From: wenzi1 Date: Wed, 2 Jan 2019 18:17:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0ORACLE,SQL=20SERVER=E4=B8=AD?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=8C=87=E5=AE=9A=E8=A1=A8=E7=9A=84=E6=89=80?= =?UTF-8?q?=E6=9C=89=E5=AD=97=E6=AE=B5=E5=90=8D=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/database/gdb/gdb_mssql.go | 46 +- g/database/gdb/gdb_oracle.go | 31 +- geg/database/orm/mssql/gdb_sqlserver.go | 895 ++++++++++++------------ geg/database/orm/oracle/gdb.go | 893 ++++++++++++----------- 4 files changed, 952 insertions(+), 913 deletions(-) diff --git a/g/database/gdb/gdb_mssql.go b/g/database/gdb/gdb_mssql.go index ba1f7a8ab..70187a585 100644 --- a/g/database/gdb/gdb_mssql.go +++ b/g/database/gdb/gdb_mssql.go @@ -21,7 +21,6 @@ import ( "strings" ) - // 数据库链接对象 type dbMssql struct { *dbBase @@ -34,7 +33,7 @@ func (db *dbMssql) Open(config *ConfigNode) (*sql.DB, error) { source = config.Linkinfo } else { source = fmt.Sprintf("user id=%s;password=%s;server=%s;port=%s;database=%s;encrypt=disable", - config.User, config.Pass, config.Host, config.Port, config.Name) + config.User, config.Pass, config.Host, config.Port, config.Name) } if db, err := sql.Open("sqlserver", source); err == nil { return db, nil @@ -44,7 +43,7 @@ func (db *dbMssql) Open(config *ConfigNode) (*sql.DB, error) { } // 获得关键字操作符 -func (db *dbMssql) getChars () (charLeft string, charRight string) { +func (db *dbMssql) getChars() (charLeft string, charRight string) { return "\"", "\"" } @@ -92,7 +91,7 @@ func (db *dbMssql) parseSql(sql string) string { //不含LIMIT则不处理 if gregex.IsMatchString("((?i)SELECT)(.+)((?i)LIMIT)", sql) == false { break - } + } //判断SQL中是否含有order by selectStr := "" @@ -101,28 +100,26 @@ func (db *dbMssql) parseSql(sql string) string { if haveOrderby { //取order by 前面的字符串 queryExpr, _ := gregex.MatchString("((?i)SELECT)(.+)((?i)ORDER BY)", sql) - - if len(queryExpr) != 4 || strings.EqualFold(queryExpr[1], "SELECT") == false || strings.EqualFold(queryExpr[3], "ORDER BY") == false{ + + if len(queryExpr) != 4 || strings.EqualFold(queryExpr[1], "SELECT") == false || strings.EqualFold(queryExpr[3], "ORDER BY") == false { break } selectStr = queryExpr[2] //取order by表达式的值 orderbyExpr, _ := gregex.MatchString("((?i)ORDER BY)(.+)((?i)LIMIT)", sql) - if len(orderbyExpr) != 4 || strings.EqualFold(orderbyExpr[1], "ORDER BY") == false || strings.EqualFold(orderbyExpr[3], "LIMIT") == false{ + if len(orderbyExpr) != 4 || strings.EqualFold(orderbyExpr[1], "ORDER BY") == false || strings.EqualFold(orderbyExpr[3], "LIMIT") == false { break } orderbyStr = orderbyExpr[2] } else { queryExpr, _ := gregex.MatchString("((?i)SELECT)(.+)((?i)LIMIT)", sql) - if len(queryExpr) != 4 || strings.EqualFold(queryExpr[1], "SELECT") == false || strings.EqualFold(queryExpr[3], "LIMIT") == false{ + if len(queryExpr) != 4 || strings.EqualFold(queryExpr[1], "SELECT") == false || strings.EqualFold(queryExpr[3], "LIMIT") == false { break } selectStr = queryExpr[2] } - - //取limit后面的取值范围 first, limit := 0, 0 for i := 1; i < len(res[index]); i++ { @@ -150,4 +147,31 @@ func (db *dbMssql) parseSql(sql string) string { default: } return sql -} \ No newline at end of file +} + +// 获得指定表表的数据结构,构造成map哈希表返回,其中键名为表字段名称,键值暂无用途(默认为字段数据类型). +func (db *dbMssql) getTableFields(table string) (fields map[string]string, err error) { + // 缓存不存在时会查询数据表结构,缓存后不过期,直至程序重启(重新部署) + v := db.cache.GetOrSetFunc("table_fields_"+table, func() interface{} { + result := (Result)(nil) + result, err = db.GetAll(fmt.Sprintf(` + SELECT c.name as FIELD, CASE t.name + WHEN 'numeric' THEN t.name + '(' + convert(varchar(20),c.xprec) + ',' + convert(varchar(20),c.xscale) + ')' + WHEN 'char' THEN t.name + '(' + convert(varchar(20),c.length)+ ')' + WHEN 'varchar' THEN t.name + '(' + convert(varchar(20),c.length)+ ')' + ELSE t.name + '(' + convert(varchar(20),c.length)+ ')' END as TYPE + FROM systypes t,syscolumns c WHERE t.xtype=c.xtype AND c.id = (SELECT id FROM sysobjects WHERE name='%s') ORDER BY c.colid`, strings.ToUpper(table))) + if err != nil { + return nil + } + fields = make(map[string]string) + for _, m := range result { + fields[strings.ToLower(m["FIELD"].String())] = strings.ToLower(m["TYPE"].String()) //sqlserver返回的field为大写的需要转为小写的 + } + return fields + }, 0) + if err == nil { + fields = v.(map[string]string) + } + return +} diff --git a/g/database/gdb/gdb_oracle.go b/g/database/gdb/gdb_oracle.go index 965a4f5c1..d6d9873ec 100644 --- a/g/database/gdb/gdb_oracle.go +++ b/g/database/gdb/gdb_oracle.go @@ -42,7 +42,7 @@ func (db *dbOracle) Open(config *ConfigNode) (*sql.DB, error) { } // 获得关键字操作符 -func (db *dbOracle) getChars () (charLeft string, charRight string) { +func (db *dbOracle) getChars() (charLeft string, charRight string) { return "\"", "\"" } @@ -92,7 +92,7 @@ func (db *dbOracle) parseSql(sql string) string { } queryExpr, _ := gregex.MatchString("((?i)SELECT)(.+)((?i)LIMIT)", sql) - if len(queryExpr) != 4 || strings.EqualFold(queryExpr[1], "SELECT") == false || strings.EqualFold(queryExpr[3], "LIMIT") == false{ + if len(queryExpr) != 4 || strings.EqualFold(queryExpr[1], "SELECT") == false || strings.EqualFold(queryExpr[3], "LIMIT") == false { break } @@ -141,3 +141,30 @@ func (db *dbOracle) parseSql(sql string) string { } return sql } + +// 获得指定表表的数据结构,构造成map哈希表返回,其中键名为表字段名称,键值暂无用途(默认为字段数据类型). +func (db *dbOracle) getTableFields(table string) (fields map[string]string, err error) { + // 缓存不存在时会查询数据表结构,缓存后不过期,直至程序重启(重新部署) + v := db.cache.GetOrSetFunc("table_fields_"+table, func() interface{} { + result := (Result)(nil) + result, err = db.GetAll(fmt.Sprintf(` + SELECT COLUMN_NAME AS FIELD, CASE DATA_TYPE + WHEN 'NUMBER' THEN DATA_TYPE||'('||DATA_PRECISION||','||DATA_SCALE||')' + WHEN 'FLOAT' THEN DATA_TYPE||'('||DATA_PRECISION||','||DATA_SCALE||')' + ELSE DATA_TYPE||'('||DATA_LENGTH||')' END AS TYPE + FROM USER_TAB_COLUMNS WHERE TABLE_NAME = '%s' ORDER BY COLUMN_ID`, strings.ToUpper(table))) + if err != nil { + return nil + } + + fields = make(map[string]string) + for _, m := range result { + fields[strings.ToLower(m["FIELD"].String())] = strings.ToLower(m["TYPE"].String()) //ORACLE返回的值默认都是大写的,需要转为小写 + } + return fields + }, 0) + if err == nil { + fields = v.(map[string]string) + } + return +} diff --git a/geg/database/orm/mssql/gdb_sqlserver.go b/geg/database/orm/mssql/gdb_sqlserver.go index 1649bf958..d3425e16c 100644 --- a/geg/database/orm/mssql/gdb_sqlserver.go +++ b/geg/database/orm/mssql/gdb_sqlserver.go @@ -1,102 +1,100 @@ package main import ( - "fmt" - "time" - //_ "github.com/denisenkom/go-mssqldb" - "gitee.com/johng/gf/g/database/gdb" - "gitee.com/johng/gf/g" + "fmt" + "time" + //_ "github.com/denisenkom/go-mssqldb" + "gitee.com/johng/gf/g" + "gitee.com/johng/gf/g/database/gdb" ) // 本文件用于gf框架的mssql数据库操作示例,不作为单元测试使用 -var db *gdb.Db +var db gdb.DB // 初始化配置及创建数据库 -func init () { - gdb.AddDefaultConfigNode(gdb.ConfigNode { - Host : "127.0.0.1", - Port : "1433", - User : "test", - Pass : "test", - Name : "test", - Type : "mssql", - Role : "master", - Charset : "utf8", - }) - db, _= gdb.New() - - //gins.Config().SetPath("/home/john/Workspace/Go/GOPATH/src/gitee.com/johng/gf/geg/frame") - //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", - // Priority : 100, - // }, - // gdb.ConfigNode { - // Host : "127.0.0.2", - // Port : "3306", - // User : "root", - // Pass : "123456", - // Name : "test", - // Type : "mysql", - // Role : "master", - // Priority : 100, - // }, - // gdb.ConfigNode { - // Host : "127.0.0.3", - // Port : "3306", - // User : "root", - // Pass : "123456", - // Name : "test", - // Type : "mysql", - // Role : "master", - // Priority : 100, - // }, - // gdb.ConfigNode { - // Host : "127.0.0.4", - // Port : "3306", - // User : "root", - // Pass : "123456", - // Name : "test", - // Type : "mysql", - // Role : "master", - // Priority : 100, - // }, - // }, - //}) - //db, _ = gdb.Instance() +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() + + //gins.Config().SetPath("/home/john/Workspace/Go/GOPATH/src/gitee.com/johng/gf/geg/frame") + //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", + // Priority : 100, + // }, + // gdb.ConfigNode { + // Host : "127.0.0.2", + // Port : "3306", + // User : "root", + // Pass : "123456", + // Name : "test", + // Type : "mysql", + // Role : "master", + // Priority : 100, + // }, + // gdb.ConfigNode { + // Host : "127.0.0.3", + // Port : "3306", + // User : "root", + // Pass : "123456", + // Name : "test", + // Type : "mysql", + // Role : "master", + // Priority : 100, + // }, + // gdb.ConfigNode { + // Host : "127.0.0.4", + // Port : "3306", + // User : "root", + // Pass : "123456", + // Name : "test", + // Type : "mysql", + // Role : "master", + // Priority : 100, + // }, + // }, + //}) + //db, _ = gdb.Instance() } - - // 创建测试数据库 func create() error { - fmt.Println("drop table aa_user:") - _, err := db.Exec("drop table aa_user") - if err != nil { - fmt.Println("drop table aa_user error.",err) - } + fmt.Println("drop table aa_user:") + _, err := db.Exec("drop table aa_user") + if err != nil { + fmt.Println("drop table aa_user error.", err) + } - s := ` + s := ` CREATE TABLE aa_user ( id int not null, name VARCHAR(60), @@ -105,478 +103,473 @@ func create() error { PRIMARY KEY (id) ) ` - 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 = ` + 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 = ` CREATE TABLE user_detail ( id int not null, site VARCHAR(255), PRIMARY KEY (id) ) ` - 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 + 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 } // 数据写入 func insert(id int) { - 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() + 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() } - // 基本sql查询 func query() { - fmt.Println("query:") - list, err := db.GetAll("select * from aa_user where id='1'") - if err == nil { - fmt.Println(list) - } else { - fmt.Println(err) - } - - list, err = db.Table("aa_user").OrderBy("id").Limit(0,2).Select() - if err == nil { - fmt.Println(list) - } else { - fmt.Println(err) - } - fmt.Println() + 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() } // replace into func replace() { - 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() + 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() } // 数据保存 func save() { - 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() + 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() } // 批量写入 func batchInsert() { - 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() + 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() } // 数据更新 func update1() { - 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() + 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() } // 数据更新 func update2() { - 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() + 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() } // 数据更新 func update3() { - 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() + 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() } // 链式查询操作1 func linkopSelect1() { - 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() + 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() } // 链式查询操作2 func linkopSelect2() { - 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() + 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() } // 链式查询操作3 func linkopSelect3() { - 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() + 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() } // 链式查询数量1 func linkopCount1() { - 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() + 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() } - // 错误操作 func linkopUpdate1() { - fmt.Println("linkopUpdate1:") - r, err := db.Table("henghe_setting").Update() - if err == nil { - fmt.Println(r.RowsAffected()) - } else { - fmt.Println("error",err) - } - fmt.Println() + fmt.Println("linkopUpdate1:") + r, err := db.Table("henghe_setting").Update() + if err == nil { + fmt.Println(r.RowsAffected()) + } else { + fmt.Println("error", err) + } + fmt.Println() } // 通过Map指针方式传参方式 func linkopUpdate2() { - 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() + 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() } // 通过字符串方式传参 func linkopUpdate3() { - 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() + 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() } // Where条件使用Map func linkopUpdate4() { - 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() + 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() } // 链式批量写入 func linkopBatchInsert1() { - fmt.Println("linkopBatchInsert1:") - r, err := db.Table("aa_user").Data(gdb.List{ - {"id":21,"name": "linkopBatchInsert1_john_1"}, - {"id":22,"name": "linkopBatchInsert1_john_2"}, - {"id":23,"name": "linkopBatchInsert1_john_3"}, - {"id":24,"name": "linkopBatchInsert1_john_4"}, - }).Insert() - if err == nil { - fmt.Println(r.RowsAffected()) - } else { - fmt.Println(err) - } - fmt.Println() + 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() } // 链式批量写入,指定每批次写入的条数 func linkopBatchInsert2() { - 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() + 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() } // 链式批量保存 func linkopBatchSave() { - 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() + 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() } // 事务操作示例1 func transaction1() { - 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() + 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() } // 事务操作示例2 func transaction2() { - 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() + 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() } // 主从io复用测试,在mysql中使用 show full processlist 查看链接信息 func keepPing() { - 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) - } + 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) + } } // like语句查询 func likeQuery() { - fmt.Println("likeQuery:") - if r, err := db.Table("aa_user").Where("name like ?", "%john%").Select(); err == nil { - fmt.Println(r) - } else { - fmt.Println(err) - } + fmt.Println("likeQuery:") + if r, err := db.Table("aa_user").Where("name like ?", "%john%").Select(); err == nil { + fmt.Println(r) + } else { + fmt.Println(err) + } } - // mapToStruct func mapToStruct() { - 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) - } + 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) + } } // getQueriedSqls func getQueriedSqls() { - for k, v := range db.GetQueriedSqls() { - fmt.Println(k, ":") - fmt.Println("Sql :", v.Sql) - fmt.Println("Args :", v.Args) - fmt.Println("Error:", v.Error) - fmt.Println("Func :", v.Func) - } + for k, v := range db.GetQueriedSqls() { + fmt.Println(k, ":") + fmt.Println("Sql :", v.Sql) + fmt.Println("Args :", v.Args) + fmt.Println("Error:", v.Error) + fmt.Println("Func :", v.Func) + } } - func main() { - - 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() - //linkopBatchInsert2() - - //transaction1() - //transaction2() - // - //keepPing() - //likeQuery() - //mapToStruct() - //getQueriedSqls() -} \ No newline at end of file + + 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() +} diff --git a/geg/database/orm/oracle/gdb.go b/geg/database/orm/oracle/gdb.go index ffdcf8bc7..6a0a8829b 100644 --- a/geg/database/orm/oracle/gdb.go +++ b/geg/database/orm/oracle/gdb.go @@ -1,580 +1,575 @@ package main import ( - "fmt" - "time" - //_ "github.com/mattn/go-oci8" - "gitee.com/johng/gf/g/database/gdb" - "gitee.com/johng/gf/g" + "fmt" + "time" + //_ "github.com/mattn/go-oci8" + "gitee.com/johng/gf/g" + "gitee.com/johng/gf/g/database/gdb" ) // 本文件用于gf框架的mysql数据库操作示例,不作为单元测试使用 -var db *gdb.Db +var db gdb.DB // 初始化配置及创建数据库 -func init () { - gdb.AddDefaultConfigNode(gdb.ConfigNode { - Host : "192.168.146.0", - Port : "1521", - User : "test", - Pass : "test", - Name : "orcl", - Type : "oracle", - Role : "master", - Charset : "utf8", - }) - db, _= gdb.New() - - //gins.Config().SetPath("/home/john/Workspace/Go/GOPATH/src/gitee.com/johng/gf/geg/frame") - //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", - // Priority : 100, - // }, - // gdb.ConfigNode { - // Host : "127.0.0.2", - // Port : "3306", - // User : "root", - // Pass : "123456", - // Name : "test", - // Type : "mysql", - // Role : "master", - // Priority : 100, - // }, - // gdb.ConfigNode { - // Host : "127.0.0.3", - // Port : "3306", - // User : "root", - // Pass : "123456", - // Name : "test", - // Type : "mysql", - // Role : "master", - // Priority : 100, - // }, - // gdb.ConfigNode { - // Host : "127.0.0.4", - // Port : "3306", - // User : "root", - // Pass : "123456", - // Name : "test", - // Type : "mysql", - // Role : "master", - // Priority : 100, - // }, - // }, - //}) - //db, _ = gdb.Instance() +func init() { + gdb.AddDefaultConfigNode(gdb.ConfigNode{ + Host: "192.168.146.0", + Port: "1521", + User: "test", + Pass: "test", + Name: "orcl", + Type: "oracle", + Role: "master", + }) + db, _ = gdb.New() + + //gins.Config().SetPath("/home/john/Workspace/Go/GOPATH/src/gitee.com/johng/gf/geg/frame") + //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", + // Priority : 100, + // }, + // gdb.ConfigNode { + // Host : "127.0.0.2", + // Port : "3306", + // User : "root", + // Pass : "123456", + // Name : "test", + // Type : "mysql", + // Role : "master", + // Priority : 100, + // }, + // gdb.ConfigNode { + // Host : "127.0.0.3", + // Port : "3306", + // User : "root", + // Pass : "123456", + // Name : "test", + // Type : "mysql", + // Role : "master", + // Priority : 100, + // }, + // gdb.ConfigNode { + // Host : "127.0.0.4", + // Port : "3306", + // User : "root", + // Pass : "123456", + // Name : "test", + // Type : "mysql", + // Role : "master", + // Priority : 100, + // }, + // }, + //}) + //db, _ = gdb.Instance() } - - // 创建测试数据库 func create() error { - fmt.Println("drop table aa_user:") - _, err := db.Exec("drop table aa_user") - if err != nil { - fmt.Println("drop table aa_user error.",err) - } + fmt.Println("drop table aa_user:") + _, err := db.Exec("drop table aa_user") + if err != nil { + fmt.Println("drop table aa_user error.", err) + } - s := ` + s := ` CREATE TABLE aa_user ( id number(10) not null, name VARCHAR2(45), age number(8), addr varchar2(60), + amt number(12,2), PRIMARY KEY (id) ) ` - 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 = ` + 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 = ` CREATE TABLE user_detail ( id number(10) not null, site VARCHAR2(255), PRIMARY KEY (id) ) ` - 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 + 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 } // 数据写入 func insert(id int) { - 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() + 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() } - // 基本sql查询 func query() { - fmt.Println("query:") - list, err := db.GetAll("select * from aa_user") - if err == nil { - fmt.Println(list) - } else { - fmt.Println(err) - } - - list, err = db.Table("aa_user").OrderBy("id").Limit(0,2).Select() - if err == nil { - fmt.Println(list) - } else { - fmt.Println(err) - } - fmt.Println() + fmt.Println("query:") + list, err := db.GetAll("select * from aa_user") + if err == nil { + fmt.Println(list) + } else { + fmt.Println(err) + } + + list, err = db.Table("aa_user").OrderBy("id").Limit(0, 2).Select() + if err == nil { + fmt.Println(list) + } else { + fmt.Println(err) + } + fmt.Println() } // replace into func replace() { - 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() + 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() } // 数据保存 func save() { - 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() + 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() } // 批量写入 func batchInsert() { - 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() + fmt.Println("batchInsert:") + _, err := db.BatchInsert("aa_user", gdb.List{ + {"id": 11, "name": "batchInsert_john_1", "age": 11, "amt": 11.11}, + {"id": 12, "name": "batchInsert_john_2", "age": 12, "amt": 12.12}, + {"id": 13, "name": "batchInsert_john_3", "age": 13, "amt": 13.13}, + {"id": 14, "name": "batchInsert_john_4", "age": 14, "amt": 14.14}, + }, 10) + if err != nil { + fmt.Println(err) + } + fmt.Println() } // 数据更新 func update1() { - 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() + 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() } // 数据更新 func update2() { - 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() + 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() } // 数据更新 func update3() { - 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() + 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() } // 链式查询操作1 func linkopSelect1() { - 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(0, 2).Select() - if err == nil { - fmt.Println(r) - } else { - fmt.Println(err) - } - fmt.Println() + 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(0, 2).Select() + if err == nil { + fmt.Println(r) + } else { + fmt.Println(err) + } + fmt.Println() } // 链式查询操作2 func linkopSelect2() { - 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() + 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() } // 链式查询操作3 func linkopSelect3() { - 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() + 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() } // 链式查询数量1 func linkopCount1() { - 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() + 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() } - // 错误操作 func linkopUpdate1() { - fmt.Println("linkopUpdate1:") - r, err := db.Table("henghe_setting").Update() - if err == nil { - fmt.Println(r.RowsAffected()) - } else { - fmt.Println("error",err) - } - fmt.Println() + fmt.Println("linkopUpdate1:") + r, err := db.Table("henghe_setting").Update() + if err == nil { + fmt.Println(r.RowsAffected()) + } else { + fmt.Println("error", err) + } + fmt.Println() } // 通过Map指针方式传参方式 func linkopUpdate2() { - 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() + 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() } // 通过字符串方式传参 func linkopUpdate3() { - 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() + 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() } // Where条件使用Map func linkopUpdate4() { - 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() + 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() } // 链式批量写入 func linkopBatchInsert1() { - fmt.Println("linkopBatchInsert1:") - r, err := db.Table("aa_user").Data(gdb.List{ - {"id":21,"name": "linkopBatchInsert1_john_1"}, - {"id":22,"name": "linkopBatchInsert1_john_2"}, - {"id":23,"name": "linkopBatchInsert1_john_3"}, - {"id":24,"name": "linkopBatchInsert1_john_4"}, - }).Insert() - if err == nil { - fmt.Println(r.RowsAffected()) - } else { - fmt.Println(err) - } - fmt.Println() + 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() } // 链式批量写入,指定每批次写入的条数 func linkopBatchInsert2() { - 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() + 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() } // 链式批量保存 func linkopBatchSave() { - 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() + 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() } // 事务操作示例1 func transaction1() { - 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() + 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() } // 事务操作示例2 func transaction2() { - fmt.Println("transaction2:") - if tx, err := db.Begin(); err == nil { - r, err := tx.Table("user_detail").Data(gdb.Map{"id":5, "site": "www.baidu.com哈哈哈*?~!@#$%^&*()"}).Insert() - tx.Commit() - fmt.Println(r, err) - } - fmt.Println() + fmt.Println("transaction2:") + if tx, err := db.Begin(); err == nil { + r, err := tx.Table("user_detail").Data(gdb.Map{"id": 5, "site": "www.baidu.com哈哈哈*?~!@#$%^&*()"}).Insert() + tx.Commit() + fmt.Println(r, err) + } + fmt.Println() } // 主从io复用测试,在mysql中使用 show full processlist 查看链接信息 func keepPing() { - 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) - } + 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) + } } // like语句查询 func likeQuery() { - fmt.Println("likeQuery:") - if r, err := db.Table("aa_user").Where("name like ?", "%john%").Select(); err == nil { - fmt.Println(r) - } else { - fmt.Println(err) - } + fmt.Println("likeQuery:") + if r, err := db.Table("aa_user").Where("name like ?", "%john%").Select(); err == nil { + fmt.Println(r) + } else { + fmt.Println(err) + } } - // mapToStruct func mapToStruct() { - 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) - } + 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) + } } // getQueriedSqls func getQueriedSqls() { - for k, v := range db.GetQueriedSqls() { - fmt.Println(k, ":") - fmt.Println("Sql :", v.Sql) - fmt.Println("Args :", v.Args) - fmt.Println("Error:", v.Error) - fmt.Println("Func :", v.Func) - } + for k, v := range db.GetQueriedSqls() { + fmt.Println(k, ":") + fmt.Println("Sql :", v.Sql) + fmt.Println("Args :", v.Args) + fmt.Println("Error:", v.Error) + fmt.Println("Func :", v.Func) + } } - func main() { - - db.PingMaster() - db.SetDebug(true) - /*err := create() - if err != nil { - return - }*/ - - //test1 - /*for i := 1; i < 5; i++ { - insert(i) - } - query() - */ - - //batchInsert() - //query() - - //replace() - //save() - - //update1() - //update2() - //update3() - - /*linkopSelect1() - linkopSelect2() - linkopSelect3() - linkopCount1() - */ - - - /*linkopUpdate1() - linkopUpdate2() - linkopUpdate3() - linkopUpdate4() - */ - - //linkopBatchInsert1() - //linkopBatchInsert2() - - //transaction1() - //transaction2() - // - //keepPing() - //likeQuery() - mapToStruct() - //getQueriedSqls() -} \ No newline at end of file + + db.PingMaster() + db.SetDebug(true) + /*err := create() + if err != nil { + return + }*/ + + //test1 + /*for i := 1; i < 5; i++ { + insert(i) + } + 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() +} -- Gitee