ORM(对象关系映射): 把数据库映射成对象。ORM 使用对象,封装了数据库操作,因此可以不碰 SQL 语言。开发者只使用面向对象编程,与数据对象直接交互,不用关心底层数据库实现;

ORMCRUDcreatereadupdatedelete

基本使用:

下载依赖
1
2
$go get github.com/jinzhu/gorm
$go get github.com/jinzhu/gorm/dialects/mysql

第一个是核心库。
第二个是mysql数据库的驱动包,如果使用的是其他数据库,则需下载相应数据库的驱动包。

gorm包装了一些常用数据库的驱动,直接下载即可:

1
2
3
4
//import _ "github.com/jinzhu/gorm/dialects/mysql"
//import _ "github.com/jinzhu/gorm/dialects/postgres"
//import _ "github.com/jinzhu/gorm/dialects/sqlite"
//import _ "github.com/jinzhu/gorm/dialects/mssql"
连接数据库
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
packae main
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
"fmt"
)
func main() {
db, err := gorm.Open("mysql","root:12345@/demo?charset=utf8&parseTime=True&loc=Local")
if err != nil {
fmt.Println(err)
return
}

defer db.Close()
// Migrate the schema
db.AutoMigrate(&Product{})

// Create
db.Create(&Product{Code: "L1212", Price: 1000})

// Read
var product Product
db.First(&product, 1) // find product with id 1
db.First(&product, "code = ?", "L1212") // find product with code l1212

// Update - update product's price to 2000
db.Model(&product).Update("Price", 2000)

// Delete - delete product
db.Delete(&product)
}
mysqlroot12345demo
新增数据
1
2
3
4
5
6
7
8
9
10
type User struct {
gorm.Model
ID int `gorm:"primary_key"`
Name string `gorm:"not_null"`
}

func add() {
user := &User{Name:"David"}
db.Create(user)
}

User类型中内嵌了gorm.Model字段,gorm.Model会自动为User{}添加如下4个字段:

id:索引

create_at:数据条目生成时间

updated_at:数据条目更新时间

deleted_at:数据条目删除时间

删除数据
1
2
user := &User{ID:1}
db.Delete(user)
更新数据
1
2
user := &User{ID:1}
db.Model(user).Update("Name","lisi")
查询数据
1
2
3
4
5
6
7
8
9
//查询所有条目
var users []User
db.Find(&users)
fmt.Println(users)

//查询ID为1的条目
user := new (User)
db.First(user,1)
fmt.Println(user)

其它:

判断数据库中是否有结构体对应的表:
1
db.HasTable(User{})
创建表
1
db.CreateTable(User{})