Gorm是一个基于Go语言的ORM库,它提供了方便的数据库访问接口,使得开发人员可以轻松地操作数据库,而无需处理底层SQL语句的复杂性。但是,在某些情况下,Gorm提供的接口可能无法满足需求,这时我们就需要使用Gorm的原生SQL查询和执行功能。
原生SQL查询
在Gorm中执行原生SQL查询非常简单。我们只需要调用Raw
方法,然后传入SQL查询语句和查询参数即可。例如,以下代码执行了一个简单的SELECT查询:
rows, err := db.Raw("SELECT * FROM users WHERE name = ?", "John").Rows()
defer rows.Close()
for rows.Next() {
var user User
db.ScanRows(rows, &user)
fmt.Printf("%d %sn", user.ID, user.Name)
}
在上面的代码中,我们使用了Raw
方法执行了一个SELECT查询。查询语句中使用了占位符?
来表示参数,然后我们将查询参数传递给Raw
方法。查询结果是一个*sql.Rows
对象,我们需要使用ScanRows
方法将查询结果转换为Gorm的模型对象。
原生SQL执行
除了查询,我们还可以使用Gorm执行原生SQL语句。在Gorm中执行原生SQL语句的方法是Exec
。例如,以下代码执行了一个简单的UPDATE语句:
result := db.Exec("UPDATE users SET name = ? WHERE id = ?", "John", 1)
fmt.Println(result.RowsAffected())
在上面的代码中,我们使用了Exec
方法执行了一个UPDATE语句。查询语句中使用了占位符?
来表示参数,然后我们将查询参数传递给Exec
方法。执行结果是一个sql.Result
对象,我们可以使用RowsAffected
方法获取受影响的行数。