接上一篇工程化表单代码进行了MVC封装
先看model
package models
import (
"log"
"strconv"
"strings"
"time"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql" // 导入数据库驱动
)
type Person struct {
Id int64 `form:"-"`
Name string `form:"username"`
Age int `orm:"column(t_age)"` //自定义列名称
Email string `orm:"column(t_email);size(50)";` //自定义列名称,大小
}
// 自定义表名(系统自动调用)
func (p *Person) TableName() string {
return strings.Join([]string{"t_person", strconv.Itoa(time.Now().Second())}, "")
}
// 设置引擎为 INNODB
func (p *Person) TableEngine() string {
return "INNODB"
}
type PersonService interface {
Insert(p Person) int64
}
type PersonServiceImpl struct {
}
func (personServiceImpl PersonServiceImpl) Insert(p Person) int64 {
o := orm.NewOrm()
//传地址
id, err := o.Insert(&p)
if err != nil {
str := strings.Join([]string{"id:", strconv.FormatInt(id, 10)}, "")
log.Println(str)
}
return id
}
func init() {
orm.RegisterDataBase("default", "mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8", 30)
orm.RegisterModel(new(Person))
orm.RunSyncdb("default", false, true)
}
集成了beego orm框架 周威学Go从入门到放弃第十四篇(beego框架入门篇)
controller层:
package controllers
import (
"hello/models"
//. "log"
"time"
"github.com/astaxie/beego"
)
type AddController struct {
beego.Controller
}
func (this *AddController) Prepare() {
//Println("Prepare方法一定会执行 在get post等之前,在init之后")
}
func (this *AddController) Finish() {
//Println("Finish 在get post等之后")
}
func (this *AddController) Post() {
u := models.Person{}
if err := this.ParseForm(&u); err == nil {
var personService models.PersonService
personService = new(models.PersonServiceImpl)
id := personService.Insert(u)
u.Id = id
}
this.Data["json"] = map[string]interface{}{"code": "200", "data": u}
this.ServeJSON()
}
func (this *AddController) Get() {
//不同环境的配置读取
username_dev := beego.AppConfig.String("dev::username")
//返回到页面
//this.Ctx.WriteString(rs)
//传参数给页面
this.Data["Author"] = username_dev
this.Data["CreateTime"] = time.Now()
//跳转到相关页面
this.TplName = "index.tpl"
}
并对表名进行了自定义,加上了列限制,数据库引擎自定义