本文的目的是帮助大家学习使用 GORM(Go 的 ORM 库)连接数据库,并实现增删改查操作.
1.GORM是什么?
GORM 是 Go 语言中的一个 ORM(Object-Relational Mapping)库,全称为 “Go Object Relation Mapping”。那ORM又是什么呢?
ORM 是一种编程技术,用于将对象模型与关系型数据库之间进行映射,从而实现对象的持久化存储和查询操作。其中,一个表对应一个实体类;将一条记录对应一个对象。
GORM 提供了一组简单易用的 API,帮助开发者简化数据库操作过程,使得数据库的增删改查变得更加简洁、高效。它可以和多种关系型数据库进行交互,如 MySQL、PostgreSQL、SQLite、SQL Server 等。
2.结合Java中的知识辅助理解GORM
如果你对Java比较熟悉,那么你应该知道在 Java 中,我们可以通过使用 ORM(对象关系映射)技术来简化与关系型数据库的交互。ORM 技术将 Java 对象与数据库表之间进行映射,使得开发人员可以使用面向对象的方式进行数据库操作,而不需要编写原始的 SQL 语句。常见的 Java ORM 框架包括 Hibernate、MyBatis、Spring Data JPA 等。
以Mybatis为例,
①引入mybatis的依赖,比如在maven中针对pom.xml文件添加依赖
②配置mybatis的信息,比如在config文件夹中配置mybatis-config.xml文件
③定义 Mapper 接口和映射文件,例如
//接口
public interface UserMapper {
User getById(Long id);
List<User> getAll();
void insert(User user);
void update(User user);
void delete(Long id);
}
//映射文件
<mapper namespace="com.example.UserMapper">
<select id="getById" resultType="com.example.User">
SELECT * FROM users WHERE id = #{id}
</select>
<select id="getAll" resultType="com.example.User">
SELECT * FROM users
</select>
<insert id="insert">
INSERT INTO users(name, email) VALUES (#{name}, #{email})
</insert>
<update id="update">
UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}
</update>
<delete id="delete">
DELETE FROM users WHERE id = #{id}
</delete>
</mapper>
④创建会话对象,进行数据库操作
3.GORM是如何进行CRUD的?
在了解完java中是如何实现数据库操作后,我们来看看GORM是如何帮助我们进行相关操作的.
- 安装 GORM
首先,我们需要安装 GORM 库。可以使用以下命令来安装 GORM:
go get -u gorm.io/gorm
- 导入 GORM
在代码中引入 GORM:
import "gorm.io/gorm"
- 连接数据库
在使用 GORM 之前,我们需要先连接数据库。这里以连接 MySQL 数据库为例,使用 GORM 提供的 Open 函数连接数据库:
dsn := "username:password@tcp(localhost:3306)/database_name?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
- 定义模型
在进行数据库操作之前,我们需要定义数据库表对应的模型。例如,我们定义一个 User 模型:
type User struct {
gorm.Model
Name string
Email string
}
- 迁移数据库
GORM 提供了自动迁移功能,可以根据模型创建或更新数据库表。我们可以使用 AutoMigrate 函数来迁移数据库:
err = db.AutoMigrate(&User{})
if err != nil {
panic("failed to migrate database")
}
- 增删改查操作
接下来,我们可以使用 GORM 来进行数据库的增删改查操作。以下是几个常用的示例:
-
- 创建记录:
user := User{Name: "Alice", Email: "alice@example.com"}
db.Create(&user)
-
- 查询单个记录:
var user User
db.First(&user, 1) // 根据 ID 查询第一条记录
db.First(&user, "name = ?", "Alice") // 根据条件查询第一条记录
-
- 查询多个记录:
var users []User
db.Find(&users) // 查询所有记录
db.Where("name = ?", "Alice").Find(&users) // 根据条件查询
-
- 更新记录:
var user User
db.First(&user, 1)
user.Email = "new-email@example.com"
db.Save(&user)
-
- 删除记录:
var user User
db.First(&user, 1)
db.Delete(&user)
4.与go自带的sql包进行比对学习
以下提供go中的"database/sql"包的使用示例,展示如何在Go语言中实现基本的CRUD操作:
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
type User struct {
ID int
Username string
Email string
}
func main() {
// 建立数据库连接
db, err := sql.Open("mysql", "username:password@tcp(host:port)/database")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 查询数据
rows, err := db.Query("SELECT id, username, email FROM users")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
var users []User
for rows.Next() {
var user User
err := rows.Scan(&user.ID, &user.Username, &user.Email)
if err != nil {
log.Fatal(err)
}
users = append(users, user)
}
// 显示查询结果
for _, user := range users {
fmt.Printf("ID: %d, Username: %s, Email: %s\n", user.ID, user.Username, user.Email)
}
// 插入数据
_, err = db.Exec("INSERT INTO users (username, email) VALUES (?, ?)", "john", "john@example.com")
if err != nil {
log.Fatal(err)
}
// 更新数据
_, err = db.Exec("UPDATE users SET email = ? WHERE username = ?", "newemail@example.com", "john")
if err != nil {
log.Fatal(err)
}
// 删除数据
_, err = db.Exec("DELETE FROM users WHERE username = ?", "john")
if err != nil {
log.Fatal(err)
}
}
可以看出通过 GORM,我们可以更加方便地进行数据库操作,提高开发效率。
5.官方文档
需要注意的是,在实际应用中,我们可能会有更多复杂的操作和需求,可以参考 GORM 的官方文档(gorm.io/)来了解更多的功能和用…
今天的学习就到这里啦,明天再见~