周威学Go从入门到放弃第二十二篇(MVC设计模式)

上一篇工程化表单代码进行了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"

}

 

并对表名进行了自定义,加上了列限制,数据库引擎自定义

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值