什么是orm?简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。用orm框架可以快速的进行数据库操作。
安装
go get -u github.com/jinzhu/gorm
我们以mysql为例,首先要引入mysql的驱动
_ "github.com/go-sql-driver/mysql"
package models
import (
"fmt"
"ginLearn.com/utils"
_ "github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
"log"
)
type Model struct {
ID uint `gorm:"primary_key"`
CreatedAt utils.JSONTime
UpdatedAt utils.JSONTime
DeletedAt *utils.JSONTime `sql:"index"`
}
var db *gorm.DB
func init() {
setup()
}
// 获得MySQL的资源链接
func DB() *gorm.DB {
return db
}
// Setup initializes the database instance
func setup() {
var err error
db, err = gorm.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local",
"root",
"12345678",
"127.0.0.1",
3306,
"gorm"))
if err != nil {
log.Fatalf("models.Setup err: %v", err)
}
//采用复数的表名
db.SingularTable(false)
//自动数据迁移
db.AutoMigrate(User{})
//打印日志
db.LogMode(true)
db.DB().SetMaxIdleConns(10)
db.DB().SetMaxOpenConns(100)
}
package main
import (
"fmt"
"ginLearn.com/models"
)
func main() {
db := models.DB()
user := models.User{}
//插入数据
//INSERT INTO `users` (`created_at`,`updated_at`,`deleted_at`) VALUES ('2020-03-16 11:19:31','2020-03-16 11:19:31',NULL)
u := db.Create(&user)
//获得受影响的行数,大于等于1说明成功
fmt.Println(u.RowsAffected)
//查询id为1的用户 正序
//SELECT * FROM `users` WHERE `users`.`deleted_at` IS NULL AND `users`.`id` = 1 AND ((`users`.`id` = 1)) ORDER BY `users`.`id` ASC LIMIT 1
db.First(&user, 1)
//查询id为1的最后一位用户 逆序
//SELECT * FROM `users` WHERE `users`.`deleted_at` IS NULL AND `users`.`id` = 2 AND ((`users`.`id` = 1)) ORDER BY `users`.`id` DESC LIMIT 1
db.Last(&user, 1)
//更新 全部字段
//UPDATE `users` SET `created_at` = '2020-03-16 11:31:42', `updated_at` = '2020-03-16 11:31:42', `deleted_at` = NULL, `name` = 'hanyun' WHERE `users`.`deleted_at` IS NULL AND `users`.`id` = 5
user.Name = "hanyun"
db.Save(&user)
//更新 某个字段
//UPDATE `users` SET `name` = 'hahhaha', `updated_at` = '2020-03-16 11:35:18' WHERE `users`.`deleted_at` IS NULL AND `users`.`id` = 9
db.Model(&user).Update("name", "hahhaha")
//软删除,没有真正的从数据库删除数据
//UPDATE `users` SET `deleted_at`='2020-03-16 11:24:06' WHERE `users`.`deleted_at` IS NULL AND `users`.`id` = 3
db.Delete(&user)
//物理删除,真正的从数据库删除数据
//DELETE FROM `users` WHERE `users`.`id` = 4
//db.Unscoped().Delete(&user)
}
链接:https://pan.baidu.com/s/1nX8zcvVUfbB3mo8LFp9nPA
提取码:mvs5