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
-
定制企业特性逻辑
-
默认配置,拓展