Skip to content

Commit 82805bf

Browse files
author
XieBiao
committed
apply xorm
1 parent d180f41 commit 82805bf

File tree

9 files changed

+161
-113
lines changed

9 files changed

+161
-113
lines changed

config/db.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package config
2+
3+
import (
4+
"github.com/BurntSushi/toml"
5+
"errors"
6+
)
7+
8+
type Connection struct {
9+
Driver string
10+
Dsn string
11+
Log bool
12+
LogLevel int
13+
LogFile string
14+
}
15+
16+
type Connections struct {
17+
Connections map[string]Connection
18+
}
19+
20+
func GetDbConfigs() map[string]Connection {
21+
22+
var conns Connections
23+
if _, err := toml.DecodeFile("config/db.toml", &conns); err != nil {
24+
panic(errors.New("parse db.toml fail"))
25+
}
26+
return conns.Connections
27+
}
28+
29+
func GetDbConfig(id string) Connection {
30+
conns := GetDbConfigs()
31+
conn, err := conns[id]
32+
if !err {
33+
panic(errors.New("connection " + id + " is not available"))
34+
}
35+
return conn
36+
}

config/db.toml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
[connections]
2+
3+
[connections.default]
4+
driver = "mysql"
5+
dsn = "root:123456@tcp(127.0.0.1:3306)/test"
6+
log = true
7+
loglevel = 0
8+
logfile = "./sql.log"
9+
10+
[connections.db1]
11+
driver = "sqlite3"
12+
dsn = "./test.db"
13+
log = false
14+
loglevel = 0
15+
# empty logfile means log into console
16+
logfile = ""
17+
18+
[connections.db2]
19+
driver = "mysql"
20+
dsn = "root:123456@tcp(127.0.0.1:3306)/db2"
21+
log = false
22+
loglevel = 0
23+
logfile = "./sql.log"

core/model/db.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package model
2+
3+
import (
4+
"github.com/go-xorm/xorm"
5+
"github.com/hhxsv5/go-db-proxy-api/config"
6+
"github.com/go-xorm/core"
7+
"os"
8+
)
9+
10+
type DB struct {
11+
Cfg config.Connection
12+
Engine *xorm.Engine
13+
}
14+
15+
func NewDB(conn string) *DB {
16+
cfg := config.GetDbConfig(conn)
17+
db := &DB{cfg, nil}
18+
19+
var err error
20+
db.Engine, err = xorm.NewEngine(cfg.Driver, cfg.Dsn)
21+
if err != nil {
22+
panic(err)
23+
}
24+
25+
if cfg.Log {
26+
//log into file
27+
if len(cfg.LogFile) > 0 {
28+
f, err := os.OpenFile(cfg.LogFile, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
29+
if err != nil {
30+
panic(err)
31+
}
32+
db.Engine.SetLogger(xorm.NewSimpleLogger(f))
33+
} //else log into console
34+
35+
db.Engine.ShowSQL(true)
36+
db.Engine.ShowExecTime(true)
37+
db.Engine.Logger().SetLevel(core.LogLevel(cfg.LogLevel))
38+
}
39+
40+
return db
41+
}

drivers/base.go

Lines changed: 0 additions & 84 deletions
This file was deleted.

drivers/database.go

Lines changed: 0 additions & 7 deletions
This file was deleted.

drivers/mysql.go

Lines changed: 0 additions & 10 deletions
This file was deleted.

examples/main.go

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,12 @@
11
package main
22

33
import (
4-
"github.com/hhxsv5/go-db-proxy-api/drivers"
54
"fmt"
5+
"github.com/hhxsv5/go-db-proxy-api/models"
66
)
77

88
func main() {
9-
m := drivers.NewMySQL("user:password@tcp(120.0.0.1:3306)/dbname")
10-
err := m.Open()
11-
if err != nil {
12-
panic(err.Error())
13-
}
14-
defer m.Close()
15-
16-
rows := m.Query("select id,cellphone from user order by id desc limit 5")
17-
18-
fmt.Println(rows)
19-
9+
user := models.CreateUser("18780207350")
10+
fmt.Println(user)
11+
fmt.Printf("%p", user)
2012
}

models/base.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package models
2+
3+
import (
4+
_ "github.com/go-sql-driver/mysql" //remember: import xxx driver to init
5+
"github.com/go-xorm/xorm"
6+
"github.com/hhxsv5/go-db-proxy-api/core/model"
7+
"github.com/go-xorm/core"
8+
)
9+
10+
const connection = "default" //default connection in file db.toml
11+
12+
var (
13+
Db *model.DB
14+
Orm *xorm.Engine
15+
)
16+
17+
func init() {
18+
Db = model.NewDB(connection)
19+
Orm = Db.Engine
20+
21+
//...some settings for xorm
22+
Orm.SetMapper(core.GonicMapper{})
23+
}

models/user.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package models
2+
3+
import (
4+
"github.com/go-xorm/builder"
5+
)
6+
7+
type User struct {
8+
Id uint32
9+
Cellphone string
10+
InsertTime uint32 `xorm:"created"`
11+
ModifyTime uint32 `xorm:"updated"`
12+
}
13+
14+
func CreateUser(cellphone string) *User {
15+
user := new(User)
16+
user.Cellphone = cellphone
17+
_, err := Orm.Insert(user)
18+
if err != nil {
19+
return nil
20+
}
21+
return user
22+
}
23+
24+
func GetUserById(id uint32) *User {
25+
var user *User
26+
Orm.Where("id=?", id).Limit(1, 0).Get(user)
27+
return user
28+
}
29+
30+
func GetUsersByIds(ids []uint32) *[]User {
31+
var users *[]User
32+
Orm.Where(builder.In("id", ids)).Find(users)
33+
return users
34+
}

0 commit comments

Comments
 (0)