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 ...
 - Redis 相关运维操作
			
背景 Redis作为目前全球最流行的KV存储,除了使用之外,还需要做好日常的运维工作.关于运维相关的工作,本文从以下方面进行介绍说明(Redis5.0以上): 内存方面 客户端连接方面 工具方面 说明 ...
 - bzoj3211花神游历各国&&bzoj3038上帝造题的七分钟2*
			
bzoj3211花神游历各国 题意: n个数的序列,m个操作,操作两种:区间开根(向下取整)和区间求和.n≤100000,m≤200000,序列中的数非负且≤109. 题解: 一个≤109的数开6次根 ...
 - 机器学习实战---决策树CART回归树实现
			
机器学习实战---决策树CART简介及分类树实现 一:对比分类树 CART回归树和CART分类树的建立算法大部分是类似的,所以这里我们只讨论CART回归树和CART分类树的建立算法不同的地方.首先,我 ...
 - Java开发中的eclispe常用快捷键&全部快捷键
			
Java开发中的eclispe常用快捷键&全部快捷键 Ctrl+1 快速修复(经典快捷键)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ ...
 - P4554 小明的游戏 (洛谷) 双端队列BFS
			
最近没有更新博客,全是因为英语,英语太难了QWQ 洛谷春令营的作业我也不会(我是弱鸡),随机跳了2个题,难度不高,还是讲讲吧,学学新算法也好(可以拿来水博客) 第一题就是这个小明的游戏 小明最近喜欢玩 ...
 - 浅谈Python中的深浅拷贝的区别
			
深.浅拷贝总结 深拷贝 拷贝可变数据类型,如列表容器: a = [1, 2, [3, 4]] b = copy.deepcopy(a) a 与 b 所指的列表容器的空间地址不一致,即 id(a) != ...
 - js读取其他网页内容(同源)
			
通过xss第一次取得网页内容,然后获取到管理员账号页面进行二次盲打.js需要保留script部分其余去除. <html><p id='d1'></p> <sc ...
 - WARNING: 'aclocal-1.14' is missing on your system.问题解决记录
			
在编译LXC时,遇到一个问题,提示 'aclocal-1.14'缺失.如下:WARNING: 'aclocal-1.14' is missing on your system. You should ...
 - web自动化 -- HTMLreport(四)测试报告默认不展开输出内容
			
一.需求痛点 1.默认展开输出内容,很不好查看每条用例的状态,而且也很丑 2.希望默认不展开输出内容 3.痛点截图 二.解决步骤 1.直接修改成这样子 三.效果