Go语言ORM框架:gorm/xorm
ORM框架解决了对象/实例 与关系型数据库的映射,解决了程序员不想写数据库语句的问题
对应关系
-
数据表 <–> 类、结构体
-
数据行 <–> 对象、实例
-
数据字段 <–> 属性、结构体字段
gorm中文文档:http://gorm.io/zh_CN/docs/
github地址:https://github.com/jinzhu/gorm
例子
package main
import (
"database/sql"
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
// 定义好的结构体,在数据库中,会全部小写,并且+s作为表名
type Product struct {
gorm.Model
Code string
Price uint
Name string
}
type User struct {
ID string // 名为`ID`的字段会默认作为表的主键
Name string
}
// 将 User 的表名设置为 `profiles`
func (User) TableName() string {
return "profiles"
}
// 用*string可以把空字符串存入数据库中
type Animal struct {
ID int64
Name *string `gorm:"default:'galeone'"`
Age int64
}
// 用这个可以把空字符串存入数据库中
type Animal2 struct {
ID int64
Name sql.NullString `gorm:"default:'galeone'"`
Age int64
}
func main() {
// 连接数据库
db, err := gorm.Open("mysql", "root:wxlzs999/gorm_demo?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
panic("failed to connect database")
}
defer db.Close()
// 自动迁移
db.AutoMigrate(&Product{}, &User{}, &Animal{}, &Animal2{}) //
// 创建
db.Create(&Product{Code: "L1212", Price: 1000})
// 读取
var product Product
db.First(&product, 1) // 查询id为1的product
db.First(&product, "code = ?", "L1212") // 查询code为l1212的product
// 更新 - 更新product的price为2000
db.Model(&product).Update("Price", 2000)
// 删除 - 删除product
// Gorm是软删除
db.Delete(&product)
n := ""
var animal3 = Animal{Age: 99, Name: &n} // 名字就叫空字符串
var animal2 = Animal{Age: 99} // Name用默认值,即空
db.Create(&animal3)
db.Create(&animal2)
var animal4 = Animal2{
Name: sql.NullString{
String: "", // 值是什么
Valid: true, // 该字段有值
},
Age: 19,
}
db.Create(&animal4)
// 查询
var animalList []*Animal
// 从数据库中按照条件查询并把结果填充到我们传进去的变量
db.Debug().Select("name, age").Where("age = ?", 99).Find(&animalList)
fmt.Printf("%#v\n", animalList)
}
总结
- 别忘了导入驱动
- gorm.Model
- Model结构体支持的tag
- 字段默认值
- 增删改查
- 钩子函数