设计模式之 Database/SQL 与 GORM 实践|青训营笔记

150 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第6篇笔记。

ppt见设计模式之 database sql与 GORM实践

理解database/sql

Go连接数据库

关于Golang中database/sql包的学习笔记 - SegmentFault 思否

golang——database/sql包学习 - 笃志弘毅 - 博客园 (cnblogs.com)

package main

import (
   "database/sql"
   "fmt"
   _ "github.com/go-sql-driver/mysql"
   "log"
)

func main() {
   var (
      id   int
      name string
      age  int
   )
   //get a link from SQL
   //root is mysql user's name 123456 is password tcp is connection method  test01 is the DB name
   db, _ := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test01")
   // check the link
   err := db.Ping()
   if err != nil {
      fmt.Println("fault:failed to get a link from SQL")
   }
   defer db.Close()

   //search data by signal line
   sqlStr := "select id,name,age from user where id=?"
   // function db.QueryRow:
   // sqlStr is a query sentence 1 means
   err = db.QueryRow(sqlStr, 1).Scan(&id, &name, &age)
   if err != nil {
      log.Fatal("error{}", err)
      return
   }
   fmt.Printf("id:%d name:%s age:%d\n", id, name, age)
}

简单来说 "database/sql"提供了一个抽象的数据库接口,并没有实现具体的数据库类型。仅仅是实现标准化即在golang中对数据库操作的统一操作格式。 "github.com/go-sql-driver/mysql" 是一个MySQL的驱动,他接收database/sql 传入的命令然后直接作用的MySQL数据库进行操作。

sql.DB不是一个连接,它是数据库的抽象接口。它可以根据driver打开关闭数据库连接,管理连接池。正在使用的连接被标记为繁忙,用完后回到连接池等待下次使用。所以,如果你没有把连接释放回连接池,会导致过多连接使系统资源耗尽。

GORM

什么是ORM

ORM全称为 object-relation-mapping 对象关系映射

数据库中的表与编译器中的变量是没有关联的

ORM提供了实现持久化层的另一种模式,它采用映射元数据来描述对象关系的映射,使得ORM中间件能在任何一个应用的业务逻辑层和数据库层之间充当桥梁

ORM的方法论基于三个核心原则:

  • 简单:以最基本的形式建模数据
  • 传达性:数据库结构被任何人都能理解的语言文档化
  • 精确性:基于数据模型创建正确标准化了的结构 而ORMG是“设计简洁、功能强大、自由扩展的全功能ORM” 参照gorm中文文档

GORM设计原理

SQL是怎么生成的

简单的一个SQL语句

image.png gorm的实现

image.png