نمایش نتایج 1 تا 5 از 5

نام تاپیک: آموزش استفاده از TMS Aurelius ORM در دلفی

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1
    کاربر دائمی آواتار hp1361
    تاریخ عضویت
    دی 1384
    محل زندگی
    تهران
    پست
    750

    آموزش استفاده از TMS Aurelius ORM در دلفی

    به نام خدا

    آموزش استفاده از TMS Aurelius در دلفی

    درباره ORM

    یکی از حوزه های دارای اهمیت بین برنامه نویسان، حوزه برنامه های مرتبط با بانک اطلاعاتی می باشد. به واسطه امکانات و ابزارهایی که محیط RAD Studio Delphi ارائه نموده، دلفی کارها در این حوزه بیشتر و موفق تر ظاهر شده اند.
    بی شک اقداماتی چون ارتباط با پایگاه داده، واکشی داده ها، ارسال پارامتر ها، نوشتن کوئری ها ووو و از همه مهمتر بهینه سازی و تست صحت عملکرد آن همیشه جزو دغدغه های برنامه نویسان این حوزه بوده و هست.
    یکی از ابزارهایی که به نوعی قسمت اعظمی از دغدغه های مورد اشاره را پوشش داده و از مشکلات برنامه نویس میکاهد، ابزار ORM (Object-relational mapping) می باشد.(برای روانی نوشته ها از کلمه "ابزار" استفاده شده است).

    یک تعریف ساده

    وقتی در زبان های برنامه نویسی میخواهید به پایگاه داده وصل شوید و از آن استفاده کنید، باید کدهای SQL را بدانید تا بتوانید با داده ها کار کنید برای مثال برای انتخاب داده ها باید بنویسید:

    SELECT * FROM users

    که لیست همه کاربران را بگیرید. کارهایی از این دست در دراز مدت خیلی زیاد هستند و اگر شما بخواهید پایگاه داده خودتان را عوض کنید، می بایست خیلی از این کد ها را عوض کرده و متناسب با پایگاه داده جدید بنویسید. حالا ORM ها یک لایه ای برای شما بوجود می اورد که نیازی نباشد کدهای SQL رو خودتان بنویسید. مثلا شما مینویسید:

    User.all();

    و این خط خودش کد SQL تولید میکند و از جدول کاربران مشخصات تمام کاربران را لیست می کند. حالا اگر بخواهید پایگاه داده تان را هم عوض کنید ORM کدهای مربوط به پایگاه داده جدید را تولید میکند و نیازی نیست خودتان این کار را انجام دهید.


    شروع سریع

    بدون هیچ مقدمه ای سر اصل مطب می رویم : نحوه استفاده از TMS Aurelius ORM در برنامه:

    1- ساخت کلاس مدل

    به بیان ساده، آنچه که قرار است بین برنامه و دیتابیس توسط Aurelius ارسال و دریافت شـــــود می بایست در قالبی قرار گیرند که برای Aurelius قابل فهم باشد. این قالب برای برنامه نویس نیز بسیار قابل درک و آشناست. این قالب چیزی نیست جز "کلاس"! بله کلاس.
    یک کلاس (که می تواند بصورت مشتق شده از دیگر کلاس ها نیز باشد) همانند یک رکورد از بانک اطلاعاتی خواهد بود که هر یک از پراپرتی ها نقش فیلد ها(یا همان ستون) بانک را خواهند داشت.
    پس کلاس(یا بهتر است بگوییم جداول) خود را بسازید :


    type
    TPerson = class
    private
    FLastName: string;
    FFirstName: string;
    FEmail: string;
    public
    property LastName: string read FLastName write FLastName;
    property FirstName: string read FFirstName write FFirstName;
    property Email: string read FEmail write FEmail;
    end;


    2- نگاشت کلاس

    بعد از تعریف کلاس مدل، برای اینکه Aurelius بداند چگونه بین کلاس و پروپرتی های آن با جداول و فیلد ها ارتباط برقرار کند، نیاز هست تا نگاشت های مورد نیاز انجام پذیرد. لذا ابتدا دو Attribute( [Entity] و [Automapping]) و سپس فیلد Fid از نوع Integer را به کلاس اضافه می نمائیم.


    uses
    {...}, Aurelius.Mapping.Attributes;

    type
    [Entity]
    [Automapping]
    TPerson = class
    private
    FId: integer;
    FLastName: string;
    FFirstName: string;
    FEmail: string;
    public
    property Id: integer read FId;
    property LastName: string read FLastName write FLastName;
    property FirstName: string read FFirstName write FFirstName;
    property Email: string read FEmail write FEmail;
    end;


    - با افزودن ویژگی [Entity] به هر کلاس، Aurelius آن کلاس را شناسایی کرده و جدولی بنام همان کلاس(البته بدون حرف T) در دیتابیس خواهد ساخت. (امکان تعیین نام دلخواه برای جدول وجود دارد که در آموزش های بعدی ارائه خواهد شد).
    - با افزودن ویژگی [Automapping] به هر کلاس، Aurelius تمام نگاشت های مورد نیاز را انجام خواهد داد. به این معنی که با توجه به پروپرتی ها مواردی چون نام فیلد، نوع فیلد، کلیدهای خارجی، ایندکس ها و ... را ایجاد خواهد کرد.)


    3- تعریف اینترفیس IDBConnection

    همانطور که گفته شد، یکی از ویژگی های اصلی و بارز ORM ها، تسهیل در تولید کدهای SQL جهت دیتابیس های مختلف و ساده سازی فرآیند مربوطه است. شما با استفاده از هر یک از کامپوننت های مورد نظر خود نظیر (FireDAC, UniDAC, ADO, dbExpress, …) میتوانید به دیتابیس متصل شده و باقی کارها را به عهده Aurelis بسپارید. نقطه شروع ایجاد IDBConnection است. برای این منظور با استفاده از Adaptor هایی که توسط Aurelius فراهم شده، کامپوننت اتصال را بعنوان ورودی به آن پاس داده و خروجی تابع نتیجه مورد نظر ما خواهد بود.


    uses
    {...}, Aurelius.Drivers.Interfaces, Aurelius.Drivers.dbExpress;

    var
    MyConnection: IDBConnection
    begin
    // SQLConnection1 is a dbExpress TSQLConnection component
    // You can use several different data-access component libraries
    MyConnection := TDBExpressConnectionAdapter.Create(SQLConnection1, false);


    4- تعیین the SQL dialect

    با اضافه کردن یونت های Aurelius.SQL.XXX (که در اینجا XXX نشان دهنده نام SQL Dialect خواهد بود) به Aurelius خواهیم گفت که چه SQL dialect هایی در برنامه استفاده خواهد شد. برای نمونه در مثال زیر به Aurelius خواهیم گفت که Dialect های MySQL و MSSQL Server در برنامه مورد استفاده خواهند بود. Aurelius با توجه به کانکشن تعریف شده در مرحله قبل، Dialect درست را انتخاب خواهد نمود.


    uses
    {...}, Aurelius.SQL.MySQL, Aurelius.SQL.MSSQL;


    5- ساختن دیتابیس

    با استفاده از DatabaseManager میتوان جداول و فیلدهای یک دیتابیس را ساخت. تنها کافیست دستور BuildDatabase را فراخوانی کنید!( درحال حاضر امکان ایجاد خودکار فایل دیتابیس توسط اورلیوس وجود نداشته و فایل مربوطه میبایست بصورت دتسی توسط کاربر ایجاد گردد!)


    uses
    {...}, Aurelius.Engine.DatabaseManager;

    DBManager := TDatabaseManager.Create(MyConnection);
    DBManager.BuildDatabase;


    نکته : در صورتیکه جداول و فیلدهای آن درحال حاضر در دیتابیس وجود دارد، نیازی به انجام این مرحله نیست.


    6- نمونه سازی از کلاس ها و ذخیره در دیتابیس

    جهت ذخیره کلاس ها در دیتابیس، از ObjectManager استفاده خواهیم نمود. با نمونه سازی از یک کلاس و پاس دادن آن به ObjectManager، اطلاعات کلاس بصورت یک رکورد در دیتابیس ذخیره می گردد.


    uses
    {...}, Aurelius.Engine.ObjectManager;

    Person := TPerson.Create;
    Person.LastName := 'Lennon';
    Person.FirstName := 'John';
    Person.Email := 'lennon@beatles.com';
    Manager := TObjectManager.Create(MyConnection);
    try
    Manager.Save(Person);
    PersonId := Person.Id;
    finally
    Manager.Free;
    end;


    7- دریافت و یا بروزرسانی رکورد های جدول

    فرآیند کار کاملا ساده و مشخص است. اطلاعات از دیتابیس توسط ObjectManager دریافت شده و در قالب کلاس در اختیار ما قرار میگیرد. پس از اعمال تغییرات مدنظر، مجدداً کلاس را به ObjectManager پاس داده تا مقادیر جدید در دیتابیس ذخیره گردد.


    Manager := TObjectManager.Create(MyConnection);
    Person := Manager.Find<TPerson>(PersonId);
    Person.Email := 'john.lennon@beatles.org';
    Manager.Flush;
    Manager.Free;



    8- جستجو در دیتابیس

    اگر بخواهیم لیست تمام افرادی که ایمیل با دامنه "beatles.org" دارند را داشته باشیم، بصورت زیر عمل خواهیم کرد:


    uses
    {...}, Aurelius.Criteria.Base, Aurelius.Criteria.Linq;

    Manager := TObjectManager.Create(MyConnection);
    Results := Manager.Find<TPerson>
    .Where(
    TLinq.Like('Email', '%beatles.org%')
    or TLinq.Like('Email', '%beatles.com%')
    )
    .List;

    // Iterate through Results here, which is a TList<TPerson> list.
    for person in Results do
    // use person variable here, it's a TPerson object

    Manager.Free;



    در ادامه یک برنامه ساده ذخیره و بازیابی اطلاعات دفترچه تلفن را قدم به قدم اجرا خواهیم کرد.
    آخرین ویرایش به وسیله hp1361 : چهارشنبه 26 آبان 1395 در 14:50 عصر

تاپیک های مشابه

  1. استفاده از بانک اطلاعات وب در دلفی
    نوشته شده توسط ghasemjen در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 27
    آخرین پست: پنج شنبه 15 اسفند 1387, 00:13 صبح
  2. استفاده از آدرس بار IE در دلفی
    نوشته شده توسط vahid64 در بخش برنامه نویسی در Delphi
    پاسخ: 1
    آخرین پست: پنج شنبه 21 تیر 1386, 23:05 عصر
  3. چگونگی استفاده از یک فایل matlab در دلفی
    نوشته شده توسط jandaghian در بخش کامپوننت های سایر شرکت ها، و توسعه کامپوننت
    پاسخ: 5
    آخرین پست: دوشنبه 13 فروردین 1386, 19:17 عصر
  4. چند سوال درباره استفاده از بهترین بانک اطلاعاتی در دلفی
    نوشته شده توسط MOHSEN731 در بخش برنامه نویسی در Delphi
    پاسخ: 1
    آخرین پست: جمعه 26 فروردین 1384, 02:40 صبح
  5. استفاده از فایل های sql در دلفی
    نوشته شده توسط پریسا نامدار در بخش برنامه نویسی در Delphi
    پاسخ: 3
    آخرین پست: جمعه 05 فروردین 1384, 00:24 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •