SQL与GOPRM

database/aql

  • 基本用法

    Quick Start
     db,err := sql.Open("mysql","user:password@tcp(127.0.0.1:3306)/hello")
     rows,err := db.Query("select id, name form users where id = ?",1)
     if err != nil {
     return err
     }
     defer rows.Close()
    var users []User
    for rows.Next() {
        var user User
        err := rows.Scan(&user.ID,&user.Name)
        if err != nil {
            
        }
        users = append(users,user)
        if rows.Err() != nil {
            
        }
    }
  • 设计原理

    • 应用程序--》操作接口--》database/sql (连接池,提升服务性能连接接口,操作接口--》数据库

      //Driver 接口
      type Driver interface{
          Open(name string) (Conn,error)
      }
      //注册全局driver
      func Register(name string,driver driver.Driver) {
      driversMu.Lock()
      if driver == nil {
      panic("sql:Register driver is nil")
      }
      if _,dup := register[name];dup{
      pamic("sql:Register called teice for driver" + name)
      drivers[name] = driver
       }
      }
    • //比较新的创建连接的操作
      type Connector interface {
      Connect(context.Context) (Conn.error)
      Driver() Driver
      }
      func main() {
      connecter,err := mysql.NewConnector(&mysql.Config{
      User: "root",
      Password : "123456",
      Net : "tcp",
      Addr :" 127.0.0.1:3306",
      DBName:"gorm",
      ParseTime:true,
      })
      db := sql.OpenDB(cobbector)
      }
  • DB连接的几种类型

    • 直接连接

    • 预编译

    • 事务

  • 处理返回数据的几种方式

    • Exec /ExecContext - > Result

    • Query/QueryContext -> Rows(Columns)

    • QueryRows/QueryRowContext - > Row(Row简化)

Gorm的基本使用

  • 设计简洁,功能强大,自由扩展的全功能ORM

  • 基本用法

    //操作数据库
    db.AutoMigrate(&Profuct{})
    db.Migrator().Create(&Product{})
    //创建
    user := UserName{Name:"zhang",Age:"20",Birthday:time.Now}
    result := db.Create(&user)
    //批量创建
    var users = []User{{Name:"1"},{Name:"2"},{Name:"3"}}
    db.Create(&users)
    db.CreateInBarches(users,100)
  • 模型定义--管理规定

    • 约定优于配置

  • 关联操作 - 级联删除

    • 级联删除,不依赖数据库约束及软删除

GORM设计原理

  • GORM相当于在应用程序和database/sql之间再加上一层

  • Chain Method Chain Method

  • SELECT Statement

  • SELECT FROM WHERE FROUP BY ORDER BY LIMIT FOR

  • 插件是怎么工作的

    • 1Finisher Method

    • 2 决定Statement类型

    • 3 执行Callbacks

    • 4生成SQL并执行

    • 灵活定制 自由拓展 多租户 多数据库,读写分离,加解密,混沌工程

      Connpool

      • 是一个接口,和数据库进行交互,可以实现读写分离,事务,数据库 DB Conn 数据库

    • 全局模式,所有的DB操作都会预编译并缓存

    • 会话模式,后续会话的操作都会预编译并缓存

    数据安全,ConnPool不能直接到数据库,可以扩展,可以完成各个数据库之间的中转。

    提升性能

    interploateParams=false

    是预编译,但是编译之后就会丢掉

    执行时间可以节省三分之一

    1 执行钱预编译SQL 2 调用预编译的SQL 3 关闭预编译的SQL

Dialector

  • 定制SQL生

  • 定制GORM插件

  • 定制ConnPool

  • 定制企业特性逻辑

  • 默认配置,拓展

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值