gorm使用和实例封装

xiaoxiao2021-02-28  54

gorm

gorm一、概述二、安装 1.go get 安装2.使用 三、gorm数据库连接实例封装 1.创建全局单例数据处理连接2.初始化3.调用

一、概述

The fantastic ORM library for Golang, aims to be developer friendly

全功能 ORM (无限接近)

关联 (Has One, Has Many, Belongs To, Many To Many, 多态)钩子 (在创建/保存/更新/删除/查找之前或之后)预加载事务复合主键SQL 生成器数据库自动迁移自定义日志可扩展性, 可基于 GORM 回调编写插件所有功能都被测试覆盖开发者友好

二、安装

1.go get 安装

go get -u github.com/jinzhu/gorm

2.使用

package main import ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/sqlite" ) type Product struct { gorm.Model Code string Price uint } func main() { db, err := gorm.Open("sqlite3", "test.db") if err != nil { panic("failed to connect database") } defer db.Close() // Migrate the schema db.AutoMigrate(&Product{}) // 创建 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 db.Delete(&product) }

三、gorm数据库连接实例封装

连接mysql为例

1.创建全局单例数据处理连接

mysqlConnectiPool.go

package mysqltools import ( "fmt" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" "log" "sync" ) /* * MysqlConnectiPool * 数据库连接操作库 * 基于gorm封装开发 */ type MysqlConnectiPool struct { } var instance *MysqlConnectiPool var once sync.Once var db *gorm.DB var err_db error func GetInstance() *MysqlConnectiPool { once.Do(func() { instance = &MysqlConnectiPool{} }) return instance } /* * @fuc 初始化数据库连接(可在mail()适当位置调用) */ func (m *MysqlConnectiPool) InitDataPool() (issucc bool) { db, err_db = gorm.Open("mysql", "user:password@tcp(192.168.1.4:3306)/dbname?charset=utf8&parseTime=True&loc=Local") fmt.Println(err_db) if err_db != nil { log.Fatal(err_db) return false } //关闭数据库,db会被多个goroutine共享,可以不调用 // defer db.Close() return true } /* * @fuc 对外获取数据库连接对象db */ func (m *MysqlConnectiPool) GetMysqlDB() (db_con *gorm.DB) { return db }

2.初始化

import ( "log" "mcGoApi/database/mysql/mysqltools" "os" ) func main() { // init database pool issucc := mysqltools.GetInstance().InitDataPool() if !issucc { log.Println("init database pool failure...") os.Exit(1) } // do something... }

3.调用

import ( "errors" "github.com/jinzhu/gorm" "mcGoApi/database/mysql/mysqltools" "mcGoApi/datamodels/usermodels" "sync" ) /* * @fuc 获取用户信息 * @user gorm对应的用户信息模型 * @dec 此方法为我为请求处理数据存取的封装类的方法,不细说 */ func (r *userMemoryRepository) Select(userId string) (usermodels.User, error) { // select r.mu.Lock() var user_ret usermodels.User db = mysqltools.GetInstance().GetMysqlDB() // 使用id获取记录 err := db.Where("id = ?", userId).First(&user_ret).Error r.mu.Unlock() if err != nil { return usermodels.User{}, errors.New("查询失败") } return user_ret, nil }
转载请注明原文地址: https://www.6miu.com/read-2626236.html

最新回复(0)