GOLANG WEB框架 ORM笔记
2017-07-27 10:44
267 查看
环境:
golang 1.8
beego 1.9
1.生成项目
使用bee命令 bee api myproject
亦可直接指定数据库和表,
bee api myproject -table="table1,table2" -driver=mysql -conn="root:password@tcp(127.0.0.1:3306)/testdb"
如果这样做,直接会在 init()里注册orm数据库,并且连接字符窜直接写死,每个table会生成一个 model和controller,并且路由会很长很乱很烦,所以还是自已定制比较好,除项目名外不带其他参数:
默认会生成 两个按制器 和相应的两个模型,分别是:
myproject/controllers/object.go 和 myproject/controllers/user.go 及相应的 models下的 object.go和user.go
如果没有相应的表和功能,可以直接删除这四个文件.
2. 修改项目
首先从配置文件开始:
myproject/conf/app.conf
清除原来的内容,重新改写成:
修改main.go中的init()函数
3.手动添加model
之前生成项目时会自动生成 user和object的model,先删除了,然后在models目录下新建mytest目录,假设数据库里有表 mytable1,则在此目录下新建mytable1.go
myproject/models/mytest/mytable1.go:
这一部份是beego ORM的最主要部份,对像印射都在这里
相应的在controllers目录下新建mytable1的控制器,如果使用自动路由,所取的名字将影响到URL路径
myproject/controllers/mytable1.go:
最后,把此控制器添加到路由中:
在init中注释掉原来两个自动生成的路由,添加一个自动路由,
// @APIVersion 1.0.0
// @Title beego Test API
// @Description beego has a very cool tools to autogenerate documents for your API
// @Contact astaxie@gmail.com
// @TermsOfServiceUrl http://beego.me/ // @License Apache 2.0
// @LicenseUrl http://www.apache.org/licenses/LICENSE-2.0.html package routers
import (
"myproject/controllers"
"github.com/astaxie/beego"
)
func init() {
//ns := beego.NewNamespace("/v1",
// beego.NSNamespace("/object",
// beego.NSInclude(
// &controllers.ObjectController{},
// ),
// ),
// beego.NSNamespace("/user",
// beego.NSInclude(
// &controllers.UserController{},
// ),
// ),
//)
//beego.AddNamespace(ns)
beego.AutoRouter(&controllers.mytable1Controller{})
}
golang 1.8
beego 1.9
1.生成项目
使用bee命令 bee api myproject
亦可直接指定数据库和表,
bee api myproject -table="table1,table2" -driver=mysql -conn="root:password@tcp(127.0.0.1:3306)/testdb"
如果这样做,直接会在 init()里注册orm数据库,并且连接字符窜直接写死,每个table会生成一个 model和controller,并且路由会很长很乱很烦,所以还是自已定制比较好,除项目名外不带其他参数:
默认会生成 两个按制器 和相应的两个模型,分别是:
myproject/controllers/object.go 和 myproject/controllers/user.go 及相应的 models下的 object.go和user.go
如果没有相应的表和功能,可以直接删除这四个文件.
2. 修改项目
首先从配置文件开始:
myproject/conf/app.conf
清除原来的内容,重新改写成:
appname = myproject httpport = 8080 runmode = dev autorender = false copyrequestbody = true EnableDocs = true [dev] db_type = "mysql" db_user = "root" db_password = "123456" db_host = "127.0.0.1" db_port = 3306 db_database = "testdb" [prod] db_type = "mysql" db_user = "root" db_password = "prodpassword" db_host = "mydbserver.mydomain.com" db_port = 3306 db_database = "testdb"
修改main.go中的init()函数
func init() { dbtype := beego.AppConfig.String("db_type") dbuser:= beego.AppConfig.String("db_user") dbPassword := beego.AppConfig.String("db_password") dbhost := beego.AppConfig.String("db_host") dbase := beego.AppConfig.String("db_database") dbport,err := beego.AppConfig.Int("db_port") if err !=nil { dbport = 3306 } switch dbtype{ case "mysql": datasource:=fmt.Sprintf("%s:%s@tcp(%s:%d)/%s",dbuser,dbPassword,dbhost,dbport,dbase) orm.RegisterDataBase("default",dbtype,datasource) } }
3.手动添加model
之前生成项目时会自动生成 user和object的model,先删除了,然后在models目录下新建mytest目录,假设数据库里有表 mytable1,则在此目录下新建mytable1.go
myproject/models/mytest/mytable1.go:
package mytest import ( "github.com/astaxie/beego/orm" "reflect" ) type Mytable1 struct { Id string `orm:"column(id);pk"` TName string `orm:"column(t_name);size(50)"` TLastUpdate uint64 `orm:"column(t_lastUpdate);null"` TBody string `orm:"column(TBody);size(50);null"` } func (t *Mytable1) TableName() string { return "mytable1" } func init(){ orm.RegisterModel(new(Mytable1)) } func GetInfoNotNull() (ml []interface{},err error){ o:=orm.NewOrm() qs:=o.QueryTable(new(Mytable1)) var l []Mytable1 _,err= qs.Filter("TBody__isnull",true).All(&l, "Id", "TName", "TLastUpdate", "TBody") if err ==nil{ for _,v:=range l { m:=make(map[string]interface{}) val:=reflect.ValueOf(v) m["Id"]=val.FieldByName("Id").Interface() m["TName"]=val.FieldByName("TName").Interface() m["TLastUpdate"]=val.FieldByName("TLastUpdate").Interface() m["TBody"]=val.FieldByName("TBody").Interface() ml = append(ml,m) } return ml,nil }else{ return nil,err } }
这一部份是beego ORM的最主要部份,对像印射都在这里
相应的在controllers目录下新建mytable1的控制器,如果使用自动路由,所取的名字将影响到URL路径
myproject/controllers/mytable1.go:
package controllers import ( "github.com/astaxie/beego" "myproject/models/mytable1" "myproject/utils" ) type mytable1Controller struct { beego.Controller } // API:GetInfoNotNull // URL:http://127.0.0.1/myaction/GetInfoNotNull // Method: GET func (c *InfoController)GetInfoNotNull(){ l,err := myaction.GetInfoNotNull() if err != nil{ c.Data["json"] = err.Error() }else{ c.Data["json"] =utils.AjaxJson(l,"Success",len(l),utils.STATUS_SUCCESS)//c.Data["json"] = l } c.ServeJSON() }utiles.AjaxJson()只是我自已写的常量定义和JSON封装,使response显示好看一点,并没什么用.可以直接c.Data["json"]=l
最后,把此控制器添加到路由中:
在init中注释掉原来两个自动生成的路由,添加一个自动路由,
// @APIVersion 1.0.0
// @Title beego Test API
// @Description beego has a very cool tools to autogenerate documents for your API
// @Contact astaxie@gmail.com
// @TermsOfServiceUrl http://beego.me/ // @License Apache 2.0
// @LicenseUrl http://www.apache.org/licenses/LICENSE-2.0.html package routers
import (
"myproject/controllers"
"github.com/astaxie/beego"
)
func init() {
//ns := beego.NewNamespace("/v1",
// beego.NSNamespace("/object",
// beego.NSInclude(
// &controllers.ObjectController{},
// ),
// ),
// beego.NSNamespace("/user",
// beego.NSInclude(
// &controllers.UserController{},
// ),
// ),
//)
//beego.AddNamespace(ns)
beego.AutoRouter(&controllers.mytable1Controller{})
}
相关文章推荐
- golang实战使用gin+xorm搭建go语言web框架restgo详解6.1 模型M和Orm
- golang web框架 utron 的异常统一处理
- golang实战使用gin+xorm搭建go语言web框架restgo详解4 路由配置
- webservice xfire框架实例笔记
- Java学习笔记-《Java程序员面试宝典》-第5章Java Web-5.3框架(5.3.3-5.3.8)
- 我的第一个python web开发框架(29)——定制ORM(五)
- 从零开始写javaweb框架笔记22-使框架具备AOP特性-事务管理简介
- 【day 17】python编程:从入门到实践学习笔记-基于Django框架的Web开发-设计样式和部署(一)
- golang实战使用gin+xorm搭建go语言web框架restgo详解10 使用restgo搭建后台管理系统
- 笔记---初学 Java Web 开发,请远离各种框架,从 Servlet 开发
- golang实战使用gin+xorm搭建go语言web框架restgo详解5 控制器C
- golang web框架 gin 中template模板内容实时更新原理
- 2014.11.12学习笔记(ORM/AMD/框架)
- 基于Golang的http、web服务框架(SSSS)
- 自己写的三个框架,关于IOC,WEB,ORM
- 基于ORM的国产开源框架WebSharp在.Net中的应用
- 从零开始写javaweb框架笔记14-搭建轻量级JAVAWEB框架-实现Bean容器
- WEB框架研究笔记11(第一阶段完成)
- golang实战使用gin+xorm搭建go语言web框架restgo详解5.2 跳转和重定向
- golang web框架 配置文件读取 借鉴 beego