Эта статья была впервые опубликована в личном публичном аккаунте 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
введение в использование.
👨💻 Код для этой главы
связанное предложение
Джин (1): Привет
Джин (2): маршрутизатор маршрутизации
Джин (три): шаблон TMPL
Джин (D): отправка формы привязки модели контрольной суммы
Джин (5): подключиться к MySQL
Джин (шесть): загрузка файла
Джин (семь): использование и определение промежуточного программного обеспечения
Джин (8): использование файлов cookie
Джин (9): Создать спокойный интерфейс
Джин (х): интегрированное чвалья