“
目录
2.1 结构体标签
2.2 SQL命名惯例
2.3 表名
2.4 列名
2.5 丢弃未知列
3.1 普通占位符
3.2 命名占位符
3.3 PostgreSQL 标识符和禁用引号
3.4 PostgreSQL IN语句
3.5 PostgreSQL Arrays数组
3.6 全局数据库占位符
在上一节的文章中(这里需要把上个文章的链接帖下TODO:),我们学会了go-pg的基本操作,创建和删除数据库表,相关的增删改查操作等,今天我们来进一步了解下ORM框架基础、模型(model)、SQL占位符的知识。
一、ORM框架简介
对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。
那对象和数据库是如何映射的呢?
数据库 | 面向对象的编程语言 |
---|---|
表(table) | 类(class/struct) |
记录(record,row) | 对象(object) |
字段(field,column) | 对象属性(attribute) |
举一个具体的例子,来理解 ORM:
CREATE TABLE `User` (`Name` text, `Age` integer);
INSERT INTO `User` (`Name`, `Age`) VALUES ("Tom", 18);
SELECT * FROM `User`;
第一条 SQL 语句,在数据库中创建了表 User
,并且定义了 2 个字段 Name
和 Age
;第二条 SQL 语句往表中添加了一条记录;最后一条语句返回表中的所有记录。
如果采用ORM框架来创建表User,如下:
type User struct {
Name string
Age int
}
pg.CreateTable(&User{})
ORM 框架相当于对象和数据库中间的一个桥梁,借助 ORM 可以避免写繁琐的 SQL 语言,仅仅通过操作具体的对象,就能够完成对关系型数据库的操作。
二、定义模型Model
对于每个 PostgreSQL 表,您需要定义一个相应的 Go 结构体(模型)。go-pg 将导出的结构体字段映射到数据库表列,并忽略未导出的字段。
2.1 结构体标签
示例 | 作用 |
---|---|
tableName struct{} pg:"table_name" |
覆盖默认表名 |
tableName struct{} pg:"alias:table_alias" |
覆盖默认表别名。 |
tableName struct{} pg:"select:view_name" |
覆盖 SELECT 查询的表名。 |
tableName struct{} pg:",discard_unknown_columns" | <