ORM之sqlc

1. 安装sqlc go get github.com/kyleconroy/sqlc/cmd/sqlc 2. 基本使用 建立基本项目结构 mkdir sqlc-demo cd sqlc-demo go mod init sqlc-demo 在sqlc-demo中建立如下目录结构: . ├── db │ ├── queries │ ├── schema │ └── sqlc └── go.mod 其中query中存储查询语句,schema中存储数据库表结构,sqlc中存储生成的代码。 基本表结构 sqlc-demo/db/schema/table.sql CREATE TABLE "accounts" ( "id" bigserial PRIMARY KEY, "owner" varchar NOT NULL, "balance" bigint NOT NULL, "currency" varchar NOT NULL, "created_at" timestamptz NOT NULL DEFAULT (now()) ); CREATE TABLE "entries" ( "id" bigserial PRIMARY KEY, "account_id" bigint NOT NULL, "amount" bigint NOT NULL, "created_at" timestamptz NOT NULL DEFAULT (now()) ); CREATE TABLE "transfers" ( "id" bigserial PRIMARY KEY, "from_account_id" bigint NOT NULL, "to_account_id" bigint NOT NULL, "amount" bigint NOT NULL, "created_at" timestamptz NOT NULL DEFAULT (now()) ); 配置文件 sqlc-demo/sqlc....

August 22, 2021 · 3 min · 李昌

ORM简介

1. ORM是什么 面向对象编程把所有实体看成对象(object),关系型数据库则是采用实体之间的关系(relation)连接数据。很早就有人提出,关系也可以用对象表达,这样的话,就能使用面向对象编程,来操作关系型数据库。 简单的说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。 ORM把数据库映射为对象 数据库的表(table) –> 类(class) 记录(record,行数据)–> 对象(object) 字段(field)–> 对象的属性(attribute) 举例来说,下面是一行SQL语句 SELECT id, first_name, last_name, phone, birth_date, sex FROM persons WHERE id = 10 程序直接运行SQL,操作数据库的写法如下: res = db.execSql(sql) name = res[0]["FIRST_NAME"] 改成ORM的写法如下: p = Person.get(10) name = p.first_name 一比较就可以发现,ORM 使用对象,封装了数据库操作,因此可以不碰 SQL 语言。开发者只使用面向对象编程,与数据对象直接交互,不用关心底层数据库。 总结起来,ORM有如下优点: 数据模型都在一个地方定义,更容易更新和维护,也利于重用代码。 ORM 有现成的工具,很多功能都可以自动完成,比如数据消毒、预处理、事务等等。 它迫使你使用 MVC 架构,ORM 就是天然的 Model,最终使代码更清晰。 基于 ORM 的业务代码比较简单,代码量少,语义性好,容易理解。 你不必编写性能不佳的 SQL。 但是ORM也有很突出的缺点: ORM 库不是轻量级工具,需要花很多精力学习和设置。 对于复杂的查询,ORM 要么是无法表达,要么是性能不如原生的 SQL。 ORM 抽象掉了数据库层,开发者无法了解底层的数据库操作,也无法定制一些特殊的 SQL。 2....

April 6, 2021 · 2 min · 李昌