add gorm v2

add gorm v2 tools
This commit is contained in:
谢小军
2020-09-28 14:40:49 +08:00
parent 7ca9b28630
commit 3c1e58ce9a
7 changed files with 164 additions and 37 deletions

2
go.mod
View File

@@ -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
)

7
go.sum
View File

@@ -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=

View File

@@ -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
}

View File

@@ -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 {

37
mysqldbv1/log.go Normal file
View File

@@ -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")
}

76
mysqldbv1/mysqldb.go Normal file
View File

@@ -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()
}
}

Binary file not shown.