From 3c1e58ce9a9b707e38a7cdf5398a8c424e4a7153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E5=B0=8F=E5=86=9B?= <346944475@qq.com> Date: Mon, 28 Sep 2020 14:40:49 +0800 Subject: [PATCH] add gorm v2 add gorm v2 tools --- go.mod | 2 + go.sum | 7 +++ mysqldb/log.go | 46 +++++++++---------- mysqldb/mysqldb.go | 33 +++++++++----- mysqldbv1/log.go | 37 ++++++++++++++++ mysqldbv1/mysqldb.go | 76 ++++++++++++++++++++++++++++++++ mysqldbv1/mysqldb2018-05-04.rar | Bin 0 -> 2439 bytes 7 files changed, 164 insertions(+), 37 deletions(-) create mode 100644 mysqldbv1/log.go create mode 100644 mysqldbv1/mysqldb.go create mode 100644 mysqldbv1/mysqldb2018-05-04.rar 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 0000000000000000000000000000000000000000..e093a560dd5b015a9e8bb71274f5764cba5da0e6 GIT binary patch literal 2439 zcmV;233&EWVR9iF2LR8Ia{vGh000000000frF0;WF8~h%004po0006(r1Kf7grrOz zGYSA80001Ycwcm7b963eZve1M6A=s@QBcUe92tJj_*TpCWu%QQ0un5b!9qqdAHxJA z^rn{WtxI=lw`mPnNusbQq6~3{(7$ubsEJs1A9CKLoX);ZUPy+E*8gzwq+{A$@NhT<8%N00@ui9#{u}dRZUP;2!_CG0-*?;M$i{ouo9LKUww){iHPRTLSEprXVKj~4{kzJ@zMEv)>7&%T%Z(0a%tg| zVw)kz7c&be$|N)X$m;B@FIx;G_{zMQ89k8U6~rmnz1u?ZW`4MGkkLF|e6WeREo41A zB0q+Y2BK3H9=@U(+rpuy%Xj$di)0&R(lTFuPsX&h46SWA`fPl^v$AFIS(EsW$pweZ zp;S+-1I}`JPpK_%-=x4-WOO}SX-}KQGkJ42(fDty$AvE})|lvRA?9(`P_p!#aeaAk zyLkMs=D1S9_%}naNOY4JUQ7|;I>q# zQ+~9O^(tM>WOSykRkTx1VRDEmMzfYdqx+AurNuc@){z%oBpMv zqm4&`fI|h!DPYd0%OqEllWhtD*xRIB5U-^%Sn0H8h^P2YNl({Gar|iPA4Z3wj_$e{ z*#R>9{n!@QLt>0HHPeDU=vTx7%nrtOX!Z?Q1KZb(S7sRo4_d!@mJ3l>&FfX1>W=Eo z(?Ne~7zJS^{gY*LDL@uSAy9G4U#S7#wiRyF066;RQ-FR^b!Xy-? z&*Ejw7NjJsi2!65LMDM&v53Yx2Iyo3Af7XAY2j{)p>s0lJKV|^)FFHV>CDb|?tRa@ z_c`9*8|U~*`9F4j;2&yab8|;Hf?9<9C6VcUx$)5saU)S_7q5 zJmXU&h;6?_2*7)6LtZUr!Wfrfd-aSJz6ew%t$9snX%2vs;5s43y4#`Cy|bjosAPtw%^q*+pTsLoYOx9WQp( zO}(0bjaqxV+&cSpeV=-}6r8yGM3}yHSG=xpluJG)Lp<`h6L(f_*TxS;Ts6|252)Fm<-AR@KM8Z^zAQUT5 z9J|UK;^~+p?hMyN^Nq;TfeVEYK*Hm#wgJXFjco-Ix^j(%Z;-|w7BJScOeW>_LhN;} z6~ei+l}25w2pBRBm&;C`_WeEn58l7f2sA|TXN9P^O543rC9UCJDSLta8ep; zhOV#brll%-w0N(rdMtDdZUFd*F@24$bgXtw;|sP+!(2)||;fNr4Vc}VOmhCEaIDW(}N zM4`Z9l-fXW`)Jnr`C{rCG&Eb*iIP0>MVxi^Fn=6!^UcOm8?PiM0QC-A_GSZfdZ(Y^ zby+dTPVhMzNn4u((QCSxw;V6)^I%?|h`aJ~ciJ5>lEr)v;uPz2AdoKre*ypi3i@j%)J;Dd!+EK8bMr^#>62V z6)1$QfmKMP5{KimCgaxTgZz!_f`wHe=sPM$KzIOu?9va=-cBGmjZr>x$wT3k_Nn!1%E>t zGkdG;&>#Z_4<#Wrm;W8sXOL<~G(}Zvn6k5G;;MA?OQh}qWCrVYl8HD5rx5oI8zyQ|A77$ixOdR28a@Cg76r72bJAW>F2S z;7RrX^s0|-ECo#!QlagiJgNVSJ}!(K#GLa{kmGCz0Q%^NYL`#*xeW+7TH_$HCq5Ee(JI?iqkkRS{j$$zN^9*7i3 zeuN565BCAQFi)P;E?uC$?VFR zh#9gnh7vL^xj9hN)Y^x}oSR*o+giFcV)nK8HH4xUiXp7KJ6sI7rpViRJ{;OV9`1j) zzn|sJ`ubA-Ji0!-zn`Dp&m&)64hagvv0@%iaL<6bnO-dr<6ZGc_M>2Cl^rQp=d>N# zAOdl6G+n8RdM1ypOHk>~lrxX1Y@oI=%IvN9WUqE^YUD+|6WwNOoX1%JWBWkFJ$nE^ F2LMr~gI53m literal 0 HcmV?d00001