sqlite 及test
This commit is contained in:
parent
b2090ff793
commit
40a95aafbc
|
|
@ -15,3 +15,6 @@
|
|||
# Dependency directories (remove the comment below to include it)
|
||||
# vendor/
|
||||
go.sum
|
||||
tmp/
|
||||
.vscode/
|
||||
logs/
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@
|
|||
|
||||
#### 组件实现
|
||||
* MySQL
|
||||
> "gorm.io/driver/mysql"
|
||||
> "gorm.io/gorm"
|
||||
> "gorm.io/gorm/logger"
|
||||
> "gorm.io/plugin/dbresolver"
|
||||
> 支持连接池dbresolver
|
||||
* Sqlite
|
||||
> 支持多级目录创建
|
||||
|
|
|
|||
2
go.mod
2
go.mod
|
|
@ -4,6 +4,7 @@ go 1.17
|
|||
|
||||
require (
|
||||
gorm.io/driver/mysql v1.1.2
|
||||
gorm.io/driver/sqlite v1.1.4
|
||||
gorm.io/gorm v1.21.14
|
||||
gorm.io/plugin/dbresolver v1.1.0
|
||||
)
|
||||
|
|
@ -12,4 +13,5 @@ require (
|
|||
github.com/go-sql-driver/mysql v1.6.0 // indirect
|
||||
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||
github.com/jinzhu/now v1.1.2 // indirect
|
||||
github.com/mattn/go-sqlite3 v1.14.5 // indirect
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package mysql
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"gorm.io/driver/mysql"
|
||||
|
|
@ -34,6 +35,10 @@ func New() (*gorm.DB, error) {
|
|||
return _db, nil
|
||||
}
|
||||
|
||||
if _conf == nil {
|
||||
return nil, errors.New("组件未初始化,请执行Init!")
|
||||
}
|
||||
|
||||
var err error
|
||||
_db, err = gorm.Open(mysql.Open(_conf.ConnString), &gorm.Config{
|
||||
SkipDefaultTransaction: true,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
package sqlite
|
||||
|
||||
type Config struct {
|
||||
DBFile string //DB文件名
|
||||
}
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
package sqlite
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
_conf *Config
|
||||
_db *gorm.DB
|
||||
)
|
||||
|
||||
//Init mysql初始化
|
||||
func Init(conf *Config) error {
|
||||
if conf != nil {
|
||||
_conf = conf
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
//New 创建实例
|
||||
func New() (*gorm.DB, error) {
|
||||
if _db != nil {
|
||||
return _db, nil
|
||||
}
|
||||
|
||||
if _conf == nil {
|
||||
return nil, errors.New("组件未初始化,请执行Init!")
|
||||
}
|
||||
|
||||
dir, _ := filepath.Split(_conf.DBFile)
|
||||
if dir != "" {
|
||||
_, err := os.Stat(dir)
|
||||
if os.IsNotExist(err) {
|
||||
if err := os.MkdirAll(dir, 0755); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var err error
|
||||
_db, err = gorm.Open(sqlite.Open(_conf.DBFile), &gorm.Config{
|
||||
SkipDefaultTransaction: true,
|
||||
Logger: logger.Default.LogMode(logger.Silent),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return _db, nil
|
||||
}
|
||||
|
||||
func Migrate(dest ...interface{}) error {
|
||||
db, err := New()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return db.AutoMigrate(dest...)
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
package test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"myschools.me/suguo/norm/sqlite"
|
||||
)
|
||||
|
||||
type ABC struct {
|
||||
A string
|
||||
B string
|
||||
C string
|
||||
}
|
||||
|
||||
type CBA struct {
|
||||
D string
|
||||
E string
|
||||
F string
|
||||
}
|
||||
|
||||
func TestSqlite(t *testing.T) {
|
||||
conf := &sqlite.Config{
|
||||
DBFile: "tmp1/abc/aaaaa/abc.db",
|
||||
}
|
||||
if err := sqlite.Init(conf); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
db, err := sqlite.New()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if db == nil {
|
||||
t.Error("DB nil")
|
||||
}
|
||||
|
||||
if err := sqlite.Migrate(&ABC{}, &CBA{}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue