• gorm基础之连接MySQL数据库


    1、导入相关包

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

    2、连接Mysql数据库

    //配置MySQL连接参数
    //username := "root"  //账号
    //password := "123456" //密码
    //host := "127.0.0.1" //数据库地址,可以是Ip或者域名
    //port := 3306 //数据库端口
    //Dbname := "tizi365" //数据库名
    //timeout := "10s" //连接超时,10秒
    func ConnDB(username,password,host string,port int,Dbname,timeout string)*gorm.DB{
    	//拼接下dsn参数, dsn格式可以参考上面的语法,这里使用Sprintf动态拼接dsn参数,因为一般数据库连接参数,我们都是保存在配置文件里面,需要从配置文件加载参数,然后拼接dsn。
    	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local&timeout=%s", username, password, host, port, Dbname, timeout)
    	//连接MYSQL, 获得DB类型实例,用于后面的数据库读写操作。
    	_db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    	if err != nil {
    		panic("连接数据库失败, error=" + err.Error())
    	}
    	return _db
    }
    

    3、迁移表

    type User struct {
    	Group int	`gorm:"primarykey"`
    	Location int
    	Level int
    	Phone string
    	Password string
    }
    
    db.AutoMigrate(&User{})
    

      注意:迁移的结构体的字段首字母要大写。

    4、CRUD操作

    增加

    user:=User{1,2}
    db.Create(&user) // 通过数据的指针来创建
    db.Select("Name", "Age", "CreatedAt").Create(&user)//创建记录并更新给出的字段
    db.Omit("Name", "Age", "CreatedAt").Create(&user)//创建记录并更新未给出的字段

    批量插入

    users:=[]User{{10,2},{3,4},{5,6}}
    db.Create(&users)j

    查询

    // 获取第一条记录(主键升序)
    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.First(&user, 10)
    // SELECT * FROM users WHERE id = 10;
    
    db.First(&user, "10")
    // SELECT * FROM users WHERE id = 10;
    
    db.Find(&users, []int{1,2,3})
    // SELECT * FROM users WHERE id IN (1,2,3);
    
    // 获取全部记录
    result := db.Find(&users)
    // SELECT * FROM users;
    
    // 获取第一条匹配的记录
    db.Where("name = ?", "jinzhu").First(&user)
    // SELECT * FROM users WHERE name = 'jinzhu' ORDER BY id LIMIT 1;
    
    // 获取全部匹配的记录
    db.Where("name <> ?", "jinzhu").Find(&users)
    // SELECT * FROM users WHERE name <> 'jinzhu';
    
    // IN
    db.Where("name IN ?", []string{"jinzhu", "jinzhu 2"}).Find(&users)
    // SELECT * FROM users WHERE name IN ('jinzhu','jinzhu 2');
    
    // LIKE
    db.Where("name LIKE ?", "%jin%").Find(&users)
    // SELECT * FROM users WHERE name LIKE '%jin%';
    
    // AND
    db.Where("name = ? AND age >= ?", "jinzhu", "22").Find(&users)
    // SELECT * FROM users WHERE name = 'jinzhu' AND age >= 22;
    
    // Time
    db.Where("updated_at > ?", lastWeek).Find(&users)
    // SELECT * FROM users WHERE updated_at > '2000-01-01 00:00:00';
    
    // BETWEEN
    db.Where("created_at BETWEEN ? AND ?", lastWeek, today).Find(&users)
    // SELECT * FROM users WHERE created_at BETWEEN '2000-01-01 00:00:00' AND '2000-01-08 00:00:00';
  • 相关阅读:
    tracert命令与tracert (IP地址)-d有什么区别?
    linux下通过进程名查看其占用端口
    Union和Union All的区别
    外连接、内连接
    Linux 删除文件夹和文件的命令(强制删除包括非空文件)
    linux查看当前目录
    Linux chmod命令及权限含义
    MySQL的if,case语句
    case when
    java生成验证码图片
  • 原文地址:https://www.cnblogs.com/mango1997/p/16056589.html
Copyright © 2020-2023  润新知