GoWeb——Gorm简单使用

1、 Gorm简介

Gorm是Go语言中一款性能极好的ORM库,对开发人员相对比较友好,能够显著提升开发效率。

Gorm有如下功能特点:

  • 是一个全功能ORM(无限接近);
  • 支持关联(Has One、Has Many、Belongs To、Many To Many、多态);
  • 支持钩子函数Hook(在创建/保存/更新/删除/查找之前或之后);
  • 支持预加载:
  • 支持事务;
  • 支持复合主键;
  • 支持SQL生成器;
  • 支持数据库自动迁移;
  • 支持自定义日志;
  • 可扩展性,可基于Gorm回调编写插件;
  • 所有功能都被测试覆盖。

2、Gorm的安装

go get -u github.com/jinzhu/gorm

这里还需要下载一个文件,inflection(若只下载gorm安装过程中会提示缺少inflection这个文件夹)。

https://github.com/jinzhu/inflection

3、Gorm的使用

3.1、数据库连接
import (
	_ "github.com/go-sql-driver/mysql"
	"github.com/jinzhu/gorm"
	"log"
)

func main() {
	db, err := gorm.Open("mysql", "root:123456@(127.0.0.1:3306)/chapter05?"+"charset=utf8mb4&parseTime=True&loc=Local")
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()
	db.DB().SetMaxIdleConns(10)//设置空闲连接池中的最大连接数
	db.DB().SetMaxOpenConns(100)//设置与数据库的最大打开连接数
}
3.2、创建表
create table `gorm_users`(
	`id` int(10) unsigned not null auto_increment,
	`phone` varchar(255) default null,
	`name` varchar(255) default null,
	`password` varchar(255) default null,
	primary key(`id`)
)engine=InnoDB auto_increment=1 default charset=utf8;
3.3、定义结构体
//数据表的结构体类
type GormUser struct {
	ID uint `json:"id"`
	Phone string `json:"phone"`
	Name string `json:"name"`
	Password string `json:"password"`
}
3.4、 插入数据

Gorm中db.Save()和db.Create()方法均可插入数据。根据构造好的结构体对象,直接调用db.Save()方法就可以插入一条记录。示例代码如下:

//创建用户,插入数据
GormUser := model.GormUser{
	Phone:    "18812345678",
	Name:     "Shirdon",
	Password: "666666",
}
//保存到数据库
db.Save(&GormUser)
//db.Create(&GormUser) 用于插入数据
3.5、删除数据

在Gorm中删除数据,一般先用db.Vhere()方法构造查询条件,再调用db.Delete()方法进行删除。示例代码如下:

//删除用户
var user = new(model.GormUser)
affected := db.Where("phone = ?", "18812345678").Delete(&user).RowsAffected
fmt.Println(affected)//1
3.6、查询数据

在Gorm中查询数据,先用db.Where()方法构造查询条件,再用db.Count()方法计算数量。如果要查询多条记录,则可以用db.Find(&GormUser)语句来实现。如果只需要查询一条记录,则可以用db.First(&GormUser)语句来实现。示例代码如下:

//查询数据
var user1 = new(model.GormUser)
db.Where("phone = ?", "18812345678").Find(&user1)
//db.First(&user1, "phone = ?", "18812345678")
fmt.Println(*user1)//{2 18812345678 Shirdon 666666}
3.7、 更新数据

Gorm中更新数据使用Update()方法。其示例代码如下:

//更新数据
var user2 = new(model.GormUser)
n := db.Model(&user2).Where("phone = ?", "18812345678").Update("phone", "11122223333").RowsAffected
fmt.Println(n)//1
3.8、 错误处理

在Gorm中,调用db.Error()方法就能获取到错误信息,非常方便。其示例代码如下:

//错误处理
var user3 = new(model.GormUser)
err = db.Model(&user3).Where("phone = ?", "11122223333").
	Update("phone", "11122224444").Error
if err != nil {
	log.Println(err)
}
3.9、事务处理

Gorm中事务的处理也很简单:用db.Begin()方法声明开启事务,用tx.Commit()方法结束事务,在异常时调用tⅸ.Rollback()方法回滚。事务处理的示例代码如下:

//开启事务
tx := db.Begin()

user4 := model.GormUser{
	Phone:    "123",
	Name:     "tom",
	Password: "sss",
}
if err := tx.Create(&user4).Error; err != nil {
	//事务回滚
	tx.Rollback()
	fmt.Println(err)
}
db.First(&user4, "phone = ?", "11122224444")
fmt.Println(user4)
//事务提交
tx.Commit()
10、日志处理

Gorm中还可以使用如下方式设置日志输出级别,一级改变日志的输出地方:

//日志处理
db.LogMode(true)
db.SetLogger(log.New(os.Stdout, "\r\n", 0))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值