Beego MySQL

配置默认运行模式

$ vim conf/app.go
runmode = dev

根据运行模式创建MySQL独立配置文件

$ vim conf/database.ini
[dev]
dbdebug = true
dbalias = default
dbdriver = mysql
dbhost = 127.0.0.1
dbport = 3306
dbuser = root
dbpassword = root
dbname = gmms
dbprefix = ""
dbcharset = utf8mb4
dbloc = Local
maxIdleConns = 1000
maxOpenConns = 2000

创建工具包提供从配置文件读取数据库链接配置并建立连接

$ vim utils/db.go
package utils

import (
    "github.com/astaxie/beego/config"
    "github.com/astaxie/beego/logs"
    "github.com/astaxie/beego/orm"
    _ "github.com/go-sql-driver/mysql"
)

//定义数据库连接配置
type DbConfig struct{
    Debug bool
    Alias string
    Driver string
    DSN string
    MaxOpenConns int//最大连接数
    MaxIdleConns int//最大空闲连接数
}

//加载数据库配置
func loadDB() DbConfig {
    filename := "conf/database.ini"
    conf, err := config.NewConfig("ini", filename)
    if err != nil {
        logs.Error(err)
    }

    dbdebug, err := conf.Bool("dbdebug")
    if err != nil {
        logs.Error(err)
    }

    dbalias := conf.String("dbalias")
    dbdriver := conf.String("dbdriver")
    dbhost := conf.String("dbhost")
    dbport := conf.String("dbport")
    dbname := conf.String("dbname")
    dbuser := conf.String("dbuser")
    dbpassword := conf.String("dbpassword")
    dbcharset := conf.String("dbcharset")
    dbloc := conf.String("dbloc")

    maxIdleConns, err := conf.Int("maxIdleConns")
    maxOpenConns, err := conf.Int("maxOpenConns")
    if err != nil {
        logs.Error(err)
    }

    dsn := dbuser + ":" + dbpassword + "@tcp(" + dbhost + ":" + dbport + ")/" + dbname + "?charset=" + dbcharset + "&loc=" + dbloc

    dbConfig := DbConfig{}
    dbConfig.Debug = dbdebug
    dbConfig.Alias = dbalias
    dbConfig.Driver = dbdriver
    dbConfig.DSN = dsn
    dbConfig.MaxOpenConns = maxOpenConns
    dbConfig.MaxIdleConns = maxIdleConns

    return dbConfig
}

//初始化
func InitDB(){
    //加载配置
    dbconfig := loadDB()
    //开启调试
    orm.Debug = dbconfig.Debug
    //注册驱动
    orm.RegisterDriver(dbconfig.Driver, orm.DRMySQL)
    //注册数据库
    err := orm.RegisterDataBase(dbconfig.Alias, dbconfig.Driver, dbconfig.DSN, dbconfig.MaxOpenConns, dbconfig.MaxIdleConns)
    if err != nil{
        logs.Error(err)
    }
}

创建用户模型

$ vim models/user.go
package models

import (
    "github.com/astaxie/beego/orm"
    "time"
)

//定义表结构
type User struct {
    Id int `orm:"auto; pk"`
    UserName string `orm:"size(32); unique; column(username)"`
    Email string `orm:"size(255); unique"`
    CreatedAt time.Time `orm:"type(datetime); auto_now_add; null"`
    UpdatedAt time.Time `orm:"type(datetime); auto_now; null"`
    Status int8 `orm:"default(0)"`
}

//定义表名
func (u *User) TableName() string{
    return "users"
}

//定义引擎
func (u *User) TableEngine() string{
    return "INNODB"
}

//定义普通索引
func (u *User) TableIndex() [][]string{
    return [][]string{
        []string{"Id", "Username"},
    }
}

func init() {
    //注册模型
    orm.RegisterModel(new(User))
}

根据模型创建数据表

//数据库初始化
utils.InitDB()
//注册模型
orm.RegisterModel(new(User))
//创建数据表
orm.RunSyncdb("default", false, true)

创建路由

$ vim routers/router.go
package routers

import (
    "gmms/controllers"
    "github.com/astaxie/beego"
)

func init() {
    beego.Router("/", &controllers.MainController{})
    beego.Router("/test", &controllers.TestController{})
}

创建控制器

$ vim controllers/test.go
package controllers

import (
    "fmt"
    "github.com/astaxie/beego"
    "github.com/astaxie/beego/orm"
    "gmms/models"
    "gmms/utils"
)

type TestController struct {
    beego.Controller
}

func init(){
    //数据库初始化
    utils.InitDB()
}

func (this *TestController) Get() {
    this.TplName = "test.html"
}

func (this *TestController) Post() {
    //获取参数
    username := this.GetString("username")
    email := this.GetString("email")
    fmt.Printf("username:%v, email:%v\n", username, email)
    //数据操作
    o := orm.NewOrm()
    //唯一判断
    qs := o.QueryTable(new(models.User))
    cnt, err := qs.Filter("username", username).Count()
    fmt.Printf("cnt:%d, err:%v\n", cnt, err)
    if err != nil || cnt > 0{
        this.Ctx.WriteString("username already used")
        return
    }
    cnt, err = qs.Filter("email", email).Count()
    if err != nil || cnt > 0{
        this.Ctx.WriteString("email already used")
        return
    }
    //插入数据
    u := models.User{UserName:username, Email:email}
    id, err := o.Insert(&u)
    fmt.Printf("id:%d, err:%v\n", id, err)
    if err != nil{
        this.Ctx.WriteString("insert error")
        return
    }
    //成功跳转
    this.Ctx.Redirect(302, "/")
}

创建视图模板

$ vim views/test.html
<form method='post' action=''>
    <p><label>账户:</label><input type='text' name='username'/></p>
    <p><label>邮箱:</label><input type='email' name='email'/></p>
    <p><button type='submit'>确定</button></p>
</form>

运行服务

$ bee run

浏览器访问 http://127.0.0.1:8080/test

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值