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{})
}

人必须要成长!

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

相关推荐
学习使我变快乐40 分钟前
C++:const成员
开发语言·c++
2401_857439692 小时前
Spring Boot新闻推荐系统:用户体验优化
spring boot·后端·ux
500了2 小时前
Kotlin基本知识
android·开发语言·kotlin
进击的女IT3 小时前
SpringBoot上传图片实现本地存储以及实现直接上传阿里云OSS
java·spring boot·后端
一 乐4 小时前
学籍管理平台|在线学籍管理平台系统|基于Springboot+VUE的在线学籍管理平台系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习
不知所云,4 小时前
qt cmake自定义资源目录,手动加载资源(图片, qss文件)
开发语言·qt
安冬的码畜日常4 小时前
【玩转 JS 函数式编程_006】2.2 小试牛刀:用函数式编程(FP)实现事件只触发一次
开发语言·前端·javascript·函数式编程·tdd·fp·jasmine
阑梦清川4 小时前
Java继承、final/protected说明、super/this辨析
java·开发语言
PythonFun5 小时前
Python批量下载PPT模块并实现自动解压
开发语言·python·powerpoint
Death2005 小时前
Qt 6 相比 Qt 5 的主要提升与更新
开发语言·c++·qt·交互·数据可视化