什么是ORM?
對象關(guān)系映射(Object Relational Mapping,簡稱ORM)模式是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫存在的互不匹配的現(xiàn)象的技術(shù)。簡單的說,ORM是通過使用描述對象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將程序中的對象自動持久化到關(guān)系數(shù)據(jù)庫中
使用beego ORM有三步:
第一步:在model里面構(gòu)造struct模型,并注冊模型
package main
import (
"github.com/astaxie/beego/orm"
)
type User struct {
Id int
Name string
}
func init() {
orm.RegisterModel(new(User))
}
第二部:將你需要使用的 driver 加入main.go中
import( _"github.com/go-sql-driver/mysql"
_"github.com/lib/pq"
_"github.com/mattn/go-sqlite3")
第三步:注冊驅(qū)動和數(shù)據(jù)庫**
- 注冊驅(qū)動:orm.RegisterDriver("mysql", orm.DRMySQL) 如果是默認(rèn)的三個可以不寫
- 注冊數(shù)據(jù)庫:orm.RegisterDataBase("default", "mysql", "root:123456@/golang?charset=utf8") ////注冊一個別名為default的數(shù)據(jù)庫、驅(qū)動名字、數(shù)據(jù)庫源
main.go
package main
import (
"fmt"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
)
func init() {
orm.RegisterDriver("mysql", orm.DRMySQL) //可以不加
orm.RegisterDataBase("default", "mysql", "root:password@/databasename?charset=utf8")
//ORM 必須注冊一個別名為default的數(shù)據(jù)庫,作為默認(rèn)使用。
}
func main() {
o := orm.NewOrm() //new一個Orm,默認(rèn)使用名為default的數(shù)據(jù)庫
o.Using("default") // 你可以使用Using函數(shù)指定其他數(shù)據(jù)庫
user := new(User)
user.Name = "ztz"
fmt.Println(o.Insert(user))
}
自己寫是不是很麻煩?bee為我們提供了人性化的工具,在使用beego框架時,可以使用bee的工具,如:bee generate自動化一鍵生成 model,router,controllers
bee generate appcode [-tables=""] [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"] [-level=3]
但有一點要注意,在構(gòu)造好數(shù)據(jù)庫之后再使用generate工具,并且一個表中一定要有主鍵,不然生成的文件不是完整的。
接口使用:
type Ormer interface {
Read(interface{}, …string) error
ReadOrCreate(interface{}, string, …string) (bool, int64, error)
Insert(interface{}) (int64, error)
InsertMulti(int, interface{}) (int64, error)
Update(interface{}, …string) (int64, error)
Delete(interface{}) (int64, error)
LoadRelated(interface{}, string, …interface{}) (int64, error)
QueryM2M(interface{}, string) QueryM2Mer
QueryTable(interface{}) QuerySeter
Using(string) error
Begin() error
Commit() error
Rollback() error
Raw(string, …interface{}) RawSeter
Driver() Driver
}