美文网首页
Beego MySQL

Beego MySQL

作者: JunChow520 | 来源:发表于2020-12-28 18:17 被阅读0次

配置默认运行模式

$ 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

相关文章

  • Beego MySQL

    配置默认运行模式 根据运行模式创建MySQL独立配置文件 创建工具包提供从配置文件读取数据库链接配置并建立连接 创...

  • go build fatal error: runtime: o

    用beego的时候,安装了redis、mysql和其他程序然后go build提示fatal error: run...

  • beego源码分析笔记一

    beego官网:https://beego.me/ beego 的架构 beego 的整体设计架构如下所示: 官方...

  • ota go 服务搭建

    整体设计: golang&beego 在设计中,采用了golang 语言,使用了开源的beego , beego ...

  • Beego Architecture

    https://beego.me/[https://beego.me/] Beego框架起始于2012年由中国程序...

  • beego orm 时间相差八小时

    问题 使用beego的orm时,mysql数据库为datetime格式的字段插入之后,数据库看到的时间会比正常时间...

  • beego项目中使用mongodb存储提交任务

    在用beego开发运维相关项目时,需要存储一些文档类型数据,此时用mysql没有mongodb来的方便;代码记录如...

  • beego生成api工程

    生成beego工程之前需要先配置好beego与bee环境 生成beego工程 本工程采用api的形式,不需要界面,...

  • Beego自动化文档(最新版)

    之前写过一篇使用Beego自动化api文档的文章:Beego自动化文档,随着Beego的更新,1.7.0之后Bee...

  • beego 连接mysql 增删改查

    1.创建数据库表 2.插入数据 2.数据库查询

网友评论

      本文标题:Beego MySQL

      本文链接:https://www.haomeiwen.com/subject/syetoktx.html