Оригинальный автор, публичный аккаунт [программист чтение], прошу обратить внимание на паблик аккаунт, просьба указывать источник перепечатываемой статьи.
В прошлой статье мы рассмотрели использование стандартной библиотеки языка Go.sql/databaseпроцесс манипулирования базой данных, хотя и с использованиемsql/databaseТакже очень удобно манипулировать данными по пакетам, но нам нужно самим писать каждое выражение SQL, поэтому мы можем сами переупаковать его для лучшего использования и использовать существующий язык Go для открытого исходного кода.ORMФреймворк — лучший способ заменить собственную инкапсуляцию.
ORM, объектно-реляционное отображение (Object Relational Mapping), который может быть просто понят как关系型数据库середина数据表Сопоставляется с определенными типами данных в языке программирования (например,struct),иGORMБиблиотека представляет собой очень полную и простую в использовании библиотеку, реализованную на языке Go.ORMРамка.
Давайте рассмотрим, как использоватьGORMКадр это!
характеристика
- Ассоциация (имеет один, имеет много, принадлежит, многие ко многим, полиморфизм)
- Хуки (до или после создания/сохранения/обновления/удаления/поиска)
- Предварительная загрузка
- дела
- составной первичный ключ
- Генератор SQL
- Автоматическая миграция базы данных
- пользовательский журнал
- Возможность расширения для написания плагинов на основе обратных вызовов GORM
Как установить
УстановитьGORMочень просто, используйтеgo get -uты сможешьGOPATHУстановите последнюю из каталогаGROMРамка.
go get -u github.com/jinzhu/gorm
После установки вы можете использоватьimportимпорт ключевых словGORMБиблиотека, начни пользоваться!
import "github.com/jinzhu/gorm"
поддерживаемые базы данных
GORMПоддержка фреймворкаMySQL,SQL Server,Sqlite3,PostgreSQLЧетыре драйвера базы данных, если мы хотим подключиться к этим базам данных, нам нужно импортировать разные пакеты драйверов и определить разные форматы.DSN(Data Source Name).
MySQL
1. Импорт
import _ "github.com/jinzhu/gorm/dialects/mysql"
//或者//import _ "github.com/go-sql-driver/mysql"
2. DSN
//user指用户名,password指密码,dbname指数据库名
"user:password@/dbname?charset=utf8&parseTime=True&loc=Local"
SQL Server
1. Импорт
import _ "github.com/jinzhu/gorm/dialects/mssql"
2. DSN
//username指用户名,password指密码,host指主机地址,port指端口号,database指数据库名
"sqlserver://username:password@host:port?database=dbname"
Sqlite3
1. Импорт
import _ "github.com/jinzhu/gorm/dialects/sqlite"
2. DSN
Чтобы подключить DSN базы данных Sqlite3, вам нужно только указать путь к файлу базы данных Sqlite3, например:
//数据库路径
/tmp/gorm.db
PostgreSQL
1. Импорт
import _ "github.com/jinzhu/gorm/dialects/postgres"
2. DSN
//host指主机地址,port指端口号,user指用户名,dbname指数据库名,password指密码
host=myhost port=myport user=gorm dbname=gorm password=mypassword
Подключиться к базе данных
Выше мы определили DSN, которые подключаются к разным базам данных.Следующее демонстрирует, что если вы подключаетесь к базе данных, используйтеgorm.Open()метод может инициализировать и возвращатьgorm.DBСтруктура, эта структура инкапсулирует все методы работы с базой данных фреймворка GORM.gorm.Open()Определение метода:
func Open(dialect string, args ...interface{}) (db *DB, err error)
Образец кода:
package main
import "github.com/jinzhu/gorm"
import _ "github.com/jinzhu/gorm/dialects/mysql"//导入连接MySQL数据库的驱动包
//DSN
const DSN = "root:123456@tcp(localhost:3306)/test?charset=utf8&parseTime=True&loc=Local"
//指定驱动
const DRIVER = "mysql"
var db *gorm.DB
func init() {
var err error
db,err = gorm.Open(DRIVER,DSN)
if err != nil{
panic(err)
}
}
func main(){
defer db.Close()//退出前执行关闭
//调用db执行具体的逻辑
}
В приведенном выше примере мы инициализируем в методе initgorm.DBструктура, так что переменные могут быть использованы непосредственно в следующих примерахdbПрямые операции с базой данных.
Основная операция
использоватьgorm.Open()функция возвращаетgorm.DBПосле структуры мы можем использоватьgorm.DBМетоды, предоставляемые структурой, управляют базой данных.Ниже мы покажем, как использоватьgorm.DBВыполнение самых основных операций, таких как создание, запрос, обновление и удаление.
фактическиgorm.DBна языке гоdatabase/sqlв библиотекеsql.DBпереупаковка в структуре, потому чтоgorm.DBобеспечивает множество иsql.DBтак же следующим образом:
func (s *DB) Exec(sql string, values ...interface{}) *DB
func (s *DB) Row() *sql.Row
func (s *DB) Rows() (*sql.Rows, error)
func (s *DB) Scan(dest interface{}) *DB
Кроме того, используйтеgorm.DBв структуреDB()метод, который возвращаетsql.DBобъекта следующим образом:
func (s *DB) DB() *sql.DB
Далее демонстрируется использованиеgorm.DBВ структуре есть несколько более простых методов для выполнения основных операций с базой данных, но перед демонстрацией нам нужно определить модель следующим образом:
type User struct {
Id int //对应数据表的自增id
Username string
Password string
Email string
Phone string
}
Мы определяем имя какUserструктура,GROMОн поддерживает сопоставление структуры со строкой таблицы данных в соответствии с правилами.Каждое поле структуры представляет собой столбец таблицы данных.Первая буква поля структуры должна быть заглавной.
Создайте
использоватьgorm.DBсерединаCreate()метод,GORMбудет переданоCreate()метод модели для вставки строки в таблицу данных.
func (s *DB) Create(value interface{}) *DB //创建一行
func (s *DB) NewRecord(value interface{}) bool //根据自增id判断主键是否存在
Пример
func main() {
defer db.Close()
//具体的逻辑
u := &User{Username: "test_one", Password: "testOne123456", Email: "test_one@163.com", Phone: "13711112222"}
db.Create(u)
if db.NewRecord(u){
fmt.Println("写入失败")
}else{
fmt.Println("写入成功")
}
}
Запрос
GROMкадр вsql/databaseНативная основа пакета инкапсулирует простой метод, который можно напрямую вызывать для сопоставления данных с соответствующей структурной моделью.Он очень прост в использовании, а именно:
//返回第一条
func (s *DB) First(out interface{}, where ...interface{}) *DB
//返回最后一条
func (s *DB) Last(out interface{}, where ...interface{}) *DB
//返回符合条件的内容
func (s *DB) Find(out interface{}, where ...interface{}) *DB
//返回Count(*)结果
func (s *DB) Count(value interface{}) *DB
образец кода
//Find方法示例
func find() {
var users = make([]*User, 0)
db.Model(&User2{}).Find(&users)
fmt.Println(users)
}
//First方法示例
func first() {
var user1,user2 User
db.First(&user1)
fmt.Println(user1)
db.First(&user2,"id = ?",20)
fmt.Println(user2)
}
//Last方法示例
func last() {
var user1,user2 User
db.Last(&user1)
fmt.Println(user1)
db.First(&user2,"id = ?",19)
fmt.Println(user2)
}
//Count方法示例
func count() {
var count int
db.Model(&User{}).Count(&count)
fmt.Println(count)
}
возобновить
Данные обновления могут быть использованыgorm.DBизSave()илиUpdate(),UpdateColumn(),UpdateColumns(),Updates()и другие методы, последние четыре метода необходимо сочетать сModel()методы используются совместно.
func (s *DB) Save(value interface{}) *DB
func (s *DB) Model(value interface{}) *DB
//下面的方法需要与Model方法一起使用,通过Model方法指定更新数据的条件
func (s *DB) Update(attrs ...interface{}) *DB
func (s *DB) UpdateColumn(attrs ...interface{}) *DB
func (s *DB) UpdateColumns(values interface{}) *DB
func (s *DB) Updates(values interface{}, ignoreProtectedAttrs ...bool) *DB
пример кода
//Save()方法示例
func save(){
u := &User{}
db.First(u)
u.Email = "test@163.com"
db.Save(u)
fmt.Println(u)
}
//Update方法示例
func update() {
u := &User{}
db.First(u)
db.Model(u).Update("username", "hello")
}
//Updates方法示例
func updates() {
u := &User{}
db.First(u)
db.Model(&u).Updates(map[string]interface{}{"username": "hello2"})
}
Удалить
использоватьgorm.DBизDelete()Этот метод может быть очень простым для удаления записей, соответствующих условиям.Delete()Определение метода:
//value如果有主键id,则包含在判断条件内,通过where可以指定其他条件
func (s *DB) Delete(value interface{}, where ...interface{}) *DB
образец кода
func delete(){
defer db.Close()
u := &User{Id: 16}
db.Delete(u)//根据id
db.Delete(&User{},"username = ? ","test_one")//根据额外条件删除
}
резюме
В этой статье мы просто объясним, как использоватьGROMКак фреймворк подключается и просто управляет базой данных, на самом делеGROMФреймворк также имеет много более продвинутых функций, которые могут сделать нашу разработку более лаконичной, и в следующих статьях мы объясним это подробно.
Ваше внимание — самое большое поощрение на моем писательском пути!