Go framework-GORM

一、GORM

ORM:即Object-Relational Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。

GORM:gorm是go语言的一个orm框架,Golang 写的,开发人员友好的 ORM 库。

安装GORM:

Go 复制代码
go get github.com/jinzhu/gorm

新建test_gorm项目

Go 复制代码
D:\GO_workspace_web>md test_gorm

D:\GO_workspace_web>cd test_gorm

D:\GO_workspace_web\test_gorm>go mod init test_gorm
go: creating new go.mod: module test_gorm

D:\GO_workspace_web\test_gorm>

使用GoLand打开项目,进入Terminal命令

Go 复制代码
PS D:\GO_workspace_web\test_gorm> go get github.com/jinzhu/gorm
go: downloading github.com/jinzhu/gorm v1.9.16
go: downloading github.com/jinzhu/inflection v1.0.0
go: added github.com/jinzhu/gorm v1.9.16
go: added github.com/jinzhu/inflection v1.0.0
PS D:\GO_workspace_web\test_gorm> 

1、GORM连接数据库

Go 复制代码
package main

import (
	_ "github.com/go-sql-driver/mysql" //引入mysql的驱动
	"github.com/jinzhu/gorm"
)

func main() {
	//连接数据库:
	//Open传入两个参数:
	//第一个参数:指定你要连接的数据库
	//第二个参数:指的是数据库的设置信息:用户名:密码@tcp(ip:port)/数据库名字?charset=utf8&parseTime=True&loc=Local
	//charset=utf8设置字符集
	//parseTime=True为了处理time.Time
	//loc=Local 时区设置,与本地时区保持一致
	db, err := gorm.Open("mysql", "root:root@tcp(localhost:3306)/testgorm?charset=utf8&parseTime=True&loc=Local")

	if err != nil {
		panic(err)
	}
	defer db.Close()
}

2、单表的增删改查

Go 复制代码
package main

import (
    "fmt"
	_ "github.com/go-sql-driver/mysql" //引入mysql的驱动
	"github.com/jinzhu/gorm"
)

func main() {
	db, err := gorm.Open("mysql", "root:root@tcp(localhost:3306)/testgorm?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	}
	defer db.Close()
	db.CreateTable(&User{}) //创建表,默认表名后加s
    //db.Table("user").CreateTable(&User{}) //指定要创建的表名
    //flg1 := db.HasTable(&User{})  //判断是否有某张表
	//fmt.Println(flg1)
	flg2 := db.HasTable("users") //判断是否有某张表
	fmt.Println(flg2)
    //db.DropTable(&User{})  //删除表
    //db.DropTable("user")   //指定删除表名
	//增删改查
	//增加
	db.Create(&User{Name: "张无忌", Age: 30})
	//查询
	var muser User
	db.First(&muser, "age=?", 30)
	fmt.Println(muser)
	//更新:先查询再更新
	db.Model(&muser).Update("age", 40)
	fmt.Println(muser)
	db.Model(&muser).Update("name", "张翠山")
	fmt.Println(muser)
	//删除:先查询再删除
	db.Delete(&muser)
	fmt.Println(muser)
}

type User struct {
	Name string
	Age  int
}

3、结构体名和表名的映射规则

  1. 如果结构体名没有驼峰命名,那么表名就是:结构体名小写+复数形式: 如结构体名User-->表名users
  2. 如果结构体名有驼峰命名,那么表名就是:大写变小写并在前面加下划线,最后加复数形式:如结构体名UserInfo-->表名user_infos
  3. 如有结构体名有连续的大写字母,那么表名就是:连续的大写字母变小写,驼峰前加下划线,字母变小写,最后加复数形式:如结构体名:DBUserInfo-->表名db_user_infos
  4. 结构体中字段名称与表中列名的映射规则同上

自定义表名

Go 复制代码
package main

import (
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)
type User struct {
	Age  int
	Name string
}
type UserInfo struct {
	Age  int
	Name string
}
type DBUserInfo struct {
	Age  int
	Name string
}
type MyUser struct {
	Age  int
	Name string
}
func (MyUser) TableName() string {//自定义表名
	return "test_my_user"
}
func main() {
	db, err := gorm.Open("mysql", "root:root@tcp(localhost:3306)/testgorm?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	}
	defer db.Close()
	db.CreateTable(&User{})
	db.CreateTable(&UserInfo{})
	db.CreateTable(&DBUserInfo{})
	db.CreateTable(&MyUser{})
}

人必须要成长!

如今一道为尊,万道相和,几乎很难破。最可怕的是苍穹!

相关推荐
wenxin-3 分钟前
NS3网络模拟器中如何利用Gnuplot工具像MATLAB一样绘制各类图形?
开发语言·matlab·画图·ns3·lr-wpan
数据小爬虫@2 小时前
深入解析:使用 Python 爬虫获取苏宁商品详情
开发语言·爬虫·python
健胃消食片片片片2 小时前
Python爬虫技术:高效数据收集与深度挖掘
开发语言·爬虫·python
王老师青少年编程3 小时前
gesp(C++五级)(14)洛谷:B4071:[GESP202412 五级] 武器强化
开发语言·c++·算法·gesp·csp·信奥赛
一只小bit4 小时前
C++之初识模版
开发语言·c++
王磊鑫5 小时前
C语言小项目——通讯录
c语言·开发语言
钢铁男儿5 小时前
C# 委托和事件(事件)
开发语言·c#
Ai 编码助手5 小时前
在 Go 语言中如何高效地处理集合
开发语言·后端·golang
小丁爱养花5 小时前
Spring MVC:HTTP 请求的参数传递2.0
java·后端·spring
喜-喜5 小时前
C# HTTP/HTTPS 请求测试小工具
开发语言·http·c#