探究ORM与GORM:简化数据库操作的力量
创始人
2025-07-05 11:11:32
0

在我目前正在参与的项目中,主要使用了Golang语言开发工程,其中涉及到很多数据库的操作,我主要使用了GORM,在这里也推荐给大家。

在现代软件开发中,与数据库打交道是一个常见的任务。数据库是我们存储和检索数据的关键工具,而访问数据库通常需要大量的编码工作。但是,有一种技术可以极大地简化这个过程,那就是对象关系映射,简称ORM。

什么是ORM?

ORM是一种编程技术,它将对象和关系数据库之间的数据映射起来。它允许开发人员使用面向对象的方式来处理数据库操作,而不必编写复杂的SQL查询。ORM工具将数据库表映射到编程语言中的对象,允许您通过操作对象来执行数据库操作。

ORM的好处:简化数据库访问、提高可移植性、减少错误、提高并发等

开发人员可以使用编程语言的对象和方法来执行数据库操作,而不必深入了解SQL。ORM通常支持多种数据库,使应用程序更容易在不同的数据库系统之间迁移。

golang gorm的使用

GORM的使用

GORM是一种基于Go语言的ORM库,它提供了强大的数据库访问和查询功能。它是Go语言社区中最受欢迎的ORM工具之一,因为它简化了与数据库的交互,并提供了丰富的功能。Gorm也是我目前我在项目中使用的一种ORM,也向大家推荐使用,GORM的主要功能包括:

  • 模型定义:使用Go结构体定义数据库表模型,GORM会自动生成数据库表。
  • 数据库迁移:通过GORM的自动迁移功能,您可以轻松管理数据库模式的变化。
  • 查询构建:GORM提供了强大的查询构建器,允许您执行复杂的数据库查询,包括筛选、排序、分页等。
  • 事务管理:GORM支持事务,确保数据库操作的原子性。

举例说明

通过Gorm创建数据库,只需要定义对应的表即可,例如:

// FwsScenicModel 基础模型
type FwsScenicModel struct {
        ID        uint `gorm:"primaryKey"`
        CreatedAt time.Time
        UpdatedAt time.Time
        DeletedAt sql.NullTime
}

// FwsSysConfigs 系统配置表
type FwsSysConfigs struct {
        FwsScenicModel
        Index        string `gorm:"uniqueIndex;size:255"`
        AiComUrl     string
        WxAppid      string
        WxAppSecret  string
}

// FwsSysUsers 系统用户表
type FwsSysUsers struct {
        FwsScenicModel
        UserId       string
        UserName     string `gorm:"uniqueIndex;size:255"`
        UserPwd      string
        UserRealName string
        UserRoleId   string
        UserState    string
        UserDesc     string
}

连接数据库、创建数据表,迁移数据,例如:

dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
			    config.MysqlUserName, config.MysqlUserPassword, config.MysqlIP, 
          config.MysqlPort, config.MysqlDbName)
          GormDB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
            Logger: logger.Default.LogMode(logger.Error), // Print SQL statements
            DisableForeignKeyConstraintWhenMigrating: true,
})
    
GormSqlDB, err = GormDB.DB()
    if err != nil {
        zap.L().Error("dbConnect", zap.Error(err))
        return
	}

GormSqlDB.SetMaxOpenConns(100) // 设置最大打开连接数
GormSqlDB.SetMaxIdleConns(20)  // 设置最大空闲连接数
GormSqlDB.SetConnMaxLifetime(time.Hour)

GormDB.AutoMigrate(&FwsSysUsers{}, &FwsSysRoles{}, &FwsSysConfigs{})

操作数据:

role := FwsSysRoles{
    RoleId:       "0",
    RoleFuncAuth: config.FwsFuncList,
    RoleName:     "超管",
    RoleState:    "enable",
}
// 使用FirstOrCreate来查找,如果不存在则插入,存在则更新
result := GormDB.Where(FwsSysRoles{RoleId: role.RoleId}).FirstOrCreate(&role)
if result.Error == nil {
    if result.RowsAffected == 0 { // 返回插入记录的条数
        updates := map[string]interface{}{
          "role_func_auth": config.FwsFuncList, // 设置要更新的字段
        }
        GormDB.Model(&FwsSysRoles{}).
        Where(FwsSysRoles{RoleId: role.RoleId}).Updates(updates)
  }
}

总的来说,ORM和GORM的组合提供了强大的数据库操作工具,使开发人员能够更轻松地与数据库交互,同时减少了错误和提高了开发效率。

在当今的软件开发中,ORM和GORM已经变得不可或缺。它们不仅简化了数据库操作,还提供了更好的代码组织和可维护性。无论您是刚刚入门还是有经验丰富的开发人员,了解ORM和使用GORM都将大大改善您的数据库访问体验。

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...