zoukankan      html  css  js  c++  java
  • GORM安装

    GORM安装

    Github GORM

    The fantastic ORM library for Golang aims to be developer friendly.

    特性

    • 全功能 ORM
    • 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
    • Create,Save,Update,Delete,Find 中钩子方法
    • 支持 PreloadJoins 的预加载
    • 事务,嵌套事务,Save Point,Rollback To Saved Point
    • Context、预编译模式、DryRun 模式
    • 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
    • SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
    • 复合主键,索引,约束
    • Auto Migration
    • 自定义 Logger
    • 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
    • 每个特性都经过了测试的重重考验
    • 开发者友好

    中文官方网站内含十分齐全的中文文档,有了它你甚至不需要再继续向下阅读本文。

    一、安装

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

    二、连接数据库

    GORM 官方支持的数据库类型有: MySQL, PostgreSQL, SQlite, SQL Server

    连接不同的数据库都需要导入对应数据的驱动程序,GORM已经贴心的为我们包装了一些驱动程序,只需要按如下方式导入需要的数据库驱动即可:

    import _ "gorm.io/driver/mysql"
    // import _ "gorm.io/driver/postgres"
    // import _ "gorm.io/driver/dialects/sqlite"
    // import _ "gorm.io/driver/dialects/mssql"
    

    三、连接MySQL

    package main
    import (
    	"gorm.io/driver/mysql"
    	"gorm.io/gorm"
    )
    
    func main() {
    	dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
    	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    	defer db.Close()
    }
    
    

    注意:想要正确的处理 time.Time ,您需要带上 parseTime 参数, (更多参数) 要支持完整的 UTF-8 编码,您需要将 charset=utf8 更改为 charset=utf8mb4 查看 此文章 获取详情

    MySQl 驱动程序提供了 一些高级配置 可以在初始化过程中使用,例如:

    db, err := gorm.Open(mysql.New(mysql.Config{
      DSN: "gorm:gorm@tcp(127.0.0.1:3306)/gorm?charset=utf8&parseTime=True&loc=Local", // DSN data source name
      DefaultStringSize: 256, // string 类型字段的默认长度
      DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持
      DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
      DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列
      SkipInitializeWithVersion: false, // 根据当前 MySQL 版本自动配置
    }), &gorm.Config{})
    

    自定义驱动

    GORM 允许通过 DriverName 选项自定义 MySQL 驱动,例如:

    import (
      _ "example.com/my_mysql_driver"
      "gorm.io/gorm"
    )
    
    db, err := gorm.Open(mysql.New(mysql.Config{
      DriverName: "my_mysql_driver",
      DSN: "gorm:gorm@tcp(localhost:9910)/gorm?charset=utf8&parseTime=True&loc=Local", // Data Source Name,参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name
    }), &gorm.Config{})
    

    现有的数据库连接

    GORM 允许通过一个现有的数据库连接来初始化 *gorm.DB

    import (
      "database/sql"
      "gorm.io/gorm"
    )
    
    sqlDB, err := sql.Open("mysql", "mydb_dsn")
    gormDB, err := gorm.Open(mysql.New(mysql.Config{
      Conn: sqlDB,
    }), &gorm.Config{})
    

    四、连接PostgreSQL

    基本代码同上,注意引入对应postgres驱动并正确指定gorm.Open()参数。

    import (
      "gorm.io/driver/postgres"
      "gorm.io/gorm"
    )
    
    
    func main() {
     	dsn := "host=localhost user=gorm password=gorm dbname=gorm port=9920 sslmode=disable TimeZone=Asia/Shanghai"
    	db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
        defer db.Close()
    }
    

    五、连接Sqlite3

    基本代码同上,注意引入对应sqlite驱动并正确指定gorm.Open()参数。

    import (
      "gorm.io/driver/sqlite"
      "gorm.io/gorm"
    )
    
    
    
    func main() {
      // github.com/mattn/go-sqlite3
      db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{})
      defer db.Close()
    }
    

    注意: 您也可以使用 file::memory:?cache=shared 替代文件路径。 这会告诉 SQLite 在系统内存中使用一个临时数据库。 (查看 SQLite 文档 获取详情)

    六、连接SQL Server

    基本代码同上,注意引入对应mssql驱动并正确指定gorm.Open()参数。

    import (
      "gorm.io/driver/sqlserver"
      "gorm.io/gorm"
    )
    
    
    func main() {
    	// github.com/denisenkom/go-mssqldb
        dsn := "sqlserver://gorm:LoremIpsum86@localhost:9930?database=gorm"
        db, err := gorm.Open(sqlserver.Open(dsn), &gorm.Config{})
        defer db.Close()
    }
    

    Clickhouse

    https://github.com/go-gorm/clickhouse

    import (
      "gorm.io/driver/clickhouse"
      "gorm.io/gorm"
    )
    
    func main() {
      dsn := "tcp://localhost:9000?database=gorm&username=gorm&password=gorm&read_timeout=10&write_timeout=20"
      db, err := gorm.Open(clickhouse.Open(dsn), &gorm.Config{})
    
      // Auto Migrate
      db.AutoMigrate(&User{})
      // Set table options
      db.Set("gorm:table_options", "ENGINE=Distributed(cluster, default, hits)").AutoMigrate(&User{})
    
      // 插入
      db.Create(&user)
    
      // 查询
      db.Find(&user, "id = ?", 10)
    
      // 批量插入
      var users = []User{user1, user2, user3}
      db.Create(&users)
      // ...
    }
    

    七、连接池

    GORM 使用 database/sql 维护连接池

    sqlDB, err := db.DB()
    
    // SetMaxIdleConns 设置空闲连接池中连接的最大数量
    sqlDB.SetMaxIdleConns(10)
    
    // SetMaxOpenConns 设置打开数据库连接的最大数量。
    sqlDB.SetMaxOpenConns(100)
    
    // SetConnMaxLifetime 设置了连接可复用的最大时间。
    sqlDB.SetConnMaxLifetime(time.Hour)
    

    查看 通用接口 获取详情。

    不支持的数据库

    有些数据库可能兼容 mysqlpostgres 的方言,在这种情况下,你可以直接使用这些数据库的方言。

    对于其它不支持的数据,我们鼓励且欢迎大家伙开发更多数据库类型的驱动!

  • 相关阅读:
    Oracle over函数
    如何用 SQL Tuning Advisor (STA) 优化SQL语句
    Oracle SQL的硬解析和软解析
    Oracle执行计划详解
    正则表达式的语法规则
    ArcGIS Runtime for Android开发教程V2.0(3)基础篇---Hello World Map
    ArcGIS Runtime for Android开发教程V2.0(2)开发环境配置
    ArcGIS Runtime for Android开发教程V2.0(1)基本概念
    在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。
    配置SQL Server 2008服务器
  • 原文地址:https://www.cnblogs.com/randysun/p/15626712.html
Copyright © 2011-2022 走看看