• (一)GORM快速入门教程


    一、概述

    GORM是Golang目前比较人们的数据库ORM操作库,对开发者也比较友好,使用非常简单,使用上主要就是把struct类型和数据库表记录进行映射,操作数据库的时候不需要直接手写Sql代码,这里主要介绍MYSQL数据库。
    GORM库github地址:https://github.com/go-gorm/gorm

    二、简单例子

    我们先看个简单的例子了解一下GORM大概怎么使用

    2.1 安装依赖

    操作MYSQL需要安装两个包:

    • MYSQL驱动包
    • GORM包 使用go get命令安装依赖包
    //安装MySQL驱动
    go get -u gorm.io/driver/mysql
    //安装gorm包
    go get -u gorm.io/gorm
    

    2.2 导入依赖包

    import (
      "gorm.io/driver/mysql"
      "gorm.io/gorm"
    )
    

    2.3 GORM操作MYSQL例子

    使用gorm库操作MYSQL步骤:

    1. 使用struct定义模型,模型主要用在golang中代表mysql表
    2. 使用gorm创建数据库连接
    3. 使用gorm操作数据库。

    下面是例子用到的users表结构定义

    CREATE TABLE `users` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
      `username` varchar(30) NOT NULL COMMENT '账号',
      `password` varchar(100) NOT NULL COMMENT '密码',
      `createtime` int(10) NOT NULL DEFAULT 0 COMMENT '创建时间',
       PRIMARY KEY (`id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    

    代码示例

    package main
    
    import (
      "gorm.io/driver/mysql"
      "gorm.io/gorm"
      "fmt"
      "time"
      "errors"
    )
    
    //定义User模型,绑定users表,ORM库操作数据库,需要定义一个struct类型和MYSQL表进行绑定或者叫映射,struct字段和MYSQL表字段一一对应
    //在这里User类型可以代表mysql users表
    type User struct {
        ID int64 // 主键
        //通过在字段后面的标签说明,定义golang字段和表字段的关系
        //例如 `gorm:"column:username"` 标签说明含义是: Mysql表的列名(字段名)为username
        //这里golang定义的Username变量和MYSQL表字段username一样,他们的名字可以不一样。
        Username string `gorm:"column:username"`
        Password string `gorm:"column:password"`
        //创建时间,时间戳
        CreateTime int64 `gorm:"column:createtime"`
    }
    
    //设置表名,可以通过给struct类型定义 TableName函数,返回当前struct绑定的mysql表名是什么
    func (u User) TableName() string {
        //绑定MYSQL表名为users
        return "users"
    }
    
    func main()  {
        //配置MySQL连接参数
        username := "root"  //账号
        password := "123456" //密码
        host := "127.0.0.1" //数据库地址,可以是Ip或者域名
        port := 3306 //数据库端口
        Dbname := "tizi365" //数据库名
    
        //通过前面的数据库参数,拼接MYSQL DSN, 其实就是数据库连接串(数据源名称)
        //MYSQL dsn格式: {username}:{password}@tcp({host}:{port})/{Dbname}?charset=utf8&parseTime=True&loc=Local
        //类似{username}使用花括号包着的名字都是需要替换的参数
        dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", username, password, host, port, Dbname)
        //连接MYSQL
        db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
        if err != nil {
            panic("连接数据库失败, error=" + err.Error())
        }
    
        //定义一个用户,并初始化数据
        u := User{
            Username:"tizi365",
            Password:"123456",
            CreateTime:time.Now().Unix(),
        }
    
        //插入一条用户数据
        //下面代码会自动生成SQL语句:INSERT INTO `users` (`username`,`password`,`createtime`) VALUES ('tizi365','123456','1540824823')
        if err := db.Create(&u).Error; err != nil {
            fmt.Println("插入失败", err)
            return
        }
    
        //查询并返回第一条数据
        //定义需要保存数据的struct变量
        u = User{}
        //自动生成sql: SELECT * FROM `users`  WHERE (username = 'tizi365') LIMIT 1
        result := db.Where("username = ?", "tizi365").First(&u)
        if errors.Is(result.Error, gorm.ErrRecordNotFound) {
            fmt.Println("找不到记录")
            return
        }
        //打印查询到的数据
        fmt.Println(u.Username,u.Password)
    
        //更新
        //自动生成Sql: UPDATE `users` SET `password` = '654321'  WHERE (username = 'tizi365')
        db.Model(&User{}).Where("username = ?", "tizi365").Update("password", "654321")
    
        //删除
        //自动生成Sql: DELETE FROM `users`  WHERE (username = 'tizi365')
        db.Where("username = ?", "tizi365").Delete(&User{})
    }
    

    三、gorm错误处理

    gorm库在执行数据库操作的时候,如果出现错误,则会更行gorm.DB的Error属性,Error属性默认nil,因此在执行数据库操作后检测下Error属性是否为nil即可知道有没有错误发生。

    //插入记录后,检测Error是否为nil
    if err := db.Create(u).Error; err != nil {
        fmt.Println("插入失败", err)
        return
    }
    
  • 相关阅读:
    JS自动化测试 单元测试之Qunit
    mybatis注解开发
    @Valid验证
    httpclient发邮件
    mysql慢查询配置(5.7)
    MySQL5.7.21解压版安装详细教程(转)
    spring注解@Import和@ImportResource
    关于properties文件的读取(Java/spring/springmvc/springboot)
    okclient2详细介绍
    @GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping、@RequestMapping详解
  • 原文地址:https://www.cnblogs.com/infodriven/p/16348116.html
Copyright © 2020-2023  润新知