diff --git a/go.mod b/go.mod index e73c45e..416d93f 100644 --- a/go.mod +++ b/go.mod @@ -38,4 +38,6 @@ require ( gopkg.in/eapache/queue.v1 v1.1.0 gopkg.in/go-with/wxpay.v1 v1.3.0 gopkg.in/natefinch/lumberjack.v2 v2.0.0 + gorm.io/driver/mysql v1.0.1 + gorm.io/gorm v1.20.2 ) diff --git a/go.sum b/go.sum index 9ee2f85..e65d1be 100644 --- a/go.sum +++ b/go.sum @@ -114,6 +114,8 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.0.1 h1:HjfetcXq097iXP0uoPCdnM4Efp5/9MsM0/M+XOTeR3M= github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jinzhu/now v1.1.1 h1:g39TucaRWyV3dwDO++eEc6qf8TVIQ/Da48WmqjZ3i7E= +github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jroimartin/gocui v0.4.0 h1:52jnalstgmc25FmtGcWqa0tcbMEWS6RpFLsOIO+I+E8= github.com/jroimartin/gocui v0.4.0/go.mod h1:7i7bbj99OgFHzo7kB2zPb8pXLqMBSQegY7azfqXMkyY= @@ -327,6 +329,11 @@ gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gorm.io/driver/mysql v1.0.1 h1:omJoilUzyrAp0xNoio88lGJCroGdIOen9hq2A/+3ifw= +gorm.io/driver/mysql v1.0.1/go.mod h1:KtqSthtg55lFp3S5kUXqlGaelnWpKitn4k1xZTnoiPw= +gorm.io/gorm v1.9.19/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= +gorm.io/gorm v1.20.2 h1:bZzSEnq7NDGsrd+n3evOOedDrY5oLM5QPlCjZJUK2ro= +gorm.io/gorm v1.20.2/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/mysqldb/log.go b/mysqldb/log.go index 32b9862..f71a8cc 100644 --- a/mysqldb/log.go +++ b/mysqldb/log.go @@ -1,37 +1,33 @@ package mysqldb import ( - "fmt" + "log" + "time" "github.com/xxjwxc/public/mylog" - "github.com/jinzhu/gorm" + "gorm.io/gorm/logger" ) -var LogFormatter = func(values ...interface{}) (messages []interface{}) { - if len(values) > 1 { - var ( - currentTime = "\t[" + gorm.NowFunc().Format("2006-01-02 15:04:05") + "]" - source = fmt.Sprintf("(%v)\t", values[1]) - ) - messages = []interface{}{source, currentTime} - messages = append(messages, "\t [") - messages = append(messages, values[2:]...) - messages = append(messages, "]") - - } - - return -} - -// +// DbLog ... type DbLog struct { - gorm.Logger } -// -func (db DbLog) Print(values ...interface{}) { - msg := LogFormatter(values...) - str := fmt.Sprint(msg...) - mylog.SaveError(str, "sql") +// Write ... +func (lg DbLog) Write(p []byte) (n int, err error) { + mylog.SaveError(string(p), "sql") + return len(p), err +} + +// GetDBlog 获取默认logger +func GetDBlog() logger.Interface { + newLogger := logger.New( + log.New(DbLog{}, "\r\n", log.LstdFlags), // io writer + logger.Config{ + SlowThreshold: time.Second, // 慢 SQL 阈值 + LogLevel: logger.Error, // Log level + Colorful: false, // 禁用彩色打印 + }, + ) + return newLogger } diff --git a/mysqldb/mysqldb.go b/mysqldb/mysqldb.go index 3ca5753..9ac4865 100644 --- a/mysqldb/mysqldb.go +++ b/mysqldb/mysqldb.go @@ -1,19 +1,21 @@ package mysqldb import ( + "errors" + "github.com/xxjwxc/public/dev" - "github.com/xxjwxc/public/errors" + myerrors "github.com/xxjwxc/public/errors" + "gorm.io/gorm/logger" "github.com/xxjwxc/public/mylog" - _ "github.com/go-sql-driver/mysql" - "github.com/jinzhu/gorm" + "gorm.io/driver/mysql" + "gorm.io/gorm" ) // MySqlDB ... type MySqlDB struct { *gorm.DB - IsInit bool } // OnInitDBOrm init MySqlDB @@ -27,29 +29,31 @@ func OnInitDBOrm(dataSourceName string) (orm *MySqlDB) { func (i *MySqlDB) OnGetDBOrm(dataSourceName string) *gorm.DB { if i.DB == nil { var err error - i.DB, err = gorm.Open("mysql", dataSourceName) + i.DB, err = gorm.Open(mysql.Open(dataSourceName), &gorm.Config{PrepareStmt: false, + Logger: logger.Default}) if err != nil { - mylog.Error(errors.Wrap(err, "Got error when connect database:"+dataSourceName)) + mylog.Error(myerrors.Wrap(err, "Got error when connect database:"+dataSourceName)) return nil } - i.IsInit = true } - i.DB.SingularTable(true) //全局禁用表名复数 + // i.DB.SingularTable(true) //全局禁用表名复数 if dev.IsDev() { - i.DB.LogMode(true) - //beedb.OnDebug = true + i.DB = i.DB.Debug() } else { - i.DB.SetLogger(DbLog{}) + i.DB.Logger = GetDBlog() } + i.DB.Logger = GetDBlog() + return i.DB } // OnDestoryDB destorydb func (i *MySqlDB) OnDestoryDB() { if i.DB != nil { - i.DB.Close() + sqldb, _ := i.DB.DB() + sqldb.Close() i.DB = nil } } @@ -66,6 +70,11 @@ func (i *MySqlDB) IsNotFound(errs ...error) bool { return i.RecordNotFound() } +// RecordNotFound check if returning ErrRecordNotFound error +func (i *MySqlDB) RecordNotFound() bool { + return !errors.Is(i.Error, gorm.ErrRecordNotFound) +} + // Commit 自动提交(如果有错,Rollback) func (i *MySqlDB) Commit(db *gorm.DB) { if db.Error != nil { diff --git a/mysqldbv1/log.go b/mysqldbv1/log.go new file mode 100644 index 0000000..d60b983 --- /dev/null +++ b/mysqldbv1/log.go @@ -0,0 +1,37 @@ +package mysqldbv1 + +import ( + "fmt" + + "github.com/xxjwxc/public/mylog" + + "github.com/jinzhu/gorm" +) + +var LogFormatter = func(values ...interface{}) (messages []interface{}) { + if len(values) > 1 { + var ( + currentTime = "\t[" + gorm.NowFunc().Format("2006-01-02 15:04:05") + "]" + source = fmt.Sprintf("(%v)\t", values[1]) + ) + messages = []interface{}{source, currentTime} + messages = append(messages, "\t [") + messages = append(messages, values[2:]...) + messages = append(messages, "]") + + } + + return +} + +// +type DbLog struct { + gorm.Logger +} + +// +func (db DbLog) Print(values ...interface{}) { + msg := LogFormatter(values...) + str := fmt.Sprint(msg...) + mylog.SaveError(str, "sql") +} diff --git a/mysqldbv1/mysqldb.go b/mysqldbv1/mysqldb.go new file mode 100644 index 0000000..572584e --- /dev/null +++ b/mysqldbv1/mysqldb.go @@ -0,0 +1,76 @@ +package mysqldbv1 + +import ( + "github.com/xxjwxc/public/dev" + "github.com/xxjwxc/public/errors" + + "github.com/xxjwxc/public/mylog" + + _ "github.com/go-sql-driver/mysql" + "github.com/jinzhu/gorm" +) + +// MySqlDB ... +type MySqlDB struct { + *gorm.DB + IsInit bool +} + +// OnInitDBOrm init MySqlDB +func OnInitDBOrm(dataSourceName string) (orm *MySqlDB) { + orm = new(MySqlDB) + orm.OnGetDBOrm(dataSourceName) + return +} + +// OnGetDBOrm get gorm.db +func (i *MySqlDB) OnGetDBOrm(dataSourceName string) *gorm.DB { + if i.DB == nil { + var err error + i.DB, err = gorm.Open("mysql", dataSourceName) + if err != nil { + mylog.Error(errors.Wrap(err, "Got error when connect database:"+dataSourceName)) + return nil + } + i.IsInit = true + } + + i.DB.SingularTable(true) //全局禁用表名复数 + if dev.IsDev() { + i.DB.LogMode(true) + //beedb.OnDebug = true + } else { + i.DB.SetLogger(DbLog{}) + } + + return i.DB +} + +// OnDestoryDB destorydb +func (i *MySqlDB) OnDestoryDB() { + if i.DB != nil { + i.DB.Close() + i.DB = nil + } +} + +// IsNotFound 判断错误是否未找到 +func (i *MySqlDB) IsNotFound(errs ...error) bool { + if len(errs) > 0 { + for _, err := range errs { + if err == gorm.ErrRecordNotFound { + return true + } + } + } + return i.RecordNotFound() +} + +// Commit 自动提交(如果有错,Rollback) +func (i *MySqlDB) Commit(db *gorm.DB) { + if db.Error != nil { + db.Rollback() // 回滚 + } else { + db.Commit() + } +} diff --git a/mysqldbv1/mysqldb2018-05-04.rar b/mysqldbv1/mysqldb2018-05-04.rar new file mode 100644 index 0000000..e093a56 Binary files /dev/null and b/mysqldbv1/mysqldb2018-05-04.rar differ