GORM是使用Go语言开发的友好的ORM库。 ## 安装 ~~~ go get -u github.com/jinzhu/gorm ~~~ ## 通用数据库接口sql.DB 从`*gorm.DB`连接获取通用数据库接口[\*sql.DB](http://golang.org/pkg/database/sql/#DB) ~~~ // 获取通用数据库对象`*sql.DB`以使用其函数 db.DB() // Ping db.DB().Ping() ~~~ ### 连接池 ~~~ db.DB().SetMaxIdleConns(10) db.DB().SetMaxOpenConns(100) ~~~ ## 复合主键 将多个字段设置为主键以启用复合主键 ~~~ type Product struct { ID string `gorm:"primary_key"` LanguageCode string `gorm:"primary_key"` } ~~~ ## 日志 Gorm有内置的日志记录器支持,默认情况下,它会打印发生的错误 ~~~ // 启用Logger,显示详细日志 db.LogMode(true) // 禁用日志记录器,不显示任何日志 db.LogMode(false) // 调试单个操作,显示此操作的详细日志 db.Debug().Where("name = ?", "jinzhu").First(&User{}) ~~~ ### 自定义日志 参考GORM的默认记录器如何自定义它[https://github.com/jinzhu/gorm/blob/master/logger.go](https://github.com/jinzhu/gorm/blob/master/logger.go) ~~~ db.SetLogger(gorm.Logger{revel.TRACE}) db.SetLogger(log.New(os.Stdout, "\r\n", 0)) ~~~ ## 架构 Gorm使用可链接的API,`*gorm.DB`是链的桥梁,对于每个链API,它将创建一个新的关系。 ~~~ db, err := gorm.Open("postgres", "user=gorm dbname=gorm sslmode=disable") // 创建新关系 db = db.Where("name = ?", "jinzhu") // 过滤更多 if SomeCondition { db = db.Where("age = ?", 20) } else { db = db.Where("age = ?", 30) } if YetAnotherCondition { db = db.Where("active = ?", 1) } ~~~ 当我们开始执行任何操作时,GORM将基于当前的`*gorm.DB`创建一个新的`*gorm.Scope`实例 ~~~ // 执行查询操作 db.First(&user) ~~~ 并且基于当前操作的类型,它将调用注册的`creating`,`updating`,`querying`,`deleting`或`row_querying`回调来运行操作。