【关键工具】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     = 54321user     = "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 intSex stringHobby 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=2var uu UserInfdb.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 = 20db.Save(&u)

3.6 删除

//单个结构删除db.Delete(&u)//批量删除db.Where("ID>=?",0).Delete(UserInf{})

金仓数据库KingbaseES V8R3使用Gorm指南相关推荐

  1. 金仓数据库KingbaseES ksql工具用户指南及参考--2. Ksql快速启动

    目录 2.1. Ksql概述 2.1.1. Ksql命令行架构 2.2. Ksql先决条件 2.3. 启动Ksql命令行 2.4. 连接目标数据库 2.5. 执行一个查询 2.6. 退出Ksql 2. ...

  2. 金仓数据库KingbaseES客户端编程接口指南-ODBC(6. KingbaseES ODBC 的扩展属性)

    6. KingbaseES ODBC 的扩展属性 KingbaseES ODBC 数据源的高级选项 Linux环境下SQLDriverConnect()连接串中KingbaseES ODBC的扩展连接 ...

  3. 金仓数据库 KingbaseES 客户端编程接口指南 - JDBC(11. JDBC 示例说明)

    11. JDBC 示例说明 在所提供的用例中,使用的数据库信息为,用户名:system; 密码:manager; 数据库名:test; 端口号:54321 数据源示例 连接池示例 Statement ...

  4. 金仓数据库KingbaseES客户端编程接口指南-DCI(3. DCI 工程配置)

    3. DCI 工程配置¶ Windows 平台工程搭建(vs2008) Linux平台工程搭建 服务的配置方法与参数说明 多主机地址配置 3.1. Windows 平台工程搭建(VS2008) 3.2 ...

  5. 金仓数据库KingbaseES V8R3集群删除test库主备切换测试案例

    案例说明 在KingbaseES R3集群中,kingbasecluster进程会通过test库访问,连接后台数据库服务测试:如果删除test数据库,导致后台数据库服务访问失败,在集群主备切换时,无法 ...

  6. 金仓数据库KingbaseES ksql工具用户指南及参考--3. Ksql入门

    目录 3.1. 配置Ksql 3.1.1. Ksql环境变量 3.1.2. 配置文件 3.1.3. 注解 3.2. 启动Ksql 3.2.1. 登录用户名和密码 3.2.2. 连接到数据库 3.2.3 ...

  7. 金仓数据库 KingbaseES 客户端编程接口指南 - ODBC 驱动使用

    7. KingabseES ODBC 驱动使用 Windows 中 ODBC 驱动使用步骤(VS2013) Linux 下调用 ODBC 驱动步骤 7.1. Windows 中 ODBC 驱动使用步骤 ...

  8. 解决金仓数据库KingbaseES创建serial列并将其设置为主键约束,同时copy两条及以上数据时报错的问题

    ​  关键字 人大金仓.金仓数据库.KingbaseES.KES.serial.copy.PRIMARY KEY 问题描述 使用KingbaseES V8R3数据库的客户端工具ksql执行copy - ...

  9. 金仓数据库KingbaseES表空间(tablespace)知多少

    金仓数据库KingbaseES表空间定义 金仓数据库KingbaseES中的表空间允许在文件系统里定义那些代表数据库对象的文件存放位置,比如表和索引等.一旦表空间被创建,那么就可以在创建数据库对象时通 ...

  10. 如何在金仓数据库KingbaseES中使用pg_get_function_arg_default函数

    关键字 pg_get_function_arg_default,regproc 问题描述 如何在金仓数据库KingbaseES中使用pg_get_function_arg_default函数获取函数或 ...

最新文章

  1. Get started with ros -- 1
  2. 爱奇艺个性化推荐排序实践【转】
  3. 计算机应用技能大赛海报,2017年计算机应用工程系技能大赛汇总 ——大赛点亮人生 技能改变命运...
  4. linux arm ffmpeg configure文件,ffmpeg库的交叉编译记录
  5. leetcode刷题:2.两数之和
  6. centos7的php5.4竟然不支持原生的mysql
  7. 浅析B/S架构数据库连接方式
  8. 4.TCP/IP 详解卷1 --- ARP:地址解析协议
  9. 前后端分离的思考与实践(四)
  10. 按键精灵手机助手php通讯,按键精灵手机助手教程_按键精灵手机助手怎么连接手机...
  11. 【Android】ListView刷新、加载
  12. python 实现图像的手绘效果
  13. Java全栈工程师知识体系介绍
  14. 笔记本WIFI无法上网(无Internet访问权限)
  15. Java IDE介绍和使用
  16. 2020赚钱机会总结,拾元富另附10个副业赚钱必备的工具与平台,看看你到底错过了多少钱!
  17. Linux 操作系统
  18. 程序员个性化简历模板项目
  19. 机器学习案例实战(1)使用python分析科比数据
  20. 天空2006年十大国产优秀软件

热门文章

  1. 计算机网络技术专业毕业论文参考选题,计算机网络技术专业毕业论文参考选题...
  2. 寻找软件智能的根--- aaas内部遵循的唯一原则
  3. 可显示上拼音下汉字的 text 格式
  4. CVE-2013-5211漏洞整改方法
  5. linux .deb文件安装
  6. Sniffer报文捕获解析
  7. CodeSniffer使用教程
  8. 一种防止拍摄屏幕的新技术
  9. 锁定计算机和睡眠有什么区别,电脑休眠、睡眠、关机之间有什么区别?三者之间区别介绍...
  10. 计算机休眠和睡眠省电,几步教会你笔记本睡眠和休眠有什么区别