Go 标准库提供的数据库接口database/sql比较底层,使用它来操作数据库非常繁琐,而且容易出错。于是社区开源了不少第三方库,比如sqlc工具,以及各式各样的 ORM (Object Relational Mapping,对象关系映射库),如gorm和xorm。
xorm 模块安装
# 安装 xorm
go get xorm.io/xorm
# 安装 mysql 驱动
go get github.com/go-sql-driver/mysql
获取数据库连接
xorm中将数据库连接后的对象统一封装到了*xorm.Engine中,所以,我们只需要通过NewEngine()函数拿到Engine对象,即可实现对数据库的操作:
var engine *xorm.Engine
var err error
engine, err = xorm.NewEngine("mysql", "用户名:密码@tcp(数据库地址:数据库端口)/数据库?charset=utf8&parseTime=True")
快速使用
- 将数据库中的表与对应 Go 代码中的结构体做同步。在数据库内创建一个表:
package main
import (
"log"
"time"
_ "github.com/go-sql-driver/mysql"
"xorm.io/xorm"
)
type TUser struct {
Id int64 `xorm:"pk autoincr BIGINT(20)"`
//昵称
NickName string `xorm:"VARCHAR(255)"`
//用户名
UserName string `xorm:"VARCHAR(255)"`
//密码
Pwd string `xorm:"VARCHAR(255)"`
//是否已删除.0为正常,1为已删除
Deleted int `xorm:"default 0 TINYINT(1)"`
CreateTime time.Time `xorm:"not null comment('创建时间') DATETIME"`
}
func main() {
url := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=True",
"用户名",
"密码",
"数据库地址",
"3306",
"try")
db, err := xorm.NewEngine("mysql", url)
if err != nil {
log.Fatal(err)
}
err = db.Sync2(new(TUser))
if err != nil {
log.Fatal(err)
}
}
上面的代码将会在数据库生成一张叫t_user的表,内容如下:
去看大佬的博客-Go 每日一库之 xorm
xorm结构体映射规则和表操作
我们在field对应的Tag中对Column的一些属性进行定义,用于对我们的项目中的数据库表字段进行设置和限定。具体看大佬博客:xorm框架学习系列(二):xorm结构体映射规则和表操作,xorm的使用(二)结构体映射规则