Gorm-Go语言操作数据库框架 | 青训营笔记

44 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

基本的go语言语法我们已经了解了,那么我们就快进到操作数据库吧,我认为这才是一门语言比较重要的部分,想学会这个,我们首先肯定要看的是语言官网的quick start是最迅速的 ,话不多说我们直接开始


建立连接

就像JDBC一样,想要操作数据库我们首先就要建立与数据库的连接,当然在建立连接之前,我们先把依赖装好

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql 

装好依赖之后,通过一行语句我们就可以建立连接了

db, err := gorm.Open(mysql.Open("test.db"), &gorm.Config{})

当然,在Conifg中我们要填写mysql的地址、端口号等信息

ok,当我们拿到这个数据库的db对象后,我们就可以进行CRUD操作了,这一切就是我们的基石


增操作

对于一条User记录,我们在数据库里有对应的表,那么我们直接通过

user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}
result := db.Create(&user) // 通过数据的指针来创建

十分的简单粗暴,实际上只用了一行就创建了记录

var users = []User{{Name: "jinzhu1"}, {Name: "jinzhu2"}, {Name: "jinzhu3"}} db.Create(&users)

同样也支持一个批量插入数据 还有一个细节就是比如在我们Java中我们Mybatis插入数据,在xml里设置一下就可以让id的值回填到我们的类中,而在我们Gorm中,它会自动回填主键的值


查操作

// 获取第一条记录(主键升序)
db.First(&user)
// SELECT * FROM users ORDER BY id LIMIT 1;
// 获取一条记录,没有指定排序字段
db.Take(&user) 
// SELECT * FROM users LIMIT 1;  
// 获取最后一条记录(主键降序) 
db.Last(&user) // SELECT * FROM users ORDER BY id DESC LIMIT 1;
// 查找所有数据
db.Find(&users)  
// SELECT * FROM users);

还是比较好理解的, db.First就是找到第一条对应数据带排序 Take就是获取第一条 不带排序 Last带排序,找最后一条 Find就是Select *


更新操作

首先是直接Save一个类 db.First(&user)

user.Name = "jinzhu 2"  
user.Age = 100  
db.Save(&user)  
// UPDATE users SET name='jinzhu 2', age=100, birthday='2016-01-01', updated_at = '2013-11-17 21:34:10' WHERE id=111;

这样的方法不好的就是它会保存所有的字段,即使字段是零值

还有别的方法

// 条件更新
db.Model(&User{}).Where("active = ?", true).Update("name", "hello")
// UPDATE users SET name='hello', updated_at='2013-11-17 21:34:10' WHERE active=true;

// User 的 ID 是 `111`
db.Model(&user).Update("name", "hello")
// UPDATE users SET name='hello', updated_at='2013-11-17 21:34:10' WHERE id=111;

// 根据条件和 model 的值进行更新
db.Model(&user).Where("active = ?", true).Update("name", "hello")
// UPDATE users SET name='hello', updated_at='2013-11-17 21:34:10' WHERE id=111 AND active=true;

当使用 Update 更新单列时,需要有一些条件,否则将会引起错误 ErrMissingWhereClause


删操作

删除一条记录时,删除对象一定要指定条件,否则会触发就会执行一个全表删除,例如:

// Email 的 ID 是 `10`
db.Delete(&email)
// DELETE from emails where id = 10;

// 带额外条件的删除
db.Where("name = ?", "jinzhu").Delete(&email)
// DELETE from emails where id = 10 AND name = "jinzhu";

以上就是一些简单的Gorm CRUD操作啦,相信这一定给了你做大项目一定的思路,至少最底下的东西构思是有基础了! 我们下一篇笔记见!