شروع Hibernate
از سری مقالات آموزش Java Enterprise, مبحث Hibernate را برمی گزینیم.
در ابتدا باید ماهیت Hibernate را بررسی کنیم. سه ویژگی بسیار مهم Hibernate :
- یک ابزار ORM است که شامل ویژگی های بسیار زیادی است؛ اما نباید آن را تنها به عنوان یک ابزار ORM در نظر گرفت. اما برای معرفی، آن را یک ابزار ORM در نظر میگیریم .
- در Data layer استفاده میشود
- از JPA استفاده میکند ( در آینده مبحث JPA را به تفصیل مورد بحث قرار میدهیم)
در ابتدا باید ORM را بررسی کنیم. Object Relational Mapping و یا به اختصار ORM, یک شیوه برنامه نویسی است که اطلاعات ذخیره شده در پایگاه داده را با ساختار شی گرایی در اختیار برنامه نویس قرار میدهید. این تعریف ممکن است کمی گنگ به نظر برسد. بنابراین با ذکر یک مثال مفهوم ORM را بررسی میکنیم. جدول و کلاس زیر را در نظر بگیرد:
در اینجا ما شش عدد User Object داریم که به هریک از Object ها یک سطر در جدول پایگاه داده اختصاص داده شده است.جدول درون پایگاه داده با کلاس و مقادیر آن با Object ها متناظر است. تمام متغیر های این کلاس نیز به صورت ستون های این جدول تعریف شده اند. درچنین ساختاری تمام Object های ما در پایگاه داده ذخیره شده اند. تعداد سطر ها برابر تعداد Object ها است. بنابراین برای ذخیره حجم عظیمی از اطلاعات, به سطر های زیادی نیاز داریم.
مقادیر از طریق کد های SQL به پایگاه داده منتقل و یا خوانده میشوند. در چنین ساختاری وقتی اطلاعات یک کاربر با ID = 500 را از پایگاه داده دریافت میکنیم نیاز است تا از طریق متد های setter متغیر ها را مقدار دهی کنیم. اما مشکلی که در اینجا پیش میآید این است که اطلاعات در پایگاه داده به صورت شی گرایی نیستند وبه وضوح دسترسی به آنها نیز به صورت شی گرایی نیست. برای رفع مشکلاتی که این تفاوت بوجود میآورد نیاز است تا از ابزاری استفاده کنیم و این ابزار تبدیل ساختار را برعهده داشته باشند.
وقتی از ORM استفاده میکنیم, این ابزار بسیاری از مشکلات ما در سطح Data layer را مرتفع میسازد. یکی از مواردی که آن را بررسی کردیم, تبدیل اطلاعات است. هدف ما این است که اطلاعات از قالب ستون ها, به قالب متغیر ها Map شود. اما امکانات بیشتری نیز در اختیار ما قرار میگیرد. برای مثال میتوان ارتباط بین جداول را نیز Map کرد. نمونه ای از این ویژگی میتواند در ساختار relational ذخیره اطلاعات در پایگاه داده, آشکار شود. این ارتباط میتواند در سطح شی گرایی کنترل و پردازش شود. باقی ویژگی ها را در طول آموزش ها بررسی میکنیم.
تا اینجا با هدف اولیه Hibernate آشنا شدیم. اکنون باید شرایط و ابزار مورد نیاز برای استفاده از Hibernate در پروژه ها را مهیا کنیم. در این سری آموزش ها از Mysql استفاده میکنیم. به این ترتیب نیاز است تا Maven Dependency مرتبط با Hibernate و Mysql Connector را به برنامه اضافه کنیم. Mysql Connector ارتباط بین جاوا و Mysql را بر عهده دارد.
<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>6.0.6</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.9.Final</version> </dependency> </dependencies>
به این ترتیب Dependency های مورد نیاز را به پروژه اضافه کرده ایم. در مقاله بعد استفاده از Hibernate در برنامه ها را بررسی میکنیم.
در مقاله بعد افزودن Hibernate به پروژه را مورد بررسی قرار میدهیم.
سری مقالات آموزش Java Enterprise ادامه دارد.
با ما همراه باشید.
مطالب زیر را حتما مطالعه کنید
از Java به Dart – کلاس و Constructor
آموزش Gradle – اهمیت Project Automation
تفاوت Sequence و List در کاتلین
بهترین محیط های توسعه(IDE) برای جاوا
Open/Closed Principle در قوانین Solid
توابع در زبان برنامه نویسی Kotlin
6 Comments
Join the discussion and tell us your opinion.
دیدگاهتان را بنویسید لغو پاسخ
برای نوشتن دیدگاه باید وارد بشوید.
سلام
تشکر بابت مقاله هاتون من همیشه شما رو دنبال میکنم
ببخشید یک سوال داشتم در مورد ارتباط هایبرنت با اسپرینگ
چرا به صورت نرمال که از هایبرنیت استفادت میکنیم مشکلی نداره ولی وقت از اسپرینگ استفاده میکنیم باید حتما مدیریت هایبرنیت رو به دست اسپرینگ سپرد و وقتی به صورت معمول استفاده میکنم به اکسپشن بر میخورم؟
ایا راهی هست بشه از هایبرنیت به صورت معمول استفاده کرد ؟
تشکر
سلام دوست عزیز. ممنون از همراهیتون. Exception های O/R Mapping توسط Spring مدیریت میشه. تمام خطا های سطح Persistent Technology در قالب Data Access Exception بر می گردونه. چون این خطا به صورت Runtime Exception هست, برنامه نویس میتونه Catch Exception نکنه. به همین دلیل بهش Unchecked Object گفته میشه. پس وقتی از Spring استفاده میکنید, تمام این مدیریت با Spring هست. دقیقا چه Exception دریافت میکنین وقتی از Hibernate بدون Spring استفاده میکنید ؟
بفرمایید https://ideone.com/4A7JWk
سر این کد هم ارور میده
Configuration configuration = new Configuration().configure(“hibernate.cfg.xml”);
اینطور که توی Exception نوشته یه جایی توی کانفیگ xml مشکل وجود داره. اگر احتمالا این مقدار دارین :
<property name=”param”>true</property>
به این حالت تغییرش بدین :
</”property name=”param” value=”true>
طبق Exception شما Bean که تعریف کردین Child نمیگیره :
org.xml.sax.SAXParseException; lineNumber: 17; columnNumber: 23; cvc-complex-type.2.3: Element ‘session-factory’ cannot have character [children], because the type’s content type is element-only.
اگر بازم مشکلتون ادامه داشت در انجمن مطرحش کنین تا گام به گام بررسی کنیم.
میشه در مورد mysql کمی توضیح بدید
یا لینکی رو در اختیار بزارید؟
سلام دوست عزیز. در هفته جاری یک مقاله راجع به ارتباط mysql و جاوا منتشر میشه و در اون مقاله مقدماتی پیرامون کد های sql هم گفته میشه. ممنون از همراهیتون.