金仓数据库KingbaseES V8R3使用Gorm指南

 【关键工具】gorm

1.概述

1.1 gorm说明

Gorm,一个神奇的,对开发人员友好的 Golang ORM 库

  • 全功能 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…
  • 每个特性都经过了测试的重重考验
  • 开发者友好

1.2 安装

首先,需要安装golong,且配置了GOPATH环境变量。

在联网环境下,执行 go get -u github.com/jinzhu/gorm和go get -u github.com/lib/pq获取源码包。(若设置了代理,执行git config --global --unset https.proxy取消代理)

离线环境下,解压压缩包到GOPATH目录下。

1.3 导入说明

import (

    "fmt"

    "github.com/jinzhu/gorm"

    _ "github.com/jinzhu/gorm/dialects/postgres"

)

1.4 编译说明

执行go build或go run 命令编译测试案例

go build test.go;./test 或 go run test.go

2.管理连接

2.1 建立连接

const (

       host     = "192.168.6.128"

       port     = 54321

       user     = "system"

       password = "123456"

       dbname   = "test"

) //全局常量

//连接串

connInfo := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",host, port, user, password, dbname)

//连接数据库

db, err := gorm.Open("postgres", connInfo)

if err!= nil{

    panic(err)

}

defer db.Close()

2.2 关闭连接

db.Close()

2.3 连接池

GORM 使用 database/sql 维护连接池,dotabase/sql包中实现了通用的连接池。

sqlDB, err := db.DB()

// SetMaxIdleConns 设置空闲连接池中连接的最大数量

sqlDB.SetMaxIdleConns(10)

// SetMaxOpenConns 设置打开数据库连接的最大数量。

sqlDB.SetMaxOpenConns(100) 

// SetConnMaxLifetime 设置了连接可复用的最大时间。

sqlDB.SetConnMaxLifetime(time.Hour)

3.CURD接口

3.1 模型定义

模型是标准的 struct,由 Go 的基本数据类型。默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名

通过tag标记gorm来创建在数据库中字段的约束和属性配置

// UserInfo 结构

type UserInfo struct {

ID uint       `gorm:"primary_key;AUTO_INCREMENT"`

UserId uint   `gorm:"not null;index:idx_user_id"`

    Name string 

    Age int

    Sex string

    Hobby string

}

gorm定义

                  数据库字段约束

gorm:"primary_key"

字段设置为主键

gorm:"AUTO_INCREMENT"

字段设置为自增

gorm:"size:20

字段长度设置为20

gorm:"index:idx_user_id

字段设置普通索引,名称为idx_user_id

gorm:"not null

设置字段为非空

gorm:"type:varchar(64)"

设置字段为varchar类型,长度为64

gorm:"column:remark"

设置数据库字段名为remark

gorm:"-"

忽略此字段,不在表中创建该字段

gorm:"default:'默认'"

设置字段的默认值

3.2 迁移建表

AutoMigrate 用于自动迁移schema,保持schema 是最新的。

db.AutoMigrate(&UserInfo{})

注:在gorm中,表名创建是以复数存在的插入,创建表名为user_infos

3.3 创建记录

    u1 := UserInfo{1, "王武", 17, "男", "篮球"}

    u2 := UserInfo{2, "张佳", 15, "女", "乒乓"}

    u3 := UserInfo{3, "李白", 16, "男", "足球"}

    db.Create(&u1)

    db.Create(&u2)

    db.Create(&u3)

3.4 查询

    // First查询第一条记录

    var u = new(UserInf)

    db.First(u)

    fmt.Printf("%d, %d, %s, %s, %s\n", u.ID, u.UserId, u.Name,u.Sex,u.Hobby)

    //Find查询 ID=2

    var uu UserInf

    db.Find(&uu,2)

    fmt.Printf("%d, %d, %s, %s, %s\n\n", uu.ID, uu.UserId,uu.Name,uu.Sex,uu.Hobby)

    //查询多个记录

    var users []UserInf = make([]UserInf, 3)

    db.Where("user_id > ?", 0).Order("ID").Find(&users)

    for _,user := range users {

             fmt.Printf("%d, %d, %s, %d, %s, %s\n", user.ID, user.UserId,user.Name,user.Age, user.Sex,user.Hobby)

    }

3.5 更新

// Update更新
var u = new(UserInf)   
db.Model(&u).Update("hobby", "双色球")

// Save更新所有字段
u.Hobby = "篮球"
	u.Age = 20
	db.Save(&u)

3.6 删除

//单个结构删除

db.Delete(&u)

//批量删除

db.Where("ID>=?",0).Delete(UserInf{})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值