Go之Gorm简介及使用案例
简介
ORM
Object-Relationl Mapping, 它的作用是映射数据库和对象之间的关系,方便我们在实现数据库操作的时候不用去写复杂的sql语句,把对数据库的操作上升到对于对象的操作
Gorm
gorm就是基于Go语言实现的ORM库。
类似于Java生态里大家听到过的Mybatis、Hibernate、SpringData等。
下载使用Gorm库
下载gorm库
go get -u github.com/jinzhu/gorm
// 这是比较原始的方式,现在有了go mod,我们可以更方便的配置,甚至不用配置。
// 写好代码,在文件下执行go build,go.mod会自动添加对于gorm的依赖包
CURD
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
"os"
"time"
)
const (
dbUser string = "test"
dbPassword string = "ZHOUjian.22"
dbHost string = "121.36.43.223"
dbPort int = 3306
dbName string = "cmdb"
)
var dsn string = fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&loc=Local&parseTime=true",
dbUser, dbPassword, dbHost, dbPort, dbName)
type User3 struct {
// 会从gorm嵌入一些字段进来
gorm.Model
Name string
Password string
Birthday time.Time
Sex bool
Tel string
Addr string
Desc string
}
type User4 struct {
Id int `gorm: "primary_key; auto_increment"`
Name string
Password string
Birthday time.Time
Sex bool
Tel string
Addr string
Desc string
}
func (*User4)TableName() string {
return "user"
}
//type User4 struct {
// Id int `gorm:"primary_key"`
// Name string `gorm:"type:varchar(32);unique;not null; default:''"`
// Password string
// Birthday time.Time `gorm:"type:date"`
// Sex bool
// Tel string `gorm:"column:telephone"`
// Addr string
// Desciption string `gorm:"type:text"`
//}
func main() {
db, err := gorm.Open("mysql", dsn)
if err != nil {
fmt.Println(err)
os.Exit(-1)
}
// 创建表
db.AutoMigrate(&User3{})
db.AutoMigrate(&User4{})
// fmt.Println(db.CreateTable(&User3{},&User4{}))
//db.Model(&User{}).AddIndex("idx_name_addr", "name", "addr")
db.Close()
}
判断表是否存在
// 判断表是否存在
fmt.Println(db.HasTable(&User3{}))
fmt.Println(db.HasTable("user4"))
db.Close()
删除表
fmt.Println(db.DropTable(&User3{},&User4{}))
修改表
db.Model(&User3{}).ModifyColumn("birthday","date")
db.Close()
删除列
db.Model(&User3{}).DropColumn("birthday")
添加删除索引
db.Model(&User3{}).AddIndex("idx_name","name")
// 联合索引 db.Model(&User3{}).AddIndex("idx_name_addr","name","addr")
db.Close()
// 删除索引
db.Model(&User3{}).RemoveIndex("idx_name_addr")
// 创建UniqueIndex索引
db.Model(&User3{}).AddUniqueIndex("idx_name","name")
Go之Gorm简介及使用案例的更多相关文章
- IO流 简介 总结 API 案例 MD
目录 IO 流 简介 关闭流的正确方式 关闭流的封装方法 InputStream 转 String 的方式 转换流 InputStreamReader OutputStreamWriter 测试代码 ...
- Shiro简介、入门案例、web容器的集成
目的: shiro简介 Shiro入门案例 Shiro与web容器的集成 shiro简介(中文官网:https://www.w3cschool.cn/shiro/andc1if0.html) 1.什么 ...
- 第15.47节、PyQt显示部件:QGraphicsView图形视图和QGraphicsScene图形场景简介及应用案例
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 Designer中的Graphics V ...
- ENode 2.6 架构与设计简介以及全新案例分享
前言 ENode是一个应用开发框架,为开发人员提供了一整套基于DDD+CQRS+ES+EDA架构风格的解决方案.ENode从发布1.0开始到现在的差不多两年时间,我几乎每周都在更新设计或实现代码.以至 ...
- 第15.46节、PyQt显示部件:OpenGL Widget部件功能简介及使用案例
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 OpenGL Widget部件是一个Op ...
- 第15.45节、PyQt输入部件:QKeySequenceEdit快捷键输入部件简介和使用案例
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.功能简介 Key Sequence Edit输 ...
- MyBatis学习(一)简介及入门案例
1.什么是MyBatis? MyBatis是一个支持普通SQL查询,存储过程,和高级映射的优秀持久层框架.MyBatis去掉了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBati ...
- Hadoop之MapReduce(一)简介及简单案例
简介 Hadoop MapReduce是一个分布式运算编程框架,基于该框架能够容易地编写应用程序,进而处理海量数据的计算. MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算. ...
- asp.net core 身份认证/权限管理系统简介及简单案例
如今的网站大多数都离不开账号注册及用户管理,而这些功能就是通常说的身份验证.这些常见功能微软都为我们做了封装,我们只要利用.net core提供的一些工具就可以很方便的搭建适用于大部分应用的权限管理系 ...
随机推荐
- CSS-好玩的样式(用高斯模糊制作平缓突起)
一.效果图: 应用: 二.上代码 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- [开源硬件DIY] 自制一款精致炫酷的蓝牙土壤温湿度传感器,用于做盆栽呵护类产品(API开放,开发者可自行DIY微信小程序\安卓IOS应用)
目录 前言: 1. 成品展示 2. 原理图解析 3. pcb设计 4. 嵌入式对外提供接口 4.1 蓝牙广播 4.2 蓝牙服务和属性 4.3 数据包格式 4.4 数据通信模型 重要 . 前言: 本期给 ...
- Html笔试复习
掌握学习技巧,提高学习质量 学习目标:熟练掌握Html笔试复习题 已掌握目标:Html笔试复习题掌握95% 未完成目标:个别题因粗心造成错误,因选项意思不懂出错 解决方案:了解原因,因错出方案,充分利 ...
- APP自动化 -- 框架
一.框架源码 https://github.com/jiangnan27/Autotest_APP_Open 二.框架环境 python3 + appium1.15.3 + pytest5.3.5 三 ...
- Python快速入门PDF高清完整版免费下载|百度云盘
百度云盘:Python快速入门PDF高清完整版免费下载 提取码:w5y8 内容简介 这是一本Python快速入门书,基于Python 3.6编写.本书分为4部分,第一部分讲解Python的基础知识,对 ...
- 基于MySql主从分离的代码层实现
前言 该文是基于上篇<MySQL主从分离的实现>的代码层实现,所以本文配置的主数据库和从数据库的数据源都是在上篇博文中已经介绍了的. 动态选择数据源的配置 由于我们在写数据的时候需 ...
- turtle库常用函数
- Python日期和时间_什么是Tick_什么是时间元组_获取当前时间
Python 日期和时间_什么是 Tick _什么是时间元组: 时间和日期:某年某月某日某时某分某秒 Tick: 时间间隔以 秒 为单位的浮点小数,起始时间为:1970年1月1日0点0分开始 # Ti ...
- PHP jewishtojd() 函数
------------恢复内容开始------------ 实例 把犹太历法的日期转换为儒略日计数: <?php$jd=jewishtojd(6,20,2007);echo $jd;?> ...
- Python 访问字符串中的值
Python 访问字符串中的值 Python 不支持单字符类型,单字符在 Python 中也是作为一个字符串使用.高佣联盟 www.cgewang.com Python 访问子字符串,可以使用方括号来 ...