接着上篇来写《和lock一块儿学beego 博客系统开发为例(一)》mysql
这篇主要完成如下事项:git
1.beego框架,项目的创建github
2. 表数据的设计sql
3. 模型的创建数据库
(这篇在公司里写的,用的是win机器)api
1、beego项目的创建浏览器
beego自带的工具bee是一个很是好的工具,能够建立项目及API接口等。因此在创建项目以前,务必先下载bee工具,bash
在命令符下:框架
go get github.com/beego/bee
安装好后,能够在系统环境变量加添加bee的路径,方便后续直接bee 命令执行工具
以win为例:这个目录会有bee.exe
C:\GOPATH\bin
如今能够直接在cmd下,bee命令测试了。
咱们能够切换到C:\GOPATH\src目录下,用bee new blog命令来建立项目
bee new blog
会自动生成以下文件:
这样beego项目建立完成了。
在这里介绍一下bee的命令经常使用参数:
new :建立新项目
run :运行项目,默认是以8080端口运行,能够在浏览器运行localhost:8080,出会提示页面
api :是用来建立api项目的,生成的目录略有不一样
2、表数据的设计
既然是简单的博客,那么表也是很经常使用的,以下
article:博客文章表
comment:博客评论表
user:用户表
user_profile:用户详细表
album:相册表
这几张表,足够玩转一个blog了~由于是简单blog吗~
在这里说明一下,若是在项目里建立model话,能够自动生成表,这里先不做说明,直接给SQL语句,在库中直接运行,库名称:blog
CREATE TABLE `album` ( `id` int(10) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL DEFAULT '' COMMENT '文章标题', `picture` varchar(255) DEFAULT '' COMMENT 'Picture', `keywords` varchar(2550) DEFAULT '' COMMENT '关键词', `summary` varchar(255) DEFAULT '', `created` int(10) DEFAULT '0' COMMENT '发布时间', `viewnum` int(10) DEFAULT '0' COMMENT '阅读次数', `status` tinyint(1) DEFAULT '1' COMMENT '状态: 0草稿,1已发布', PRIMARY KEY (`id`), KEY `INDEX_TCVS` (`title`,`created`,`viewnum`,`status`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='相册'; CREATE TABLE `article` ( `id` int(10) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL DEFAULT '' COMMENT '文章标题', `uri` varchar(255) DEFAULT '' COMMENT 'URL', `keywords` varchar(2550) DEFAULT '' COMMENT '关键词', `summary` varchar(255) DEFAULT '', `content` longtext NOT NULL COMMENT '正文', `author` varchar(20) DEFAULT '' COMMENT '做者', `created` int(10) DEFAULT '0' COMMENT '发布时间', `viewnum` int(10) DEFAULT '0' COMMENT '阅读次数', `status` tinyint(1) DEFAULT '1' COMMENT '状态: 0草稿,1已发布', PRIMARY KEY (`id`), KEY `INDEX_TCVS` (`title`,`created`,`viewnum`,`status`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文章'; CREATE TABLE `user` ( `id` int(10) NOT NULL AUTO_INCREMENT, `phone` varchar(20) NOT NULL DEFAULT '' COMMENT '用户名', `password` varchar(255) NOT NULL DEFAULT '' COMMENT '密码', `created` int(10) DEFAULT NULL COMMENT '注册时间', `changed` int(10) DEFAULT NULL COMMENT '编辑时间', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态: 0屏蔽,1正常', `user_profile_id` int(10) DEFAULT NULL, PRIMARY KEY (`id`), CONSTRAINT `user_profile_id` FOREIGN KEY (`id`) REFERENCES `user_profile` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户'; CREATE TABLE `user_profile` ( `id` int(10) NOT NULL AUTO_INCREMENT, `realname` varchar(15) DEFAULT NULL, `sex` tinyint(1) DEFAULT '1' COMMENT '1boy,0girl', `birth` varchar(20) NOT NULL DEFAULT '' COMMENT '生日', `email` varchar(20) DEFAULT NULL, `phone` varchar(11) DEFAULT NULL, `address` varchar(255) NOT NULL DEFAULT '' COMMENT '地址', `hobby` varchar(255) NOT NULL DEFAULT '' COMMENT '爱好', `intro` text COMMENT '介绍', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户详情'; CREATE TABLE `comment` ( `id` int(10) NOT NULL AUTO_INCREMENT, `article_id` int(10) DEFAULT NULL, `nickname` varchar(15) DEFAULT NULL, `uri` varchar(255) DEFAULT NULL, `content` text, `created` int(10) DEFAULT '0', `status` tinyint(1) DEFAULT '1' COMMENT '0屏蔽,1正常', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='blog评论';
到此,表的设计已经所有完成。能够根据本身想法,多创建几个表,如标签表,文章分类表,相册分类表
3、Beego中表模型创建
在go语言中,有一个很是强大的struct,能够自定义和引用;在beego中,咱们的表模型其实就是用struct属性。
先以article表为例:
struct里定义的,就是article表中的字段,以下:
type Article struct { Id int Title string Uri string Keywords string Summary string Content string Author string Created int64 Viewnum int Status int }
接下来,我详细介绍一下。
在models文件夹下创建一个文件:article.go,文件内容以下:
package models import ( "time" "github.com/astaxie/beego/orm" _ "github.com/go-sql-driver/mysql" ) type Article struct { Id int Title string Uri string Keywords string Summary string Content string Author string Created int64 Viewnum int Status int } func (this *Article) TableName() string { return "article" } func init() { orm.RegisterModel(new(Article)) }
咱们再看一下user模型:在models创建文件,user.go
这里创建了关联的表,一对一关系,在beego中表的命名是以驼峰形式命名的,如UserProfile,在数据库实际上是 user_profile形式存在,会自动以大写字母分割加下划线生成表名。
在注册多表模型的时候,orm.RegisterModel(new(User), new(UserProfile)) 来初始化。
package models import ( "fmt" "github.com/astaxie/beego/orm" "github.com/gogather/com" ) type User struct { Id int Phone string UserProfile *UserProfile `orm:"rel(one)"` Password string Status int Created int64 Changed int64 } type UserProfile struct { Id int Realname string Sex int Birth string Email string Phone string Address string Hobby string Intro string User *User `orm:"reverse(one)"` } func (this *User) TableName() string { return "user" } func init() { orm.RegisterModel(new(User), new(UserProfile)) // }
其它表的模型创建和上面的差很少,本身试着创建一下;若是中间报错,多是一些包或变量未使用,编译的时候会出错,这没事,本身试着会注释。在保存的时候,bee run会自动检测出错误,你们要学会使用。
最后截图看看:
好的,今天先介绍到这里,下篇主要完成如下工做:
1.模型里如何建立方法
2. 数据库的引用
3. beego的配置文件使用