这是我参与「第三届青训营 -后端场」笔记创作活动的第4篇笔记
database/aql
- 基本用法 GORM是一种对象关系映射ORM框架,数据表对应结构体,数据行对应结构体实例,数据库字段对应结构体字段。
在gorm中,表名默认就是结构体名称的复数,也可以通过方法或者db.Table("表名")自定义表名;
列名由两个单词组成,在数据库中默认转小写后用下划线链接;
如果结构体有ID字段则默认ID字段为主键。
-
设计原理
-
//比较新的创建连接的操作 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) -
模型定义--管理规定
-
关联操作 - 级联删除
级联删除,不依赖数据库约束及软删除 模型名和表名的映射关系 规则 第一个大写字母变为小写; 遇到其他大写字母变为小写并且在前面加下划线; 连着的几个大写字母,只有第一个遵循上面的两条规则,其他的大写字母转为小写,不加下划线,遇到小写,前面的第一个大写字母变小写并加下划线; 复数形式; 举例 User => users 首字母小写,复数 UserInfo => user_infos DBUserInfo => db_user_infos DBXXXXUserInfo => dbxxxx_user_infos
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不能直接到数据库,可以扩展,可以完成各个数据库之间的中转。 GORM 使用 database/sql 的参数占位符构造 SQL 语句,会自动转义参数以避免 SQL 注入,但生成的 SQL 不提供安全保证,请仅用于调试。 # 提升性能 interploateParams=false 是预编译,但是编译之后就会丢掉 执行时间可以节省三分之一 1 执行钱预编译SQL 2 调用预编译的SQL 3 关闭预编译的SQL
Dialector
- 定制SQL生
- 定制GORM插件
- 定制ConnPool
- 定制企业特性逻辑
- 默认配置,拓展