配置默认运行模式
$ 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
网友评论