beego——模型(model)
beego ORM是一个强大的Go语言ORM框架。她的灵感主要来自Django ORM和SQLAlchemy。
已经支持的数据库驱动:
- MySQL:https://github.com/go-sql-driver/mysql
- PostgreSQL:https://github.com/lib/pq
- Sqlite3:https://github.com/mattn/go-sqlite3
ORM的特性:
- 支持 Go 的所有类型存储
- 轻松上手,采用简单的 CRUD 风格
- 自动 Join 关联表
- 跨数据库兼容查询
- 允许直接使用 SQL 查询/映射
- 严格完整的测试保证 ORM 的稳定与健壮
安装ORM:
1 | go get github.com/astaxie/beego/orm |
快速入门
简单示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | package main import ( "fmt" "github.com/astaxie/beego/orm" _ "github.com/go-sql-driver/mysql" // import your used driver ) // Model Struct type User struct { Id int Name string `orm: "size(100)" ` } func init() { // set default database orm.RegisterDataBase( "default" , "mysql" , "username:password@tcp(127.0.0.1:3306)/db_name?charset=utf8" , 30) // register model orm.RegisterModel(new(User)) // create table orm.RunSyncdb( "default" , false, true) } func main() { o := orm.NewOrm() user := User{Name: "slene" } // insert id, err := o.Insert(&user) fmt.Printf( "ID: %d, ERR: %v\n" , id, err) // update user.Name = "astaxie" num, err := o.Update(&user) fmt.Printf( "NUM: %d, ERR: %v\n" , num, err) // read one u := User{Id: user.Id} err = o.Read(&u) fmt.Printf( "ERR: %v\n" , err) // delete num, err = o.Delete(&u) fmt.Printf( "NUM: %d, ERR: %v\n" , num, err) } |
关联查询
1 2 3 4 5 6 7 8 9 | type Post struct { Id int `orm: "auto" ` Title string `orm: "size(100)" ` User *User `orm: "rel(fk)" ` } var posts []*Post qs := o.QueryTable( "post" ) num, err := qs.Filter( "User__Name" , "slene" ).All(&posts) |
SQL查询
当你无法使用ORM来达到您的需求的时候,也可以直接使用SQL来完成查询/映射操作。
1 2 3 4 5 | var maps []orm.Params num, err := o.Raw( "SELECT * FROM user" ).Values(&maps) for _,term := range maps{ fmt.Println(term[ "id" ], ":" ,term[ "name" ]) } |
事务处理
1 2 3 4 5 6 7 8 9 | o.Begin() ... user := User{Name: "slene" } id, err := o.Insert(&user) if err == nil { o.Commit() } else { o.Rollback() } |
调试查询日志
在开发环境下,您可以使用以下指令来开启调试模式:
1 | orm.Debug = true |
开启后将会输出所有的查询语句,包括执行、准备、事务等。例如
1 | [ORM] - 2013-08-09 13:18:16 - [Queries/ default ] - [ db.Exec / 0.4ms] - [INSERT INTO `user` (`name`) VALUES (?)] - `slene` |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2017-12-15 Redis重大版本
2017-12-15 MySQL——存储引擎
2017-12-15 Redis使用场景
2017-12-15 查看一张表的信息