一、xorm介绍
xorm是一个Go语言的ORM库。通过它可以使数据库操作非常简便。xorm的目标并不是让你完全不去学习SQL,xorm可以解决绝大部分的简单SQL需求。
二、环境准备
(1)下载xorm和mysql驱动
$ go get github.com/go-xorm/cmd/xorm
$ go get -u github.com/go-sql-driver/mysql
1
2
(2)创建数据库
$ create database lottery
$ use lottery
1
2
创建完数据库后,导入以下数据库脚本。
DROP TABLE IF EXISTS `lt_user`;
CREATE TABLE `lt_user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL DEFAULT '' COMMENT '用户名',
`blacktime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '黑名单限制到期时间',
`realname` varchar(50) NOT NULL DEFAULT '' COMMENT '联系人',
`mobile` varchar(50) NOT NULL DEFAULT '' COMMENT '手机号',
`address` varchar(255) NOT NULL DEFAULT '' COMMENT '联系地址',
`sys_created` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
`sys_updated` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '修改时间',
`sys_ip` varchar(50) NOT NULL DEFAULT '' COMMENT 'IP地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=40652 DEFAULT CHARSET=utf8;
1
2
3
4
5
6
7
8
9
10
11
12
13
(3)新建一个Go工程,新建一个models文件夹,然后在文件夹下定义LtUser结构体。
type LtUser struct {
Id int `json:"id" xorm:"not null pk autoincr INT(10)"`
Username string `json:"username" xorm:"not null default '' comment('用户名') VARCHAR(50)"`
Blacktime int `json:"blacktime" xorm:"not null default 0 comment('黑名单限制到期时间') INT(10)"`
Realname string `json:"realname" xorm:"not null default '' comment('联系人') VARCHAR(50)"`
Mobile string `json:"mobile" xorm:"not null default '' comment('手机号') VARCHAR(50)"`
Address string `json:"address" xorm:"not null default '' comment('联系地址') VARCHAR(255)"`
SysCreated int `json:"sys_created" xorm:"not null default 0 comment('创建时间') INT(10)"`
SysUpdated int `json:"sys_updated" xorm:"not null default 0 comment('修改时间') INT(10)"`
SysIp string `json:"sys_ip" xorm:"not null default '' comment('IP地址') VARCHAR(50)"`
}
1
2
3
4
5
6
7
8
9
10
11
结构体中的每个属性与lt_user表的字段一一对应。
三、第一个Hello World
(1)创建xorm.Engine实例。
// 构建一个xorm.Engine实例
func NewDbEngine() *xorm.Engine{
// url格式:[username]:[password]@tcp([ip]:[port])/[database]?charset=utf8
dbUrl := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8",
"root",
"root",
"127.0.0.1",
3306,
"lottery")
// 创建Engine实例
engine, err := xorm.NewEngine("mysql", dbUrl)
if err != nil {
panic(err)
}
// 显示sql
engine.ShowSQL(true)
return engine
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(2)定义测试方法
func main() {
// 创建xorm.Engine实例
dbEngine := NewDbEngine(http://www.my516.com)
// 定义一个切片,保存所有用户
datalist := make([]models.LtUser, 0)
// 按照id的倒序查询用户
err := dbEngine.Desc("id").Find(&datalist)
// 判断查询是否成功
if err != nil {
panic(err)
}
// 遍历输出结果
for i := range datalist {
fmt.Printf("%v
", datalist[i])
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(3)导入mysql驱动
_ "github.com/go-sql-driver/mysql"
1
(4)运行测试,效果如下图所示
四、反向生成实体
先进入工程所在路径,然后执行以下命令。
# 命令格式
xorm reverse mysql [username]:[password]@/[database]?charset=utf8 [template]
例如:
xorm reverse mysql root:root@/fox?charset=utf8 templates/goxorm
1
2
3
4
5
上面命令会把数据库表反向生成models/**的实体。
---------------------