1、xorm介紹mysql
xorm是一個Go語言的ORM庫。經過它能夠使數據庫操做很是簡便。xorm的目標並非讓你徹底不去學習SQL,xorm能夠解決絕大部分的簡單SQL需求。git
2、環境準備github
(1)下載xorm和mysql驅動sql
$ 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
建立完數據庫後,導入如下數據庫腳本。json
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結構體。tcp
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表的字段一一對應。學習
3、第一個Hello World測試
(1)建立xorm.Engine實例。url
// 構建一個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 \n", 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)運行測試,效果以下圖所示
4、反向生成實體
先進入工程所在路徑,而後執行如下命令。
# 命令格式
xorm reverse mysql [username]:[password]@/[database]?charset=utf8 [template]
例如:xorm reverse mysql root:root@/fox?charset=utf8 templates/goxorm12345上面命令會把數據庫表反向生成models/**的實體。---------------------