برنامه نویسی

یک راهنمای عملی برای ORM در goframe: از اصول گرفته تا روابط پیشرفته

مقدمه

سلام dev.to جامعه! 👋

اگر در حال کار با Go هستید و به دنبال یک چارچوب وب قدرتمند و در عین حال سبک وزن هستید ، Goframe ممکن است فقط همان چیزی باشد که شما نیاز دارید. یکی از ویژگی های برجسته آن این است gdb بسته ، که یک سیستم قوی ORM (نقشه برداری شیء) را فراهم می کند. در این راهنما ، من شما را از طریق هر آنچه را که باید بدانید برای استفاده مؤثر از ORM در پروژه های Goframe خود قدم می زنم.

آنچه را پوشش خواهیم داد

  • تنظیم اتصالات پایگاه داده
  • عملیات اصلی CRUD
  • کار با معاملات
  • رسیدگی به روابط (یک به یک ، یک به یک ، بسیاری از افراد)
  • بهترین روشها و نکات

پیش نیازهای

  • دانش اساسی برنامه نویسی GO
  • روی دستگاه خود نصب کنید
  • mysql یا پایگاه داده سازگار
  • درک اساسی مفاهیم ORM

شروع کار: پیکربندی پایگاه داده

اولین چیزها ابتدا ، بیایید اتصال پایگاه داده خود را تنظیم کنیم. Goframe با پیکربندی YAML این فوق العاده ساده را می سازد:

database:
  default:
    link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
    debug: true   # Great for development!
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

💡 برای نوک: debug: true تنظیم در طول توسعه فوق العاده است زیرا به شما نمایش داده های واقعی SQL را نشان می دهد. به یاد داشته باشید که این را در تولید غیرفعال کنید!

تعریف اولین مدل خود

بیایید با یک مدل کاربر ساده شروع کنیم. در Goframe ، مدل ها فقط ساختارهای Go با برچسب های ویژه هستند:

type User struct {
    Id       int    `orm:"id"`       // Primary key
    Name     string `orm:"name"`     // User's name
    Password string `orm:"password"` // Hashed password
    Status   int    `orm:"status"`   // User status
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

عملیات CRUD آسان شد

ایجاد سوابق

user := &User{
    Name:     "john_doe",
    Password: "hashed_password", // Remember to hash passwords!
}
db := g.DB()
result, err := db.Model("user").Ctx(ctx).Insert(user)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

داده های خواندن

پرس و جو ساده:

user := &User{}
err := db.Model("user").Ctx(ctx).Where("id=?", 1).Scan(user)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پرس و جو پیچیده تر با شرایط:

users := make([]*User,0)
err := db.Model("user")
    .Ctx(ctx)
    .Where("name like ?", "john%")
    .Order("id asc")
    .Scan(&users)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

به روزرسانی سوابق

result, err := db.Model("user")
    .Ctx(ctx)
    .Where("id=?", 1)
    .Update(&User{
        Name: "john_updated",
    })
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

حذف سوابق

result, err := db.Model("user")
    .Ctx(ctx)
    .Where("id=?", 1)
    .Delete()
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

کار با معاملات

معاملات برای حفظ یکپارچگی داده بسیار مهم هستند. در اینجا نحوه استفاده از آنها در goframe آورده شده است:

db := g.DB().Begin() // Start transaction
result, err := db.Model("user").Ctx(ctx).Insert(&User{
    Name: "transaction_test",
})

if err != nil {
    db.Rollback()   // Something went wrong? Roll it back!
    return err
} 

db.Commit()         // All good? Commit the changes!
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ویژگی پیشرفته: روابط

روابط یک به یک

ایده آل برای پروفایل های کاربر یا اطلاعات دقیق:

type User struct {
    g.Meta `orm:"table:user"`
    Id     int    `orm:"id"`
    Name   string `orm:"name"`

    // One-to-one relationship
    Detail *UserDetail `orm:"with:id=user_id"`
}

type UserDetail struct {
    g.Meta  `orm:"table:user_detail"`
    Id      int    `orm:"id"`
    UserId  int    `orm:"user_id"`
    Email   string `orm:"email"`
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

روابط یک به بسیاری

عالی برای رسیدگی به نظرات یا پست های کاربر:

type User struct {
    g.Meta `orm:"table:user"`
    Id     int    `orm:"id"`
    Name   string `orm:"name"`

    // One-to-many relationship
    Comments []*Comment `orm:"with:id=user_id"`
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

روابط بسیار زیاد به

ایده آل برای سناریوهایی مانند سیستم های ثبت نام دوره:

type Student struct {
    g.Meta `orm:"table:student"`
    Id     int    `orm:"id"`
    Name   string `orm:"name"`

    // Many-to-many relationship
    Courses []*Course `orm:"with:id=id"`
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بهترین روشها و نکات

  1. همیشه از متن استفاده کنید: برای کنترل بهتر و لغو ، زمینه را در عملیات پایگاه داده خود قرار دهید.
  2. خطاها را به درستی انجام دهید: بازده خطا را از عملیات پایگاه داده نادیده نگیرید.
  3. از معاملات استفاده کنید برای عملیاتی که چندین جدول را تغییر می دهد.
  4. زمینه های خود را فهرست کنید به طور مناسب بر اساس الگوهای پرس و جو شما.
  5. مدل های خود را تمیز نگه دارید: از قرار دادن منطق کسب و کار در ساختارهای مدل خود خودداری کنید.

Gotchas مشترک برای تماشای ⚠

  • به یاد داشته باشید که اتصالات پایگاه داده را به درستی ببندید
  • با مجموعه های نتیجه بزرگ مراقب باشید – از صفحه بندی استفاده کنید
  • مراقب مشکلات پرس و جو n+1 باشید
  • فراموش نکنید که مقادیر تهی را به طور مناسب اداره کنید

پایان

سیستم ORM Goframe روشی قدرتمند و در عین حال بصری برای کار با پایگاه داده ها در GO فراهم می کند. این تعادل زیادی بین عملکرد و سادگی ایجاد می کند و آن را برای هر دو پروژه کوچک و بزرگ به یک انتخاب محکم تبدیل می کند.

چه چیزی بعدی؟

  • قابلیت های ذخیره سازی Goframe را کاوش کنید
  • به تکنیک های بهینه سازی پرس و جو نگاه کنید
  • در مورد ابزارهای مهاجرت Goframe بیاموزید

منابع


اگر سوالی دارید یا می خواهید محتوای Goframe بیشتری را ببینید ، در نظرات به من اطلاع دهید! 🚀

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا