Джин (11): интегрированная структура формы

Go
Джин (11): интегрированная структура формы

Эта статья была впервые опубликована в личном публичном аккаунте WeChat.Охотник за кодомДобро пожаловать, чтобы следовать

С непрерывным расширением проекта однажды в проекте будет бесчисленное количество таблиц и полей.Если вы все еще используете язык SQL для выполнения добавления, удаления, изменения и запроса в это время, это определенно принесет много утомительной работы. Например, мы хотим, чтобы добавить структуру с более чем десятью полями, вам нужно заново написать каждое свойство в структуре. Это значительно снижает скорость разработки и вносит некоторые ошибки, поэтому нам нужно ввести некоторые фреймворки для управления базой данных, чтобы мы могли завершить проект. Здесь мы представляемgorm

🥨горм

gormдаGoизвестный на языкеormОдна рамка, в Github насчитывается 14,6 к звездам.gormОбщие функции в основном реализованы. существуетginдобавлено вgormочень просто.

Сначала откройте нашinitDBпапка. повернуть оригиналsql.Openизменить наgorm.Openимпортировать одновременноgorm, в то же времяDbизменить тип определения ,*gorm.DB. Конкретный код выглядит следующим образом:

package initDB

import (
	_ "github.com/go-sql-driver/mysql"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
	"log"
)

var Db *gorm.DB

func init() {
	var err error
	Db, err = gorm.Open("mysql", "root:1234@tcp(127.0.0.1:3306)/ginhello")
	if err != nil {
		log.Panicln("err:", err.Error())
	}
}

На этом наше знакомство с фреймворком завершено.

потому что мы будемDbСвойства изменены, в это времяarticle.goПроизошла ошибка в .

Поэтому мы модифицируем, используяgormизapiпродолжать.

🍗 Реализовать CRUD

Увеличивать

добавить метод, использовавшийся ранееSQLязык для достижения добавления, следующим образом:

result, e := initDB.Db.Exec("insert into ` article` (type, content) values (?, ?);", article.Type, article.Content)

Теперь нам нужно реализовать этот процесс через фреймворк.

create := initDB.Db.Create(&article)

Это просто?

запросить один

пройти черезarticle.IdВходящие ограничения, этот метод используется только для первичного ключа.intтип.

initDB.Db.First(&article, article.Id)
return article

запросить все

var articles []Article
initDB.Db.Find(&articles)
return articles

Удалить

initDB.Db.Delete(article)

Из приведенных выше методов видно, что предыдущий код добавления, удаления, модификации и проверки был значительно сокращен, а количество ошибок значительно сократилось.

На этом этапе мы можем запустить наш код с помощью.httpВсе в порядке, можно пройти модульный тест, но при запуске он сообщит об ошибке. Ошибка заключается в следующем:

Error 1146: Table 'ginhello.articles' doesn't exist 

сказать вginhelloбиблиотека неarticlesповерхность. В этом предложении нет ничего плохого, мы действительно неarticlesстол, что мы строимarticleповерхность.

оригинальныйgormПо умолчанию будет добавлена ​​соответствующая структураs, так что теперь у нас есть два метода, первый — изменить индикацию, но индикацию часто нелегко изменить. Второй — модифицировать код так, чтобы искомая таблица былаarticleвместоarticles.

func (article Article) TableName() string {
	return "article"
}

Реализуйте этот интерфейс, который возвращает строку, которая определяет таблицу, с которой нам нужно ассоциировать.

В этот момент снова запустите наш код и обнаружите, что функция может быть полностью использована, и ошибки не сообщаются.

🚥 Автоматически создавать таблицу

Присоединение теперь является новым проектом, а таблица базы данных еще не создана, или проект был перенесен в другую среду, и в среде нет таблицы базы данных, что мне делать?

gormПредоставляет нам функцию создания таблиц базы данных.

Мы создаем новыйmodelназываетсяcomment, чтобы управлять комментариями.

package model

type Comment struct {
	ID      int
	content string
}

здесьIDбыть все в верхнем регистре.

После того, как структура установлена, для структуры может быть создана соответствующая таблица базы данных.

Для построения таблицы мы сначала проверяем, существует ли таблица.Если она существует, нам не нужно создавать ее заново.Мы не можем перезаписывать предыдущие данные каждый раз при запуске проекта.

func init() {
	table := initDB.Db.HasTable(Comment{})
	if !table {
		initDB.Db.CreateTable(Comment{})
	}
}

Запуск нашего проекта обнаружит, что в базе данных создана новая таблица, если мы хотим одновременно создать новую таблицу.idЧтобы построить индекс, мы можем проиндексировать структуруtagотмечено выше. следующее

type Comment struct {
	ID      int `gorm:"index:idx_id"`
	Content string
}

Удалите только что созданную таблицу и перезапустите код. будет добавлено в таблицу базы данныхidx_idпоказатель.

⚓ использование модели горма

Когда мы создаем базу данных, каждая таблица будет создавать первичный ключID, если вы читалиСпецификация разработки Java для AlibabaЕсли это так, вам также следует знать некоторую другую необходимую информацию, такую ​​как время создания, время модификации и т. д.

В настоящее времяgorm modelЭто сработало, и он инкапсулировал свойства для нас.

Нам нужно изменить структуру на следующую

type Comment struct {
	gorm.Model
	Content string
}

Удалите предыдущую структуру таблицы, повторно запустите проект, и в это время будет сгенерирована новая структура таблицы.

✍Резюме

С помощью кратких ответов в этой главе вы можете в основномgormИнтегрируйте его в наш проект gin и работайте с базой данных, что значительно сократит объем нашего кода. Если есть время, то можно специально сделать вместе потомgormвведение в использование.

👨‍💻 Код для этой главы

Github

связанное предложение

Джин (1): Привет
Джин (2): маршрутизатор маршрутизации
Джин (три): шаблон TMPL
Джин (D): отправка формы привязки модели контрольной суммы
Джин (5): подключиться к MySQL
Джин (шесть): загрузка файла
Джин (семь): использование и определение промежуточного программного обеспечения
Джин (8): использование файлов cookie
Джин (9): Создать спокойный интерфейс
Джин (х): интегрированное чвалья