在这之前先介绍几个概念:
什么是gorose?
gorose是一个小巧强悍的golang orm,借鉴自laravel's eloquent的优雅api及链式调用,让数据库操作称为一种享受.
什么是orm?
http://www.ruanyifeng.com/blog/2019/02/orm-tutorial.html 阮一峰的网络日志
https://blog.csdn.net/u012585964/article/details/52412520 理解ORM和数据持久化
gorose的安装与手册
安装:go get -u github.com/gohouse/gorose
手册:https://github.com/gohouse/gorose
数据库配置
既然要操作数据库,那么首先进行数据库的配置,这里我们操作的是Mysql数据库,所以首先进行Mysql的驱动配置:
_ "github.com/gohouse/gorose/driver/mysql"
// or
import _ "github.com/go-sql-driver/mysql"
// 单一数据库配置
type DbConfigSingle struct {
Driver string // 驱动: mysql/sqlite/oracle/mssql/postgres
EnableQueryLog bool // 是否开启sql日志
SetMaxOpenConns int // (连接池)最大打开的连接数,默认值为0表示不限制
SetMaxIdleConns int // (连接池)闲置的连接数
Prefix string // 表前缀
Dsn string // 数据库链接
}
单一数据库的配置参数如上,DbConfigSingle为gorose包中提前定义好的一个结构体类型,包含了数据库的若干个属性。这里我们只配置了Driver和Dsn两个参数,这里注意Dsn的文件格式:"用户名:密码@tcp(IP:端口号)/数据库名称?charset=utf8"
随后通过gorose中的Open方法来打开配置文件:
connection, err := gorose.Open(DbConfig)
Open的源码如下,可以看出返回值为一个指针类型的Connection,里面包含很多方法,比如Newsession(),Table(),Query()等等
我们链接了数据库, 并获取到了链接实例*Connection下面 我们配置表结构, 以便后续使用
我们可以使用struct结构体来指定表名和字段, 同时, 我们也可以string字符串来指定表名
以test_table表为例
我们可以定义一个结构体来提取Mysql中的数据
type Users struct {
Name string `orm:"name"`
Age int `orm:"age"`
Uid int `orm:"id"`
}
//该字段在orm中会被忽略掉,起注释作用
这里我们定义了一个结构体Users以及对应的一个方法TableName(),
这里的struct解析后, 会获取到字段 age,uid.
不难看出, 指定了tag的字段会解析对应的orm key
的值, 如果没有指定tag, 则获取字段本身的值
这里的TableName()
则是指定表名(users)用的, 如果没有该方法, 则或获取struct本身的名字Users
用法示例:
var user Users
var users []Users
db.Table(&user).Select() // 获取一条
db.Table(&users).Limit(10).Select() // 获取10条