ساخت برنامه های مدرن وب با اسپرینگبوت و وادین
E N D
Presentation Transcript
نردم یاه و توب همانرب تخاس گنیرپسا اب بو نیداو یاه همانرب هعسوت تهج ی لمع ی ا همدقم اواج زا هدافتسا اب بو تحت یدباع یدهم :مجرتم abedi_mahdi@ymail.com
اه بلاطم تسرهف همانرب تخاس : همدقم 5 ........................... ................................ ن ی داو و توب گن ی رپسا اب بو نردم ی 5 ............................. ................................ ................................ ؟د ی ر ی گب دا ی ی چ تسا رارق اجن ی ا رد 6 ............... ................................ ................................ ................................ اه کروم ی رف و اهرازبا 7 ........... ؟م ی نک ی م هدافتسا Vaadin زا Freemarker ی ا JSP ، Thymeleaf ، Spring MVC ی اجب ارچ 7 .............. ................................ ؟م ی نک ی م هدافتسا Vaadin زا Angular ی ا React ، REST ی اجب ارچ 8 ......................... ................................ ................................ ................................ اهدک سروس 8 .............. ................................ ................................ ................................ یی وئد و ی ی اه شزومآ 9 .... ................................ ................................ ................................ اواج هعسوت ط ی حم ی زاس هدامآ 01 ....................... ................................ ................................ ؟منک بصن ی د اب ار اواج زا هخسن مادک 01 . ................................ ................................ ................................ زودن و ی ی ور رب تام ی ظنت ماجنا 06 ............................. ................................ ................................ شاتن ی کم ی ور رب تام ی ظنت ماجنا 08 ............................... ................................ ................................ سکون ل ی ی ور رب تام ی ظنت ماجنا 10 ........................ ................................ IntelliJ IDEA رد Maven ی اه هژورپ گاب ی د و ارجا ،ندرک دراو 10 ............... ................................ ................................ IntelliJ IDEA رد Maven هژورپ ندرک زاب 12 ... ................................ ................................ ................................ Spring Boot هژورپ ی ارجا 16 .............................. ................................ ................................ IntelliJ IDEA رد ندرک گاب د ی 18 .......................... ................................ ................................ رگرورم راکدوخ ی رازگراب ی زاس لاعف 21 ..... ................................ ................................ ................................ auto import ندرک لاعف 22 .................... ................................ اه layout و اه تننوپماک زا هافتسا اب UI تخاس : ن ی داو ی ه اپ لوصا 22 .............. ................................ ................................ ................................ ن ی داو هاتوک ی فرعم 26 ................. ................................ ................................ ................................ هژورپ ندرک هدامآ 20 .......................... اه س ی ورس و اه JPA repository ، هداد هاگ ی اپ : Spring Boot backend ک ی داج ا ی 20 ............................... ................................ ................................ هداد هاگ ی اپ ی اه ی گتسباو بصن 22 .... ................................ ................................ ................................ تاع لاطا لدم ندرک ف ی رعت 51 ..... ................................ ................................ هداد هاگ ی اپ هب ی سرتسد ی ارب اه repository داج ا ی 50 ......................... ................................ ................................ همانرب قطنم ی ارب اه س ی ورس داج ا ی 52 ..... ................................ ................................ ................................ ی تست ی اهات ی د اب ندرک رپ
55 ................ ................................ ................................ ی د دج ی اه ی گتسباو ی ارب رورس هرابود ارجا 56 .. ................................ ................................ Vaadin Grid رد اه نوتس ی دنبرک ی پ و تاعلاطا ندوزفا 56 ......... ................................ ................................ ................................ Grid ی دنبرک ی پ و داج ا ی 58 ...................... ................................ ................................ Grid هب backend زا تاعلاطا لاسرا 61 ......................... ................................ ................................ ی د رگ هب ی شرافس نوتس ک ی ندوزفا 61 ........... ................................ ................................ ................................ اه نوتس ضرع ن یی عت 65 ......................... ................................ ................................ Vaadin Grid رد اه ف ی در ندرک رتل ف ی 65 ......................... ................................ ................................ ندرک رتل ف ی ی ارب text field ندوزفا 66 .............................. ................................ ................................ back-end رد رتل ف ی ی زاس هدا پ ی 71 ........................... ................................ ................................ ن ی داو رد ی د دج ی اه تننوپماک داج ا ی 71 ........ ................................ ................................ ................................ مرف تننوپماک ک ی داج ا ی 71 ... ................................ ................................ ................................ main view هب مرف ندوزفا 72 ........ ................................ ................................ ................................ layout ندرک ارگشنکاو 75 ............. ................................ ................................ main view رد CSS ی اه ل ی اتسا ندرک دراو 77 ................... ................................ ................................ ن ی داو رد اه مرف ی جنسرابتعا و ندرک Bind 77 ............ ................................ ................................ اه input field هب object تاصخشم Bind 77 ..................... ................................ ................................ ................................ binder داج ا ی 78 ......... ................................ ................................ ................................ اه تننوپماک ی زاس ادج 79 ...... ................................ ................................ ................................ مرف تننوپماک API داج ا ی 79 .................... ................................ ................................ contact status و company م ی ظنت 80 ............. ................................ ................................ ................................ contact ی ناسرزورب 81 ................... ................................ ................................ ................................ اهداد ی ور م ی ظنت 82 .............................. ................................ ................................ مرف نتسب و فذح ، ی زاس هر ی خذ 86 .................. ................................ ................................ ن ی داو اه تننوپماک ن ب ی داد ی ور و ات ی د لاقتنا 86 ...................... ................................ ................................ مرف رد هدش باختنا contact ش ی امن 91 ........ ................................ ................................ ................................ ی د دج contact ندوزفا 92 .... ................................ ................................ ................................ ن ی داو رد اه view ن ی ب تکرح 92 ................. ................................ ................................ ................................ اه route ف ی رعت
92 ............................... ................................ ................................ دنزرف view و ردپ تس ل ی داج ا ی 99 ..... ................................ ................................ ................................ dashboard view داج ا ی 016 ........................ ................................ Spring Security کمک اب همانرب هب login screen ندوزفا 016 ............. ................................ ................................ ................................ login view داج ا ی 018 ..... ................................ ................................ اهدورو لرتنک ارب Spring Security ی زاس هدامآ 007 ......... ................................ ................................ ................................ logout کن ی ل ندوزفا 011 .............. ................................ ................................ بصن لباق PWA ک ی هب ن ی داو همانرب ل ی دبت 011 ................. ................................ ................................ ................................ ؟ت س ی چ PWA 011 ............. ................................ ................................ ................................ PWA عبانم داج ا ی 011 ............................. ................................ ................................ ن ی لافآ تاحفص ی زاس ی شرافس 015 ......... ................................ ................................ ................................ ن ی لافآ تاحفص تست 017 ............................ ................................ ی گ هچراپک ی و دحاو تست اب توب گن ی رپسا ی اه همانرب تست 017 .. ................................ ................................ هداس UI قطنم ی ارب دحاو ی اه تست ی ارجا و داج ا ی 021 ................... ................................ رت هتفرش پ ی UI قطنم ی ارب ی گ هچراپک ی ی اه تست ی ارجا و داج ا ی 027 ........................ ................................ end-to-end ی اه تست اب رگرورم رد ن د ی او ی اه همانرب تست 027 ...................... ................................ ................................ رورس ی ارجا ی ارب Maven ی دنبرک پ ی 020 ..... ................................ ................................ رگرورم لرتنک ی ارب نآ webdriver و مورک م ی ظنت 020 ....... ................................ ................................ ................................ تست ی ه اپ سلاک داج ا ی 025 ............ ................................ ................................ ................................ login view تست 026 .......... ................................ ................................ ................................ view object داج ا ی 051 ............... ................................ AWS Elastic Beanstalk ی ور رب توب گن ی رپسا همانرب ک ی رارقتسا 051 .................... ................................ ................................ production ی ارب همانرب ی زاس هدامآ 051 ...... ................................ ................................ ................................ AWS باسح ک ی داج ا ی 052 ....... ................................ ................................ Elastic Beanstalk ی ور رب اواج همانرب م ی ظنت 056 ..................... ................................ ................................ Elastic Beanstalk همانرب رارقتسا 061 ................... ................................ ................................ ................................ ی دعب ی اه ماگ
ن ی داو و توب گن ی رپسا اب بو نردم ی اه همانرب تخاس : همدقم نیداو و توب ش گنیرپسا زا هدافتسا اب بو تحت یاه عورش هعسوت طیحم یزاس هدامآ زا دنیارف نیا .دنک همانرب هعسوت یارب یلمع یا یم یفرعم ار یم رارق ششوپ تحت مدق هب مدق ار لحارم همه و همدقم امنهار نیا هعسوت دنیارف هد اهنآ اب و ،تسا .دهد تهج .دنزاسب بو تحت یاه ینعی ،مینک همانرب ، اواج کمک اب دنهاوخ یم عورش لوا زا ار زیچ ه یم هک تسا یناسک بسانم ندوب رمث رمثم زا نانیمطا شزومآ نیا یزاس هدامآ زا مه ، اه شزومآ نیا .هعسوت طیحم اواج هعسوت طیحم یزاس هدامآ دیناوت یم ،ندز دک رس دیورب میقتسم دیراد تسود رگا مراهچ لصف هتکن . دیورب هب میقتسم و دینک در ار ؟دیریگب دای یچ روطچ هک دیریگ یدنمزاین یور رب اجنیا رد .دیزاسب .مینک درک میهاوخ تسا یم دای رارق اجنیا رد امنهار نیا full-stack ریگرد ار نامدوخ ه و یدربراک تیاس بو کی ،نردم اواج کمک اب الصا و میراد زکرمت رتشیب هعلاطم یارب هک ییاه رد ، هعسوت یعقاو یایند یاه یروئت لئاسم ، دنتس کنیل زا یارب عقاو رد یمن یروئت لئاسم . هدافتسا customer relationship management (CRM) ریز تروص هب همانرب نیا یاه کی ،میهد اه یم هعسوت اجنیا رد هک یا طابترا تیریدم تهج یمتسیس هک تسا همانرب یگژیو .تسا (contact) :تسا یسرتسد ندرک دودحم یارب نیگول هحفص رمه هب هک راک لیابوم مه و پاتکسد یارب مه هک ، side navigation ها ارگشنکاو ینامدیچ دنک یم تاعلطا هریخذ یارب سیباتید یم هک یشیامن تسیل کی نآ کمک اب هک یمرف هک یتاعلطا زا هدافتسا دروبشاد کی شیامن ( دولک تحت هعسوت یابوم یور رب همانرب بصن هوحن ی درک رتلیف ار نآ ای و دوشب بترم دناوت یم هفاضا ای و شیاریو ار اه یم مهارف مینک contact قیرط زا د وش REST API ) cloud پاتکسد و ل
.دینیبب اجنیا زا ار همانرب نیا هدش لماک دیناوت یم اه کروم کرومیرف ی رف و اهرازبا باختنا لیلد و ، .دنتسه زا هدافتسا بسانم )لوصحم ییاهن دیلوت( یراجت دصاقم یارب مه و یشزومآ دصاقم یارب مه هکنیا یگ داس لوا ، میدرک هدافتسا اهن آ زا امنهار نیا رد هک ییاهرازبا و اه مود اهنآ زا یرایسب یتحا یاهدک یور میناوت ریز تروص هب درک میهاوخ هدافتسا اهنآ زا هک گنیرپسا یلصا یاه ر نیمه هب .مینک یم و مینک یم هدافتسا یم فرطرب ار گنیرپسا تحت همانرب یارجا و هیلوا تامیظنت تلکشم یگژیو .میشاب هتشاد Spring Boot زا ، همانرب back end شخب یارب نام ی رتشیب زکرمت :تسا رگیدکی زا اه تننوپماک ندرک ادج یارب ) Dependency injection Spring Data JPA یسرتسد لرتنک تهج embedded ( یگتسباو قیرزت یروتیزاپیر Spring Security Tomcat اهاتید اب ندرک راک یارب یاه اه همانرب یارجا یارب ) ( راک وت رورس
رتتحار هعسوت نتشاد یارب Spring Boot Developer Tools اهنآ میور یم شیپ هک روط نیمه ،دیشابن نارگن لصا ،دیتسین انشآ ،دش هتفگ هک یدراوم همه اب رگا .داد میهاوخ حیضوت ار یارب ییاواج سروس نپا کرو میرف کی هک درک میهاوخ هدافتسا :تسا ریز یاه یگژیو یاراد هک تسا Vaadin زا ، front end تحت یاه تمس رد همانرب بو و رهاظ دیناوت یم و دراد اواج API کی تننوپماک ره . UI یاه تنوپماک زا یگرزب هناخباتک .دیهد رییغت ار نآ یاهراتفر نیب تکرح یارب data-binding .فلتخم یا مرف یارب دنمتردق ه view Router .اه تسیل و اه متسیس کی هدافتسا Vaadin زا Freemarker ای JSP ، Thymeleaf ، Spring MVC یاجب ارچ ؟مینک یم ، Spring MVC نیزگیاج ناوت یم ار نیداو ،توب گنیرپسا اب بو تحت یاه Freemarker همانرب تخاس ماگنه Thymeleaf .دومن ای JSP ، :تسناد ریز دراوم ناوت یم ار نیداو یلصا یاه تیزم و Spring MVC .تسا هدش یحارط .دنراد تباث یاوتحم رتشیب هک تسا یدراوم بسانم رتشیب اه دنتسه ییاواج single-page apps تخاس یارب نیداو template یاه .دیزاسب اواج یاراد نیداو طابترا نیداو ب تپیرکسااواج یاهدک نتشون ای SPA اب ار همان رب لک دیناوت یم نیداو کمک اب و API یاراد نیداو تننوپماک .دنراد مه ار ندش یشر ا سپ ،دنک فس تیلباق هک تسا یم لرتنک راکدوخ تروص هب ار رگرورم و رورس نیب یاه .دیرادن اوتحم یناسر ا ییاه تننوپماک زا هناخباتک ه ب یزاین ل ص زورب یا ر ؟مینک frontend همانرب دیناوت یم هدافتسا یاه یم نیداو کمک اب . Vaadin زا Angular React ناونع هب SPA ای REST Spring Boot تخاس یارب .رتمک یژرنا اب هتبلا ، ، یاجب ارچ بیکرت Angular دیزاسب ار React یهباشم یاه ای لثم کرو میرف اب REST backend یموسرم شور اه تسا
:نیداو زا هدافتسا یایازم .دیهد هعسوت هناگادج تروصب ار frontend و backend هک تسین زاین :رتعیرس هعسوت یم ار همانرب لک اک زا هناخباتک .دیسیونب اواج ینعی نما عون نابز کی اب دینا .دنراد مه ار ندش یشرافس تیلباق هک تسا یم لرتنک راکدوخ تروص هب ار رگرورم و رورس نیب یاه .دیرادن اوتحم یناسرزورب یارب تپیرکسااواج یاهدک نتشون یم ارجا رورس یور رب نیداو همانرب :رت وت ییاه تننوپم یاراد نیداو طابترا نیداو هب یزاین لصا سپ ،دنک ای همانرب یاهد ک ندش شاف ناکما و دوش نما رایسب endpoint .درادن دوجو رگرورم یارب اه اهدک سروس هخاش یاراد لصف ره .دنرادرارق نآ لخاد تارییغت زا دعب و لبق اهدک دولناد ناکما هرابود ار هژورپ دیناوت دوخ زا لبق لصف هجیتن .دینک عورش دیتساوخ هک یلصف ره زا ار اه یا یور رب امنهار نیا رد هدش هدافتسا یاهدک یمامت یارب ،نیا رب هولع .تسادج ) یم ،دیدش وربور یلکشم اب هژورپ یور راک نیح رد رگا سپ ، دینک عورش ار راک شزومآ دیناوت باه تیگ ، لصف ره branch دوجو لصف یم عورش ( دراد و ،تس ا هک ی یاهدک اب لصف ره . رگید رابکی یم نیاربانب ، هدرک دولناد دوش ییوئدیو یاه شزومآ .دینک هعجارم نیداو بویتوی لاناک هب ،لصف ره ییوئدیو شزومآ ندید یارب
اواج هعسوت طیحم یزاس هدامآ ن اتدوخ هعسوت طیحم و دینک بصن ار ییاهرازبا تسا مزلا ،دوخ ییاواج همانرب هعسوت عورش زا لبق .دییامن هدامآ ار هعسوت طیحم یزاس هدامآ دیناوت یم ،ندز دک هطقن رس دیورب میقتسم دیراد تسود رگا مراهچ لصف هتکن . دیورب هب و دینک در ار اواج :دیراد زاین دراوم نیا هب ،اواج رد بو تحت یاه همانرب هعسوت یارب یاراد و ،تسا اواج هعسوت طیحم یساسا زاین دروم نیا یرورض اواج یاه یم نآ اب هک تسا Java Development Kit (JDK) همانرب هعسوت یارب هک تسا ینوگانوگ یاهرازب Java Runtime Environment (JRE) : نیا نیرت ار اواج یاه یلصا . همانرب ناوت دنتسه ا ،اهرازبا .دومن ارجا ( ندرک دراو یارب رازبا نیا زا ،دراد زاین اهنآ هب هژورپ هک ) import : Build/project management tool (Maven) یگتسباو یمامت بصن و ) dependencies ( ییاه IDE رد هژورپ یم هدافتسا .دوش بو تحت همانرب یاهدک تیریدم یارب تیگ یلامتحا تاهابتشا یمامت ،تیگ رد حیحص یروتزاپیر کی نتشاد اب لثم .دوش ارجا نامز طیحم کی سا یج نات : Version control system (Git) یم هدافتسا .دینادرگزاب لبق تلاح هب ار دیوش Front-end build tool (Node.js) دون زا نیداو .)اواج یارب یم وربور اهنآ اب هک تپیرکسااواج ی همانرب زا هنیهب هخسن تخاس یارب سا ارب یج دون : JRE هیبش یزیچ(تسا یم هدافتسا .دنک نتشون یارب هک تسا یرازبا IDE : Integrated development environment (IDE) یم هدافتسا هعسوت نامز رد اهنآ یارجا و اهدک .مینک زا ام ،راک ندرک هداس یارب یلو ،دینک هدافتسا دیناوت IntelliJ Community Edition یم ،دیراد تسود هک زونه رگا .مینک لماک نآ زا هدافتسا هک ارچ دشاب دناوت IDE یم هدافتسا ره زا امنهار نیا یارب IntelliJ Idea یم یبوخ باختنا ،دیا هدرکن بصن ناگیار IDE . تسا
هدافتسا ریز نیلنآ IDE .دیورب زا هک دیهاوخ نیداو هیاپ لوصا یم ای ،د ی راد دوخ رتویپماک یور رب ار زاین دروم یاهرازبا رگا لصف لصف هب و دیریگب هدیدان ار همادا دیناوت یم ،دینک نیلنآ IDE یارجا ؟منک بصن دیاب ار اواج زا هخسن مادک دادعت زا زا نکمم ،دیدش داد رییغت ار شش ره ،رابکی لاس دنچ راشتنا یاجب .دروآرد یلوپ تروص هب یراجت یاه ای یلصا هخسن کی مه لاس هس ره یارب و ،دنک .دینک هدافتسا انشآ راشتنا نآ اب هک تسین یدایز نامز تدم و دیدرک عورش هزات ار اواج رگا .دیشاب هدش هدز JDK و شدوخ لدم لکاروا ،شیپ یتدم تفگش اواج هژورپ یارب ار لکاروا یمسر یاه هخسن long- لکاروا تلاوصحم زا دیهاوخ یم رشتنم دیدج تارییغت اب ار یا یم هئارا هخسن نیرخآ زا ،دینک هدافتسا ه خسن هام یم رگا هک تسا نیا ام هیصوت .دنک Java SE 11 term support (LTS) ینعی LTS رگید هک دنداد حیجرت ناگدنهد یاراد ندوب ناگیار رب هولع هک دراد دوجو یناوارف یاه زا هدافتسا ام هیصوت .دنتسه مه هعسوت زا یرایسب ،دمآرد یلوپ تروص هب Oracle JDK .دننک باختنا ار اه long-term-support هک ینامز زا نیزگیاج تقیقح رد JDK هخسن ای Amazon Corretto یاه OpenJDK .تسا زودنیو یور رب تامیظنت ماجنا :اواج بصن هب Windows installer .دینک لابند ار بصن لحارم 0 . Amazon Corretto 11 .دینک ارجا و دولناد ار ) .دیورب دولناد هحفص a . b . c . .msi (
: Maven هب بصن a . b . c . d . 1 . .دیورب Maven دولناد هحفص اف تمسق رد .دینک دولناد ار C:\Program Files Binary zip archive ریسم رد ار پیز لیاف تایوتحم اه لی .دینک جراخ هد Control Panel > Systems and Security > System > ر شف تلاح زا ریسم هب زودنیو رد .دیورب Advanced system settings Environment Variables .دینک باختنا ار e .
باختنا systems variable تمسق زا ار Path ، .دینک کیلک ار Browse ،دیورب Environment Variables Edit دیاب Maven رد هدرک f . سپس و گولاید رد بصن لحم هب 3.6.3\bin یور تیاهن .دینک باختنا ار ینعی edit g . h . C:\Program Files\apache-maven- افتسا دیدرک دولناد هک یا هخسن هرامش زا دیاب اجنیا رد( رد و )دینک هد .دینک کیلک OK
.دینک باختنا ار OK دنتسه زاب هک ییاه گولاید یمامت یارب i . : NodeJS بصن a . b . c . 2 . .دیورب ) Node.js ( .دینک لابن دولناد هحفص Windows installer د ار بصن لحارم هب .دینک ارجا و دولناد ار بسانم .msi
: Git هب بصن a . b . c . 2 . .دیورب تیگ ( رگا دولناد هحفص Windows installer .دینک لابند ار بصن لحارم .دینک هدافتسا .دینک ارجا و دولناد ار بسانم ) هنیزگ دروم رد .exe شیپ ریداقم زا ،دیدوب کش یاراد یا ضرف
: IntelliJ هب بصن a . b . c . 5 . .دیورب .exe IntelliJ Community Edition .دینک لابند ار بصن لحارم ( دولناد هحفص .دینک ارجا و دولناد ار )
یر ار دوخ رتویپماک بصن لحارم نایاپ یارب .دیهد ماجنا ار ناتدوخ تامیظنت و دینک ارجا ینامز .دینک تراتسا d . e . شیپ تامظنت زا هشیمه .دیراد اهنآ رییغت یارب یلیلد هک ار IntelliJ رگم ، دینک هدافتسا ضرف شاتنیکم یور رب تامیظنت ماجنا :اواج بصن هب Windows installer .دینک لابند ار بصن لحارم 0 . Amazon Corretto 11 .دینک ارجا و دولناد ار ) .دیورب دولناد هحفص a . b . c . .pkg (
: Homebrew Homebrew NodeJS بصن a . 1 . و Maven روتسد ، بصن و تسا ) Homebrew package manager .دنک ( هتسب تیریدم کی macOS :دیسیونب لانیمیرت رد ار ریز بصن یارب یم ت حار یلیخ یور رب ار : NodeJS و Maven بصن 2 . :دینک هدافتسا Homebrew رد NodeJS و Maven بصن یارب ریز روتسد زا brew install node maven : IntelliJ هب بصن a . b . 2 . .دیورب .pkg ( IntelliJ Community Edition دولناد هحفص .دینک دولناد ار )
.دینک یپک ردنیاف رد Applications هشوپ رد ار همانرب c . سکونیل یور رب تامیظنت ماجنا عیزوت و نیبد یارب تمسق نیا تاحیضوت یم و دشاب هیبش یلیخ زا هدافتسا سکونیل رد .دیهد رییغت .تسا دوجوم اه عیزوت یور رب بصن هوحن .تسا ناترظن دروم عیزوت اب بسانتم ار تاروتسد موزل تروص رد دیناوت رد هک ارچ ،تسا تحار رایسب ی اه RPM-based یاه دیاب رگید package OpenJDK repository : NodeJS بصن 0 . بصن ار صا یاه Node.js LTS عیزوت رثکا یارب . هخسن نیرخآ هک یمیدق یمک اه یم داهنشیپ ار بسانم یاه تسا مزلا package manager عیزوت رثکا رد دوجوم هخسن .دینک هتسب یارب ،یل تسا .دهد تشاددای Nodesource
Debian عیزوت و هیاپ رب یاه Ubuntu متسیس i . a . :دننک یم ه دافتسا sudo زا هک ییاه یارب curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - sudo apt-get install -y openjdk-11-jdk maven git nodejs :دینک یمن هدافتسا sudo زا رگا ای ، Debian یارب ii . curl -sL https://deb.nodesource.com/setup_12.x | bash - apt-get install -y openjdk-11-jdk maven git nodejs : RPM هیاپ رب یاه عیزوت b . curl -sL https://rpm.nodesource.com/setup_12.x | sudo -E bash - sudo yum install -y java-11-openjdk-devel.x86_64 maven git nodejs :اواج هخسن یسررب i . java روتسد دینک یم هدافتسا 00 اواج زا هک دیوش نئمطم هکنیا یارب .دینک ارجا ار اواج هب هخسن رییغت یارب -version هدافتسا ریز روتسد زا موزل تروص رد ، 00 :دینک sudo alternatives --config java نزاخم زا تپیرکسا راکدوخ بصن اب هکنیا ای ،دینک رد دوجوم تارو یم هدافتسا یرگید عیزوت زا رگا یم ،دیتسین تحار باه تیگ یروتیزاپیر تسد هعومجم زا دیناوت تشاددای .دینک هدافتسا NodeSource : IntelliJ بصن a . 1 . :دینک ارجا ار ریز روتسد snap زا هدافتسا اب IntelliJ بصن یارب
sudo snap install intellij-idea-community --classic :یتسد تروصب IntelliJ Community Edition :دینک جراخ هدشف تلاح زا ار لیاف IntelliJ دولناد هحفص ب هب صن یارب i . ii . iii b . .دیورب .tar.gz ( .دینک دولناد ار ) . sudo mkdir /opt/intellij sudo tar zxvf ideaIC*.tar.gz -C /opt/intellij --strip-components=1 ار پاتک سد یور رب تاکتروش داجیا هنیزگ ب صن هلحرم عورش رد( :)دراذگ IDE یارجا . iv یم نوترایتخا رد sh /opt/intellij/bin/idea.sh ی دعب ماگ رد . تسا ناترایتخا رد یم یسررب ار ، دیراد زاین اواج اب یسیوندک عورش یارب هک ییاهزیچ یمامت لااح هیاپ رب اواج هژورپ یارجا و ندرک .مینک Maven زاب ی هوحن ، شزومآ
IntelliJ IDEA رد Maven یاه هژورپ گابید و ارجا ،ندرک دراو . تسا هیلوا همانرب یارجا و هژورپ بصن ،یا هژورپ ره رد لوا مدق :تفرگ دیهاوخ دای ار ریز تاعوضوم ،تمسق نیا رد .دینک زاب IDE رد ار هیلوا هژورپ کی هنوگچ .دهد شیامن ار اهنآ ،همانرب رد اه یناسرزورب ماجنا ماگنه هب ات دینک میظنت ار ناترگرورم هنوگچ و دینک در ار تمسق نیا دیناوت یم ،دینک هدافتسا نیلنآ IDE .دیورب زا دیهد مرا یم حیجرت هک رگا هب میقتسم هتکن هچ لصف IntelliJ IDEA Maven بوبحم ناوت یگتسباو و همانرب راتخاس تیریدم رد هژورپ یم ار ندرک Maven زاب بقارم رازبا نیا عقاو رد .تسناد اواج یارب هژورپ تیریدم رازبا نیرت artifact .دزاس یم ارجا لباق یاه و ،تسا اه :دینک دولناد ار ،تسا . گنیرپسا هیاپرب هک نیداو هژورپ ،عورش یار هژورپ دولناد یارب دینک جراخ پیز تلاح زا هاوخلد یریسم رد ار هدش دولناد لیاف تسا هدش یدن توب ب 0 . .دینک هدافتسا برکیپ لبق زا هک کنیل نیا زا 1 . ه ب اادعب تسا نکمم نوچ ، دینکن جراخ پیز تلاح زا دولناد هشوپ رد ار یدولناد لیاف هتکن !دینک فذح ار نآ یهابتشا تروص .دینک باختنا ار Open هنیزگ File یونم ای همانرب لوا هحفص زا ، IntelliJ رد 2 .
د . ی نک باختنا ار pom.xml ل ی اف و هدرک اد ی پ ار د ی درک جراخ هد ر شف تلاح زا هک ی ا هشوپ 2 .
. دنک ی م دراو POM ل ی اف ساسا رب ار هژورپ باختنا ن ی ا اب . د ی نک باختنا ار Open as Project 5 . ب ا ،دن ی ارف ن ی ا . دیامن ی ی م د هق ولناد قد دنچ تسا نکمم ی ز ن ار نآ ی اه ی دنمزا ،د ن ی را ی مامت و تخا رد هک دنک ی ی م تنرتن زاب ار هژورپ ا تعرس هب هجوت IntelliJ 6 . .دشکب لوط ا ی ی راد ی ی :تسا تروص نیا هب دیراد رایتخا رد هک یا هژورپ راتخاس ،هژورپ ندش زاب ماجنا زا دعب .دنراد رارق src/main/java src/test هشوپ رد هک اواج یاه هشوپ رد هک تست یاه لیاف لیاف .)مینک یم یسررب ار اهنآ اادعب هک( دنراد رارق
Spring Boot هژورپ یارجا گنیرپسا و ارجا هک ارچ ،دوش تحار یلی خ اواج بو یاه همانرب یارجا هک تسا هدش ثعاب توب یم ماجنا دوخ ار رورس یدنبرکیپ .دهد IntelliJ یدنبرکیپ تامیظنت رد ار نآ و دیراد . دینک ارجا ، تسا main د تم کی یاراد هک ار دتم اب یسلک هک دهد Application سلک ،دوخ همانرب یارجا یارب یم صیخشت راکد .دهد main خ تروص هب یم شیامن ارجا و :همانرب یارجا تهج کیلک ،دراد رارق main دتم هک یطخ رد ، play دیلک یور و دینک زاب ار Application.java .دینک تمسق رد و یلصا .دینک هدافتسا تمسق نیا زا دیناوت toolbar رد ار نآ IDE یم یدعب یاهارجا رد .دهد ، main دتم قیرط زا همانرب لوا راب یارجا زا دعب یم شیامن ارجا یدنبرکیپ
لدناب کی و دنک تسا نکمم یم دولناد ار را front-end ی یاه ی یگتسباو ،دینک ا تعرس هب هجوت اب یم زاب ار نیداو همانرب هک راب نیلوا .دزاس .دشکب لوط هک ،د ی راد ی تخا رد هک تنرتن ،دن ی ارف ن ا ی یم تپیرکسااواج هق ی ا ی قد دنچ :تسا هدش ارجا همانرب هک دیوش یم هجوتم ،دیدرک هدهاشم لوسنک رد ار ریز یجورخ هک ینامز Tomcat started on port(s): 8080 (http) with context path '' Started Application in 80.189 seconds (JVM running for 83.42) دیلک هدش زاب هحفص رد .دینک زاب ار ات دینک کیلک ،دیلک یور و دینک ار Say hello localhost:8080 اتدوخ مان .دید دیهاوخ ار دوخ رگرورم رد دیناوت Your name یامن هدهاشم ار رادشه ماغیپ یم لااح پیات ار ن دلیف هارمه هب .دی
IntelliJ IDEA رد ندرک گابید نآ اب هک نتشاد زا ار ام دناوت تسا یرازبا نیرتهب رگابید ،دوش یم رگابید زا هدافتسا هوحن نتسناد یمن ماجنا ،میراد راظتنا هک یتروص هب اهراک هک ینامز یم یقافتا هچ دک رد دیمهف ناوت System.out.println .دتفا یم .د نک ظفح یدایز دادعت : IntelliJ رد رگابید زا هدافتسا یارب .دینک کیلک stop زمرق دیلک یور رب ،تسا ارجا لاح رد لبق هلحرم زا نات همانرب رگا 0 . گابید تلاح رد ار نات همانرب ،درادرارق ارجا دیلک رانک رد هک کزود شفک نکیآ یور رب کیلک اب 1 . .دینک ارجا
طخ نیا هب عقوم ره هک دنیوگ یم همانرب هب طاقن نیا .دین .راد ک صخشم ار گابید طاقن دیناوت هگن ار همانرب ارجا ،یدیسر ،تسا هدش صخشم هک دک یم لااح هرامش زا دعب ، دی تسا Notification.show یاراد هک یطخ یور رب ، MainView.java کی ات دینک کیلک طخ یم گنر رییغت یمک دک لیاف رد 2 . طخ ، نک کیلک هک نامز ره .دوش هفاضا )گابید هطقن( یم هداد شیامن زین گنر زمرق هطقن کی و دهد breakpoint .دوش ،دینک کیلک .تسا فقوتم Say hello IDE دیلک یور و ،دینک زاب دوخ رگ رو رم رد ار http://localhost:8080 رگا لااح رد میدرک صخشم هک یطخ رد همانرب هظحل نیا رد نوچ .دتفا یمن یقافتا چیه لنپ کی روطنیمه .دیزادنیب ،میدرک صخشم هک یطخ هب یهاگن و دیورب IntelliJ نییاپ رد مه گابید غارس هب 2 . .تسا هتفرگ رارق IDE
هب هک دراد دوجو مه ییاهدیلک روطنیمه .دینیبب دیناوت .دیمهفب ار تارییغت دیناوتب رت قیقد ات دیربب ولج هب ماگ کی ار همانرب یارجا دی یم ار اهریغتم همه ریداقم ،گابید لنپ رد ناوت یم اهنآ هلیسو :دنتسه ریز دراوم ،اهدیلک نیا نیرتمهم .دور یم لیاف نامه رد یدعب طخ هب : Step over دینیبب دیهاوخ یم َلثم( دور یم ،دیتسه نآ یناوخارف لاح رد هک یدتم لخاد هب یم ماجنا : Step into دتم رد هک .)دوش هچ service.greet() .ددرگ یم رب ،دوب نآ رد ناتدتم یناوخارف هک یدک طخ هب : Step out رد یرتشیب تاعلطا رگا .دیوش انشآ نآ درکلمع هوحن اب دیناوت رگابید زا هدافتسا یارب یبوخ یلیخ عبانم یم رگابید نیا اب ندرک راک اب ،دیهاوخ دیلک یور ،دش مامت اتراک هک عقوم ره .دراد JetBrains یم دروم نیا .دینک کیلک Resume 5 . .دینیبب رگرورم رد ار ماغیپ دیناوت یم و دوش یم ارجا یلومعم تروص هب امش دک لااح رگرورم راکدوخ همانرب یارجا زا لبق هک یتامادق یم ثعاب راک نیا .تسا تارییغت یم هداد شیامن رگرورم رد اهنآ همه و دینک ی رازگراب یزاس لاعف ا نیرخآ زا یکی راکدوخ یرازگراب یزاس لاعف ،دیهد ناتدک یور ار یتارییغت.دوش رت تروص هب ار هحفص دشاب مزلا هکنیا نودب ،دوش ماجنا تسا تحار یلیخ همانرب هعسوت هک دوش مزلا یم لامعا .دینک شرفر یتسد :دینک عورش ناترگرورم یارب Chromium Edge LiveReload LiveReload LiveReload LiveReload نیگلپ دولناد اب ار راک نیگل گلپ گلپ 0 . و مورک یارب سکافریاف ی یرافاس ی پ a . b . c . ارب ارب ن ن ی ی راون رد LiveReload )دشاب ارجا لاح رد نات نکیآ یور ب و ،دینک زاب هرابود و دیدنبب ار رگرورم ،دینک بصن ار نیگلپ همانرب هک دیوش نئمطم نآ ماجنا زا لبق( .دینک کیلک رگرورم یلااب ر 1 .
دیاب نآ نکیآ طسو ،تسا هدش لصتم امش همانرب هب و دنک ود و دیدنبب ار رگرورم ای دینک شرفر ار هحفص ،تسین تروص نیا هب رگا .دوشب رپ وت یم راک LiveReload هکنیا نییعت یارب .دین ک زاب هراب :دیوش نئمطم نآ درکلمع زا ات دینک داجیا ناتدک رد رییغت ، ناموگرآ نیلوا ناونعب ار نآ و دیزاسب LiveReload MainView .دیهد ساپ یارجا ماگنه رد رخآ طخ رد دتم هب 2 . H1 دیدج رده کی ، a . add() MainView.java add(new H1("Hello world"), textField, button); .دینک کیلک IntelliJ رد build نکیآ یور رب b .
Reload دینک باختنا ار " گولاید ،دینک اه یم داجیا یرییغت ،لاعف Do not ask again بقارم رگابید تلاح اب هک یلوا هعفد یارب changedclasses now?" .دینک کیلک ار .دید دیهاوخ ار Spring Boot DevTools . تسا reload No و شاددای ت ماجنا یبوخ هب یم شیامن ار تارییغت و دوش build دیوگ یم هک دید دیهاوخ یم یم یرازگراب هرابود ا غیپ ،دورب شیپ یبوخ هب زیچ همه رگا راکدوخ تروص هب رگرورم و تسا هدش 2 . .دهد !هللا مسب ای
ریز هیبش ییاطخ ماغیپ رگورم رد هرابود یرازگراب زا دعب هک تسا نکمم Could not navigate to '' Reason: Couldn't find route for '' Available routes: This detailed message is only shown when running in development mode. :دی نیبب ار ای تشاددای There was an exception while trying to navigate to '' with the exception message 'Error creating bean with name 'com.vaadin.tutorial.crm.MainView': Unsatisfied dependency expressed through constructor parameter 0 یرازگراب نامز تلکشم لیاف هب ریز هصخشم طخ ود ندوزفا اب ناوت نیا .تسا Spring DevTools لیلد هب اهاطخ هنوگنیا یم ار اه اطخ
Stop ار رورس .دومن فرطرب src/main/resources/application.properties هصخشم ات دینک تراتسا رابود و دینک application.properties .دنوش هفاضا نآ هب اه spring.devtools.restart.poll-interval=2s spring.devtools.restart.quiet-period=1s auto import ندرک لاعف دیناوت اه import .دوش ماجنا رت اواج یاه هداس سلک یارب راکدوخ تروص هب هک دینک یدنبرکیپ یتروص هب ار اهدک ندرک یپک هک دوش IntelliJ یم IDE لخاد هب شزومآ ی یم ثعاب راک نیا .دهد رارق ار : IntelliJ رد auto import ندرک لاعف یارب Editor > General > Auto Import هب و هدرک زاب ار Preferences/Settings هرجنپ .دیورب 0 . .دینک لاعف ار ریز هنیزگ ود 1 . Add unambiguous imports on the fly Optimize imports on the fly
کرتشم JavaFX و ، AWT ، Swing اب هک ) Button لثم( تسا یدایز یاه سلک مان یاراد نیداو .دنتسه تسیل هب ار ریز یاه راکدوخ باختنا رد جیکپ ،دینک IntelliJ یمن هدافتسا دینک هفاضا JavaFX Exclude from import and completion .مینک کمک تسرد یاه ای ، AWT ، زا نات یاه هژورپ رگید رد رگا 2 . هب ات سلک com.sun java.awt javafx.scene javax.swing jdk.internal sun.plugin .مینک عورش ار بو تحت همانرب تخاس میناوت یم ،دش هدامآ نات هعسوت طیحم هک لااح .دینک تفایرد باه تیگ زا دیناوت یم ار شزومآ نیا لماک یاهدک یمامت
اه layout و اه تننوپماک زا هافتسا اب UI تخاس :نیداو هیاپ لوصا هژورپ کی روطچ و دینک هدامآ ار ناتدوخ هعسوت طیحم روطچ هک دیتفرگ دای ،شزومآ یلبق لصف ود رد .دینک ارجا و هدرک زاب ار Maven هیاپ رب توب گنیرپسا میه اوخ هدامآ یسیوندک یارب ار نامدوخ هژورپ و مینک یم یفرعم ار نیداو یلصا میهافم ،لصف نیا رد . درک ،دیا هدمآ لصف نیا هب اامیقتسم رگا .دینک دولناد . لصف یاهتنا رد ار هدش لیمکت رد دیناوت یاهدک دیناوت یم دینیبب اجنیا یم ار شزومآ یلبق لوصف یاهدک هدافتسا drag and drop تیلباق اب یرگش ار یو زا دیراد تسود ، Vaadin Designer یار UI تخاس یارب رگا شزومآ ،دینک هتکن .دینک هدهاشم هب طوبرم یاه نیداو هاتوک یفرعم .مینک راک اهنآ اب تسا رارق هک نیداو یلصا میهافم هب میشاب هتشاد یهاگن دیهد هزاجا لوا ؟تسیچ نیداو تخاس یارب .دوش یم هدافتسا بو تحت یاه یم هرهب تننوپماک هیاپ همانرب تخاس یارب هک تسا رب یسیون همانرب لدم زا مه یربراک یاه اواج میرف کی نیداو .درب طساو Vaadin UI components لیکشت ار همانرب یاهرجآ هک تسا ییاه UI component زا یا هدرتسگ هناخباتک یاراد نیداو مرفتلپ .دنهد یم تخاس یارب ،لاثم یارب . دینک داجیا اواج تکجبآ کی هک تسا یفاک طقف ،تننوپماک یم ار ریز دک تخاس یارب Button :دیسیون کی
Button button = new Button("I'm a button"); اه Layout نی رت لوادتم .دنوش هداد شیامن رگرورم هرجنپ رد روطچ اه و تننوپماک هک دننک HorizontalLayout یم نییعت layout اه Layout تننوپماک .دنتسه Div VerticalLayout ، ، یاه دهد یم هزاجا مه Div و ،دنهد یم رارق یقفا و یدومع تروص هب ار دوخ یاوتحم ،لوا تننوپماک ود .دینک نییعت ار نآ لخاد اوتحم ناکم CSS اب ات .درک هفاضا اه layout هب ار اه تننوپماک ناوت ی م add() دتم زا هدافتسا اب زین ی نتفرگ رظن رد نودب اه ار یدنبزارت ضرف شیپ رادقم دیناوت یاهدتم ،یلصا تهج رد اوتحم ندرک زارت رب تننوپماک همه هک دیهاوخب رگا الثم.دنراد مه عطاقتم تهج رد یدنبزارت یارب یم ،دریگب رارق هولع VerticalLayout و HorizontalLayout HorizontalLayout نییاپ رد ،اهنآ عافترا Alignment.END :دیهدب رارق Button button = new Button("I'm a button"); HorizontalLayout layout = new HorizontalLayout(button, new DatePicker("Pick a date")); layout.setDefaultVerticalComponentAlignment(Alignment.END); add(layout); اه Event ک ی ندرک کیلک لثم ییاهدادیور ،دیشاب هتشاد ییاه عبات دیناوت select اهدادیور هب نداد شوگ یارب تننوپماک کی رادقم ندرک رییغت ای ،دیلک یم .
:دنک یم هفاضا layout هب " Clicked! " نتم کی ، button ندش کیلک ماگنه ریز لاثم button.addClickListener(clickEvent -> add(new Text("Clicked!"))); ؟تساجک HTML سپ ثعاب عوضوم نیا .دیزاسب بو یاه همانرب . اواج اب طقف دیناوت دیشاب هتشاد یم هک تسا نیا نیداو یلصا یگژیو رتناسآ گابید و رتدمآراک هعسوت هک دوش ی یم رد ار تسا هدرک داجیا دوخ هک ییاهدک و دنک یم هدافتسا HTML یاه بلاق زا لمع رد یم شیامن رگرورم نیداو هتبلا .دیشاب نارگن دروم نیا رد تسین مزلا لصا هک دهد هژور پ ندرک هدامآ اه جیکپ فیرعت هک تسا مزلا اهدک یهدنامزاس ظفح یارب .تسا .مینک فیرعت backend یاهدک و هژورپ راتخاس رد ار یا UI تمسق ود یاراد ام همانرب هناگادج یاه اهنآ زا مادک ره یارب جیکپ :اه جیکپ فیرعت یارب .دینک کیلک تسار com.vaadin.tutorial.crm جیکپ یور رب 0 . مان اب دیدج جیکپ کی و هدومن باختنا .دیزاسب ار New > Package 1 . com.vaadin.tutorial.crm.ui com.vaadin.tutorial.crm.backend مان اب یرگید جیکپ نتخاس یارب ار دنیارف نیمه 2 . .دینک رارکت
اهدک ندرک refactor دروم رد IntelliJ رگا .دینک گرد ui جیکپ لخاد هب ار .دینک باختنا ار MainView ،درک 2 . yes لاوس :دشاب تروص نیا هب دیاب هژورپ راتخاس
یلصا layout ندرک میظنت .میهد یم رارق ار نامدوخ یلصا layout و مینک یم کاپ ار میرادن مزلا هک ییاهدک یدعب ماگ رد
:راک نیا ماجنا یارب ،لمع نیا اب .دینک نیزگ نئمطم راک عورش یارب زیمت یاهدک نتشاد زا و میدرک فذح ار یرورض ریغ یاهدک مامت یاج ریز یاهدک اب ار نآ و هدومن فذح ار MainView لخاد یاوتحم 0 . .میدش MainView.java package com.vaadin.tutorial.crm.ui; import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.router.Route; @Route("") ① public class MainView extends VerticalLayout { public MainView() { } } . دوش یم هدافتسا سلک هب view لاصتا یارب ، @Route("") ① :دینک فذح مه ار ریز لیاف یدعب مدق رد GreetService.java 1 . frontend/styles/vaadin-text-field-styles.css .دینک ارجا ار همانرب دیناوت .دیشاب هتشادن ییاطخ چیه مه لوسنک رد و دینیبب ار رگرورم رد یلاخ هرجنپ کی دیاب یم هک دینک یسررب 2 .
ه دامآ هداد هاگیاپ کی ،یدعب لصف رد .مینک راک نآ اب هک .مینک میراد زاین یم رپ تست یاهاتید اب ار نآ و مینک ییاهاتید ه ب ، UI تخاس زا لبق یم .دنتسه سرتسد رد باه تیگ رد شزومآ نیا لماک یاهدک
JPA ، هداد هاگیاپ : Spring Boot backend اه کی داجیا repository سیورس و اه in- ا هدافتسا یارب ار یدنبرکیپ هداد هاگیاپ کی زا ام ،شزومآ نیا رد .دنراد یتحارب اتید یبایزاب و هریخذ هب زاین یعقاو یاه یم هدافتسا لثم ،اه همانرب رثکا memory عاونا رگید ز دیناوت یم زاین تروص رد .مینک Postgres H2 هداد مان اب هاگیاپ .دیهد رییغت ، ای MySQL .دینک تسیپ و یپک کنیل .دینک دولناد همانرب نورد هب یگداس هب ار اهنآ دیاب نآ لخاد تارییغت همه هک یا هک دراد دوجو backend هدامآ یارب یسلک دنچ لیامت تروص رد .دراد رارق لصف یاهتنا رد دولناد یزاس ار تسا هژورپ دیناوت یم لصف شزومآ یاهدک دیناوت یم کنیل نیا قیرط زا ،دیا هدمآ لصف نیا غارس هب اامیقتسم هک مه رگا .دینک دولناد ار لبق هداد هاگیاپ یاه زا اهاتید هب یسرتسد یارب کجبآ تشاگن یارب Spring Boot یگتسباو بصن Hibernate هدافتسا یم Spring Data Java Persistence API ماجنا امش یارب ار اهرازبا نیا زا عقاو رد .مینک ، هداد همه یم هدافتسا هاگیاپ یاه یارب مزلا یاه Spring Data تیدوجوم هب ا یدنبرکیپ یمامت زا واج یاه ت .دهد ی .دنک یم :هداد هاگیاپ یاه یگتسباو ندوزفا یارب Spring یارب ار ریز یا ه یگتسباو ، pom.xml لیاف لخاد رد > dependencies .دینک هفاضا < و گت رد Data 0 . H2 pom.xml <dependencies> <!--all existing dependencies --> <!--database dependencies --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> </dependencies> ترو ص هب Maven یاه یگتسباو هک دیهاوخ .دینک باختنا ار یم هک دیسرپ Enable Auto-Import IntelliJ رگا و دینک هریخذ ار لیاف ،دنوشب دراو راکدوخ 1 . هدافتسا یرگید هب ات )دیشاب هژورپ یلصا هشوپ رد دیاب( دینک پیات IDE زا هکنیا ای ،دیسرپن یلاوس اه یگتسباو ندرک command line .دنوش دولناد اه import رد ار دروم رد mvn install تسباو یمامت تروصنیا IntelliJ ،دینک رگا یم یگ بصن هب زاین هک ارچ ،تسناد شزومآ یارب یلاع هداد یم یتحار هب ،دیراد تسود هک رگا یلو .دیرادن هفاضا یاهرازفا یم ار ریز دراوم .دیهد رییغت رگید هداد هاگیاپ ناوت یم ار H2 مرن هب ار نآ دیناوت :دینک یسررب دیناوت هاگیاپ تشاددای MySQL Postgres یزاس یزاس هدامآ هدامآ دن چره . تسا هدافتسا لباق اه هداد هاگیاپ ی مامت یارب مینک .دینک هدافتسا یم هدافتسا شزومآ نیا رد هک یراتخاس یم هیصوت راک یگداس یارب هک H2 زا مینک
تاعلاطا لدم ندرک فیرعت متسیس کی ام همانرب یم تیریدم ار اه و اه یاه سامت هک تسا ) سلک هک CRM مزلا ،هداد ( customer relationship management هاگیاپ هب اوتحم تشاگن یارب.دنک تس ا تکرش :مینک داجیا ار ریز یاه تیدوجوم .تکرش کی رد یدنمراک یم هک یتیدوجوم superclass Contact Company AbstractEntity : .دشاب هتشاد دنمراک نیدنچ دناوت .یلبق دروم ود یارب : : :اه تیدوجوم سلک تخاس یارب و .دیزاسب یدیدج Contact com.vaadin.tutorial.crm.backend.entity سلک ،ریز یاهدک هب هجوت اب 0 . 1 . لخاد رد ار Company ، AbstractEntity یاه .دیزاسب دیدج جیکپ project view .دننک لنپ لخاد ،جکیپ رد نآ ندرک تسیپ و سلک مامت ندرک یپک ،راک نیرت تحار یم داجیا امش یارب ار اواج لیاف راکدوخ تروص هب )اه IDE رثکا و( IntelliJ .تسا
نییعت سلک نیا .تسا .دوش نییعت اه superclass تکجبآ ندوب ربارب روطچ و دنوش دیلوت اه هک دینک عورش , AbstractEntity id تخاس اب 0 . روطچ هک دنک یم AbstractEntity.java package com.vaadin.tutorial.crm.backend.entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.MappedSuperclass; @MappedSuperclass public abstract class AbstractEntity { @Id
@GeneratedValue(strategy= GenerationType.SEQUENCE) private Long id; public Long getId() { return id; } public boolean isPersisted() { return id != null; } @Override public int hashCode() { if (getId() != null) { return getId().hashCode(); } return super.hashCode(); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } AbstractEntity other = (AbstractEntity) obj; if (getId() == null || other.getId() == null) { return false; }
return getId().equals(other.getId()); } } :دیزاسب ار Contact سلک یدعب ماگ رد 1 . Contact.java package com.vaadin.tutorial.crm.backend.entity; import javax.persistence.*; import javax.validation.constraints.Email; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; @Entity public class Contact extends AbstractEntity implements Cloneable { public enum Status { ImportedLead, NotContacted, Contacted, Customer, ClosedLost } @NotNull @NotEmpty private String firstName = ""; @NotNull @NotEmpty private String lastName = ""; @ManyToOne @JoinColumn(name = "company_id") private Company company;
@Enumerated(EnumType.STRING) @NotNull private Contact.Status status; @Email @NotNull @NotEmpty private String email = ""; public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Status getStatus() { return status; } public void setStatus(Status status) { this.status = status; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; }
public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public void setCompany(Company company) { this.company = company; } public Company getCompany() { return company; } @Override public String toString() { return firstName + " " + lastName; } } :دینک یپک ار Company سلک مه تیاهن رد 2 . Company.java package com.vaadin.tutorial.crm.backend.entity; import javax.persistence.*; import java.util.LinkedList; import java.util.List; @Entity public class Company extends AbstractEntity {
private String name; @OneToMany(mappedBy = "company", fetch = FetchType.EAGER) private List<Contact> employees = new LinkedList<>(); public Company() { } public Company(String name) { setName(name); } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Contact> getEmployees() { return employees; } } .دینک build ار هژورپ دیناوت یم هک دینک ناحتما 2 . Maven یاه یگتسباو هرابود ، .دیوش نئمطم اهنآ دنتسه همه اه سلک ندش دولناد زا ات دینک ارجا ار نتشادن دوجو دروم رد هک دیراد mvn install یدایز و هدرک یسررب ار یاه اطخ رگا ی
هداد هاگیاپ هب یسرتسد یارب اه repository data model داجیا هک لااح یا سلک ،هداد یراک ی طابترا رد ن یم ماجنا ار اهراک هیقب ه هاگیاپ هب یسرتسد یارب یدعب ماگ رد ،دیدرک داجیا ار ناتدوخ همه .تسا هدرک هداس رایسب ار راک نیا ماجنا آ اب هک یتیدوجوم عون نآ رد هک تسا Spring Data Spring Boot interface یم نییعت ار ) .تخاس میهاوخ ار کی فیرعت ،دیهد ماجنا دیاب هک ( یلصا دیلک عون و repository تسا .دهد و ،دینک primary key : repository یاه سلک تخاس یارب .دیزاسب ار com.vaadin.tutorial.crm.backend.repository دیدج جیکپ 0 . ContactRepository.java package com.vaadin.tutorial.crm.backend.repository; import com.vaadin.tutorial.crm.backend.entity.Contact; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import java.util.List; public interface ContactRepository extends JpaRepository<Contact, Long> { } :دینک یپک جیکپ رد ار ریز repository سلک ود 1 . CompanyRepository.java package com.vaadin.tutorial.crm.backend.repository; import com.vaadin.tutorial.crm.backend.entity.Company; import org.springframework.data.jpa.repository.JpaRepository;