一、概述
gorm是一个使用Go语言编写的ORM框架。它文档齐全,对开发者友好,支持主流数据库。 gorm官方中文文档:https://gorm.io/zh_CN/docs/
二、特性
- 全功能 ORM
- 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
- Create,Save,Update,Delete,Find 中钩子方法
- 支持
Preload
、Joins
的预加载 - 事务,嵌套事务,Save Point,Rollback To Saved Point
- Context、预编译模式、DryRun 模式
- 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
- SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
- 复合主键,索引,约束
- Auto Migration
- 自定义 Logger
- 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
- 每个特性都经过了测试的重重考验
- 开发者友好
三、安装
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
go get -u gorm.io/driver/mysql
go get -u gorm.io/driver/postgres
四、测试连接mysql
1、建表语句
CREATE TABLE `users` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`username` varchar(255) NOT NULL COMMENT '用户名',
`password` varchar(255) NOT NULL COMMENT '密码',
`status` enum('active','inactive','deleted') NOT NULL DEFAULT 'active' COMMENT '用户状态',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
insert into users(username, password) values ('test1', 'test1'),('test2', 'test2'),('test3', 'test3')
2、代码
代码是继续接上一个实例代码
https://blog.csdn.net/forest_long/article/details/139093910
1)创建model
model/UserModel.go
package model
import "gin01/dao"
type UserModel struct {
Id int64 `json:"id" gorm:"primary_key"`
Username string `json:"username"`
Password string `json:"password"`
}
func (UserModel) TableName() string {
return "users"
}
func GetUserInfo(id int) (UserModel, error) {
var user UserModel
err := dao.Db.Where("id = ?", id).First(&user).Error
return user, err
}
2)创建dao
dao/UserDao.go
package dao
import (
"fmt"
"gin01/config"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
"time"
)
var (
Db = &gorm.DB{}
err error
)
func init() {
Db, err = gorm.Open("mysql", config.MYSQL_DB)
if err != nil {
fmt.Print("db connect error")
}
if Db.Error != nil {
fmt.Print("db database error")
}
Db.DB().SetMaxIdleConns(10)
Db.DB().SetMaxOpenConns(100)
Db.DB().SetConnMaxLifetime(time.Hour)
}
3)配置文件
config/db.go
package config
const (
MYSQL_DB = "root:abc123456@tcp(127.0.0.1:3306)/test_gorm?charset=utf8mb4&parseTime=True&loc=Local"
)
4)控制器调用
controller/user.go
func (u UserController) GetUserInfo(c *gin.Context) {
idStr := c.Param("id")
//name := c.Param("name")
id, _ := strconv.Atoi(idStr)
user, _ := model.GetUserInfo(id)
//common.RetSuccess(c, http.StatusOK, "success", "id:"+id+" name:"+name, 1)
common.RetSuccess(c, http.StatusOK, "success", user, 1)
}