Go xorm的连接和初始化操作

49 min read

在初始化方法里面的完成xorm.Engine对象的初始化,供其它操作类进行组合

package tool

import (
	"CloudRestaurant/model"
	_ "github.com/go-sql-driver/mysql"
	"github.com/go-xorm/xorm"
)

var DbEngine *Orm

type Orm struct {
	*xorm.Engine
}

// OrmEngine 初始化数据库连接,并返回一个Orm对象
// 此函数在main.go中调用
func OrmEngine(cfg *Config) (*Orm, error) {
	// 数据库配置
	database := cfg.Database
	// 数据库连接信息
	conn := database.User + ":" + database.Password + "@tcp(" + database.Host + ":" + database.Port + ")/" + database.DbName + "?charset=" + database.Charset
	// 初始化数据库连接
	engine, err := xorm.NewEngine(database.Driver, conn)
	if err != nil {
		return nil, err
	}

	// 输出SQL语句
	engine.ShowSQL(database.ShowSql)

	// 同步数据库结构与数据库表
	err = engine.Sync2(new(model.SmsCode))
	if err != nil {
		return nil, err
	}

	orm := new(Orm)
	orm.Engine = engine
	DbEngine = orm

	return orm, nil
}
package main

import (
	"github.com/gin-gonic/gin"
	"CloudRestaurant/tool"
	"CloudRestaurant/controller"
	"github.com/goes/logger"
)

func main() {

	cfg, err := tool.ParseConfig("./config/app.json")

	if err != nil {
		panic(err.Error())
	}

	_, err = tool.OrmEngine(cfg)
	if err != nil {
		logger.Error(err.Error())
		return
	}

	app := gin.Default()

	registerRouter(app)

	app.Run(cfg.AppHost + ":" + cfg.AppPort)
}

//路由设置
func registerRouter(router *gin.Engine) {
	new(controller.HelloController).Router(router)
	new(controller.MemberController).Router(router)
}

在入口文件进行数据的库的初始化

package dao

import (
	"CloudRestaurant/model"
	"CloudRestaurant/tool"
	"github.com/goes/logger"
)

// 直接组合到Dao struct 中供其调用
type MemberDao struct {
	*tool.Orm
}

func (md *MemberDao) InsertCode(sms model.SmsCode) int64 {
	result, err := md.InsertOne(&sms)
	if err != nil {
		logger.Error(err.Error())
	}
	return result
}