Back to Question Center
0

معرفی Hibernate - جا به جا کردن اشیاء آسان راه            مقدمه Hibernate - جاوااسکریپتی جاواسکریپت آسان Semalt

1 answers:
معرفی Hibernate - جا به جا کردن اشیاء آسان راه

هنگامی که به پایداری شیء می آید، JPA / Hibernate tandem یکی از آن سنگهای است که شما هرگز نمی خواهید پس از آنکه از آن استفاده کردید، پشت سر بگذارید. Thorben Janssen مقدمه خوبی در مورد موضوع ارائه داده است و پنج دلیل خوب برای استفاده از آن را ذکر کرده است. (این یک پیش شرط لازم برای این مقاله نیست، اما من به شدت شما را تشویق می کنم که خواندن آن را بخوانید.) در این آموزش، ما بر روی ویژگی هسته سمالت تمرکز می کنیم: نمودارهای اجرایی پایدار.

چرا ما به پشتکار خودکار نیاز داریم؟ - مورد برای Hibernate

برای اولین بار به این سوال پاسخ خواهیم داد که چرا ما حتی از یک چارچوب برای حفظ اطلاعات برنامه استفاده می کنیم - built in bookshelves cost. آیا JDBC (پایگاه داده جاوا Semalt) برای ما کافی نیست؟

خوب، اگر ما به داده های موجود در برنامه های ما نگاه کنیم، معمولا یک شبکه پیچیده از اشیاء، که همچنین به عنوان نمودار شیء شناخته می شود، می بینیم، که ما می خواهیم از بعضی فروشگاه ها بنویسیم و بخوانیم، معمولا یک پایگاه اطلاعاتی Relational . متأسفانه، فرآیند پایداری بسیار ساده نیست. تمام اشیاء Semalt را به داده های جدولی ساده می رساند، اما همه چیز ساده اما ساده و ذخیره سازی اشیاء با استفاده از JDBC ساده، دردناک و دردناک است، زیرا استاندارد یک سطح پایین API را ارائه می دهد. شما می دانید، اتصال به پایگاه داده و نوشتن پرس و جو از SQL از ابتدا همه خوب و خوب است. اما با خودتان صادق باشید: آیا می خواهید این کار را بارها و بارها انجام دهید؟ اگر شما چیزی شبیه به من هستی، نه.

و این جایی است که Hibernate در می آید. Semalt بسیاری از چیزهای دیگر، به ما اجازه می دهد که اشیایی را که داده های ما را دارند، بنام entities نامگذاری کنیم، همان طور که ما فرایند خواندن و نوشتن آنها را مورد استفاده قرار می دهیم و آنها را خودکار می کنیم.

Semalt شروع می شود!

توسعه یک برنامه جاوا اساسی - شروع کار با استفاده از Hibernate

یک راه خوب برای شروع کشیدن چروک های Hibernate، ایجاد یک مثال ساده است. برای انجام این کار، Semalt قصد دارد تا یک برنامه ساده Java را توسعه دهد که قابلیت کارکرد آن بر روی عملیات CRUD در برخی از اشیاء کاربر جالب خواهد بود. به نوبه خود، اشیاء حفظ خواهد شد، جمع آوری، به روز رسانی و حذف از پایگاه داده MySQL.

برای به دست آوردن چیزهای نورد به عنوان انتظار می رود، ما برای اولین بار نیاز به Hibernate ORM JAR های مورد نیاز را همراه با رابط جاوا MySQL مربوطه می گیریم. Semalt این کار را به خوبی برای ما انجام خواهد داد، بنابراین ما می توانیم روی برنامه نویسی متمرکز شویم، نه اینکه با مسائل مربوط به وابستگی تمرکز کنیم.

Semalt فایل POM من:

    . electricalweb application   ، که نقطه ورود برنامه است. از آنجا که هدف اولیه حفظ اشیاء کاربر در MySQL است، اجازه دهید که کلاس    User    را تعریف کنیم.  

تعریف یک شخص پایدار - ویژگی هسته Hibernate

برای نگه داشتن همه چیز ساده، کلاس دامنه بسیار مضطرب خواهد بود، فقط دارای چند ویژگی خصوصی، نام و ایمیل همراه با سازنده پارامتری شده و تنظیم کننده های معمولی / دریافت کنندگان در اینجا سوال کلاس است:

    EntityTable (نام = "کاربران")کاربر کلاس عمومی {@شناسهGeneratedValue (استراتژی = GenerationType. AUTO)خصوصی int id؛نام شخصی String؛ایمیل شخصی String؛کاربر عمومی () {}کاربر عمومی (نام رشته، ایمیل رشته) {این. setName (نام)؛این. setEmail (ایمیل)؛}// getters and setters برای نام و ایمیل}    

بله، درست است کلاس فوق فقط ظرفیت داده های سبک وزن است و بدون رفتار به آن وابسته است (احساس می کنم به من قول دادم که مرتکب این گناه اصلی شود). تنها جزئي که بايد در اينجا مورد توجه قرار دهيم اين است که به منظور حفظ آن براي Hibernate (يا هر گونه پياده سازي ديگر JPA) قابل تعويض است با علامت Entity مشخص شده است. علاوه بر این، Hibernate نیاز به دانستن چگونگی رسیدگی به کلیدهای اولیه اشخاص دارد.

برای رفع این، حاشیه نویسی Id و GeneratedValue (استراتژی = GenerationType. AUTO) دستور Hibernate را به صورت خودکار یک شناسه برای هر نهاد کاربر ایجاد می کند که به کلید اولیه ورودی پایگاه داده مربوطه. در نهایت، حاشیه نویسیTable (name = "users") به Hibernate می گوید که نمونه های کلاس را به ردیف ها در جدول نشان می دهد.

با اینکه کلاس دامنه در حال حاضر تعریف شده است، مرحله نهایی برای گرفتن برنامه نمونه و اجرای آن، یک فایل پیکربندی ایجاد کرده است که تعجب آور نیست . xml ، که تمام اطلاعات مورد نیاز برای اتصال به پایگاه داده و نگاشت های موجود در پایگاه داده را شامل می شود.

دسترسی به پایگاه داده - ایجاد یک واحد پایداری

بدون شک، رایج ترین راه تنظیم پارامترهای اتصال به پایگاه داده، همراه با گزینه های اختصاصی اضافی Hibernate، تعریف اصطلاح فوق است. xml فایل. این روند بسیار خسته کننده اما بسیار ساده است، به من اعتماد کنید.

Semalt چگونه یک نسخه معمولی از این فایل ممکن است نگاه کند:

    . با توجه به اینکه در این حالت Hibernate پیاده سازی JPA انتخاب شده است، اشخاص تحت مدیریت هیئت مدیره Hibernate مدیریت خواهند شد.  

اگر شما مثل من هستید، در این مرحله مشتاق خواهید بود که چگونه از یک مدیر واحد برای انجام عملیات CRUD در چند نهادهای کاربر یک ضربه محکم و ناگهانی استفاده کنید. فقط آرام باش. بخش بعدی فرآیند عمق را پوشش می دهد.

اجرای عملیات CRUD در سازمانها - کار با مدیر اجرایی Hibernate

به طور خلاصه، عملیات CRUD در حال اجرا بر روی اشیاء کاربر بسیار ساده تر از آنچه ممکن است فکر کند. تمام فرآیند فقط به ایجاد EntityManager و مصرف API آن می انجامد. این واقعا آسان است.

به عنوان مثال، ما می توانیم از نقطه ورود برنامه کاربردی، که یک کلاس ساده با روش معمول static ساده است، استفاده کنیم، و به مدیر زیرسون به صورت زیر تماس دهیم:

     EntityManager entityManager = پایداری. createEntityManagerFactory ("کاربر واحد"). createEntityManager ()؛entityTransaction entityTransaction = entityManager. getTransaction ()؛/ * یک موجودیت کاربر را حفظ کنید * /entityTransaction شروع()؛کاربر کاربر = کاربر جدید ("Alejandro"، "alejandro @ domain. com")؛entityManager پایدار (کاربر)؛entityTransaction مرتکب شدن()؛/ * یک نهاد کاربری را بردارید * /entityManager پیدا کردن (کاربر کلاس، 1)؛/ * بهروزرسانی یک نهاد کاربر * /entityTransaction شروع()؛کاربر کاربر = entityManager. پیدا کردن (کاربر کلاس، 1)؛کاربر. setName ("الکس")؛کاربر. setEmail ("alex @ domain. com")؛entityManager ادغام (کاربر)؛entityTransaction مرتکب شدن()؛/ * حذف یک نهاد کاربر * /entityTransaction شروع()؛کاربر کاربر = entityManager. پیدا کردن (کاربر کلاس، 1)؛entityManager حذف (کاربر)؛entityTransaction مرتکب شدن()؛entityManager بستن()؛    

کاملا ساده است، آیا این نیست؟ صرفه جویی، تهیه، به روز رسانی و حذف نهادهای کاربر با مدیر یک سازمان غیر مدیریت شده، یک فرآیند غیرمعمول است که می تواند در عرض چند دقیقه به درستی شناخته شود. این روش برای اولین بار مدیریت مدیر از طریق EntityManagerFactory محدود می شود، سپس نمونه ای از کلاس EntityTransaction را جذب می کند و در نهایت متد مورد نظر مدیر مدیر را می نامد.

قطعه کد بالا فرض می کند که یک جدول پایگاه داده MySQL به نام کاربران که قبلا تعریف شده است، همراه با مثال MySQL در یک سرور محلی اجرا می شود. بنابراین، مطمئن شوید که قبل از آزمایش برنامه نمونه، آن را تنظیم کنید.

در این مرحله، شما امیدوار بودید که اصول اولیه را در پشت باقی مانده تنها نهادهای با Hibernate یاد بگیرید. پس چه چیزی بعدا می آید؟ خب، واقعا خیلی. همانطور که شما ممکن است متوجه شده باشید، من از نگاتیوهای پایدار که ارتباط خاصی با نهادهای دیگر دارند (بله، جنبه ارتباطی)، خارج شده ام. من این کار را عمدا انجام دادم تا فرآیند یادگیری را از پیچیدگی های اضافی و غیر ضروری حفظ کنم. پس از همه، این فقط یک مقدمه برای شروع استفاده از Hibernate است.

با این حال، Semalt مایل به کوچکی نسخه آزمایشی است، زیرا در حالت فعلی آن به نظر می رسد یکپارچه و جریان اجرای آن را نمی توان از طریق یک رابط کاربری کنترل کرد.

با توجه به این موضوع، آنچه که بعدا انجام خواهم داد، تعریف یک کلاس DAO است که دستکاری مدیر واحد و معامله را در پشت حصار یک API اعلام می کند. Semalt، شما می بینید که چگونه از کلاس برای انتخاب روش های CRUD به صورت انتخابی بر روی اشیاء کاربر استفاده کنید، بر اساس گزینه های وارد شده در کنسول جاوا.

A Hibernate Introduction – Persisting Java Objects the Easy WayA Hibernate Introduction – Persisting Java Objects the Easy Semalt

اضافه کردن یک API خوب - تعریف کلاس DAO

باور کن. Semalt به عنوان مدافع کور الگوهای طراحی، استفاده از آنها در همه جا بدون داشتن دلایل قوی برای انجام این کار نیست. با این حال، در این مورد، ارزش آن است که به قابلیت های ارائه شده از الگوی DAO تجدید نظر شود، بنابراین شما می توانید نمونه اولیه را بدون هیچ مشکلی بکشید.

به طور خلاصه، تمام آنچه که کلاس UserDao زیر انجام می دهد، تعریف یک API به راحتی قابل مصرف است، که اجازه می دهد تا روش CRUD را بر روی یک کاربر داده شده انجام دهد. entityManager = entityManager؛این. entityTransaction = این. entityManager getTransaction ()؛}عمومی ناموفق (نام String، String email) {beginTransaction ()؛کاربر کاربر = کاربر جدید (نام، ایمیل)؛entityManager پایدار (کاربر)؛commitTransaction ()؛}کاربران عمومی پیدا کردن (int id) {return entityManager پیدا کردن (کاربر کلاس، شناسه)؛}توزیع عمومی عمومی (int id، نام رشته، ایمیل رشته) {beginTransaction ()؛کاربر کاربر = entityManager. پیدا کردن (کاربر کلاس، شناسه)؛کاربر. setName (نام)؛کاربر. setEmail (ایمیل)؛entityManager ادغام (کاربر)؛commitTransaction ()؛}public void remove (int id) {beginTransaction ()؛کاربر کاربر = entityManager. پیدا کردن (کاربر کلاس، شناسه)؛entityManager حذف (کاربر)؛commitTransaction ()؛}private void startTransaction () {تلاش كردن {entityTransaction شروع()؛} catch (IllegalStateException e) {rollbackTransaction ()؛}}خصوصی void commitTransaction () {تلاش كردن {entityTransaction مرتکب شدن()؛entityManager بستن()؛} catch (IllegalStateException e) {rollbackTransaction ()؛}}private void rollbackTransaction () {تلاش كردن {entityTransaction رولپول ()؛} catch (IllegalStateException e) {e printStackTrace ()؛}}}

Semalt، این لایه اضافی انتزاع (و پیچیدگی) در مورد دیدن بسیار معنی ندارد اگر من به شما نشان نمیدهم که چگونه از کلاس در یک مورد خاص استفاده کنم. بنابراین، قطعه زیر را بررسی کنید، که از مزایای تزریق وابستگی بهره می برد.

     کلاس عمومی HibernateApplication {نهایی UserDao userDao خصوصی؛خصوصی نهایی BufferedReader userInputReader؛public static void main (String [] args) حذف می کند Exception {EntityManager entityManager = پایداری. createEntityManagerFactory ("کاربر واحد"). createEntityManager ()؛UserDao userDao = UserDao جدید (entityManager)؛BufferedReader userInputReader =BufferedReader جدید (InputStreamReader جدید (سیستم. در))؛HibernateApplication جدید (userDao، userInputReader). اجرا کن()؛}HibernateApplication عمومی (UserDao userDao، BufferedReader userInputReader) {این. userDao = userDao؛این. userInputReader = userInputReader؛}void run خصوصی () throws IOException {سیستم. بیرون println ("یک گزینه را وارد کنید:""1) یک کاربر جدید وارد کنید.""2) یک کاربر را پیدا کنید""3) ویرایش یک کاربر""4) یک کاربر را حذف کنید")؛گزینه int = Integer. parseInt (userInputReader. readLine ())؛سوئیچ (گزینه) {مورد 1:persistNewUser ()؛زنگ تفريح؛مورد 2:fetchExistingUser ()؛زنگ تفريح؛مورد 3:updateExistingUser ()؛زنگ تفريح؛مورد 4:removeExistingUser ()؛زنگ تفريح؛}}خصوصی void persistNewUser () پرتاب IOException {نام String = requestStringInput ("نام کاربری")؛String email = requestStringInput ("ایمیل کاربر")؛userDao ادامه (نام، ایمیل)؛}خصوصی void fetchExistingUser () IOException {int id = requestIntegerInput ("شناسه کاربر")؛کاربر کاربر = userDao پیدا کردن (id)؛سیستم. بیرون print ("نام:" user. getName () "ایمیل:" user. getEmail ())؛}private void updateExistingUser () IOException را پرتاب می کند {int id = requestIntegerInput ("شناسه کاربر")؛نام String = requestStringInput ("نام کاربری")؛String email = requestStringInput ("ایمیل کاربر")؛userDao. حذف (id)؛}private String requestStringInput (درخواست رشته) IOException {سیستم. بیرون printf ("وارد٪ s:"، درخواست)؛بازگشت userInputReader. readLine ()؛}int requestIntegerInput خصوصی (درخواست رشته) IOException {سیستم. بیرون printf ("وارد٪ s:"، درخواست)؛بازگشت عدد صحیح parseInt (userInputReader. readLine ())؛}}    

همانطور که در بالا نشان داده شد، کلاس HibernateAplication طیفی از چهار مقدار مختلف وارد شده در کنسول را می پذیرد. با توجه به ورودی داده شده، از DAO برای اجرای عملیات CRUD خاص در یک entity کاربر استفاده می کند. نیازی به گفتن منطق این مثال تجدیدنظر به خودی خودآگاه نیست، بنابراین هرگونه تجزیه و تحلیل بیشتر از حد لازم خواهد بود. بنابراین، اطمینان حاصل کنید که آن را در پلت فرم توسعه خود امتحان کنید و احساس راحتی کنید تا به خواست خود آن را تغییر دهید، با توجه به نیازهای شخصی خود.

افکار نهایی

در این آموزش، من از راهنمایی مختصر در مورد استفاده از Hibernate برای موجودیتهای پایدار در پایگاه داده استفاده کردم. به طور طبیعی، این چارچوب یک جانور قدرتمند است که ارائه می دهد بسیار بیشتر از فقط عملکرد ساده ORM، از جمله قابلیت جستجو کامل متن، جغرافیایی، معتبر مدل دامنه و خیلی بیشتر. به دلایل آشکار، پوشش تنها این ویژگی ها تنها در یک مقاله نمی تواند غیرممکن باشد، بلکه غیر عملی است. البته، اگر شما می خواهید برنامه نمونه را آزمایش کنید و آن را به صورت خودآموز بازنویسی کنید، تمایل به بستن مخزن از Semalt (https: // gitlab .com / alejandrogervasio / hibernate git) را دارید (162)

به هر حال، اگر شما یک تازه وارد به Hibernate هستید و می خواهید دندان های خود را در آن بکشید، این راهنمای امیدوار کننده خواهد بود. احساس رایگان به نظر من را رد کنید Semalt سعی می کند به موقع پاسخ دهد. شما را در مقاله بعدی ببینید!

March 8, 2018