beego ORM 是一个强大的 Go 语言 ORM 框架。她的灵感主要来自 Django ORM 和 SQLAlchemy。
目前该框架仍处于开发阶段,可能发生任何导致不兼容的改动。
已支持数据库驱动:
- MySQL:github.com/go-sql-driver/mysql
- PostgreSQL:github.com/lib/pq
- Sqlite3:github.com/mattn/go-sqlite3
以上数据库驱动均通过基本测试,但我们仍需要您的反馈。
ORM 特性:
- 支持 Go 的所有类型存储
- 轻松上手,采用简单的 CRUD 风格
- 自动 Join 关联表
- 跨数据库兼容查询
- 允许直接使用 SQL 查询/映射
- 严格完整的测试保证 ORM 的稳定与健壮
安装 ORM:
go get github.com/astaxie/beego/orm
简单示例:
[mysql]
user=root
pass=root
host=192.168.1.100
port=3306
dbname=demo
max_idle=20
max_conn=20
package db
import (
"fmt"
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
)
func init() {
orm.RegisterDriver("mysql", orm.DRMySQL)
mysqluser := beego.AppConfig.String("mysql::user")
mysqlpass := beego.AppConfig.String("mysql::pass")
mysqlhost := beego.AppConfig.String("mysql::host")
mysqlport := beego.AppConfig.String("mysql::port")
mysqldbname := beego.AppConfig.String("mysql::dbname")
mysqlulr := fmt.Sprintf("%v:%v@tcp(%v:%v)/%v?charset=utf8", mysqluser, mysqlpass, mysqlhost, mysqlport, mysqldbname)
//设置最大空闲连接
maxIdle, _ := beego.AppConfig.Int("mysql::max_idle")
//设置最大数据库连接 (go >= 1.2)
maxConn, _ := beego.AppConfig.Int("mysql::max_conn")
orm.RegisterDataBase("default", "mysql", mysqlulr, maxIdle, maxConn)
}
package models
import (
_ "zhsq_go/user_center/db"
"github.com/astaxie/beego/orm"
)
// LoginParam 登录参数
type LoginParam struct {
CompanyId int64 `json:"companyId"`
LoginName string `json:"loginName"`
Password string `json:"password"`
}
type QueryLoginData struct {
Id int64 `orm:"auto"`
UserId string `orm:"column(user_id)"`
}
func init() {
orm.RegisterModel(new(QueryLoginData))
}
// Login 登录系统
func Login(params *LoginParam) (bool, string) {
// 执行登录sql
var data QueryLoginData
sql := `SELECT
user_id
FROM
sys_user t
WHERE t.CompanyId = ?
AND t.login_name = ?
AND t.password = ?`
o := orm.NewOrm()
error := o.Raw(sql, params.CompanyId, params.LoginName, params.Password).QueryRow(&data)
if error != nil { //出现异常
//TODO 记录错误日志
//返回失败结果
return false, ""
} else {
//判断是否查询到数据
if len(data.UserId) == 0 {
return false, ""
} else {
return true, data.UserId
}
}
}