لقد قمنا ببناء تطبيق Springboot بسيط في المقالة السابقة ، والذي سيقدم استخدام SPRING-DATA-JPA لتشغيل قاعدة البيانات.
قم بإنشاء قاعدة بيانات MySQL جديدة ، حيث تسمى قاعدة البيانات SpringBoot ، وإنشاء جدول بيانات user_info ككائن الجدول لعملية مثالنا.
معلومات user_info هي كما يلي:
جدول إسقاط إذا كان موجودًا `user_info` ؛ قم بإنشاء جدول` user_info` (`id` int (11) not null auto_increment ،` username` varchar (255) default null ، `password` varchar (255) null ، chain` `id`)) earge = myisam auto_increment = 3 charset = utfault ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
بعد إنشاء قاعدة البيانات والجداول بنجاح ، ارجع إلى مشروعنا
الخطوة 0: أولاً ، قدم حزم التبعية Maven من MySQL و JPA:
<Rependency> <roupEd> mysql </rougeid> <StifactId> mysql-connector-java </shintifactid> </sopherency> <reperence> <roupiD> org.springframework.boot </groupid>
الخطوة الأولى هي تكوين معلومات اتصال قاعدة البيانات في ملف تكوين YML:
الربيع: DataSource: Class-Class-Name: com.mysql.jdbc.driver url: jdbc: mysql: // localhost: 3306/springboot؟ useUnicode = true & directionDing = utf-8 & usessl = false اسم المستخدم: كلمة مرور الجذر: 1011 jpa: show-sql:
الخطوة الثانية هي إنشاء فئة كيان يتوافق مع خريطة كيان جدول البيانات:
package com.javazhiyin ؛ import javax.persistence.entity ؛ import javax.persistence.generatedvalue ؛ import javax.persistence.generationtype ؛ import javax.persistence.id ؛/*** تم إنشاؤها بواسطة 57783 في 2018/7/4.*/s@entityp. GenerType.Identity) معرف عدد صحيح خاص ؛ اسم المستخدم الخاص بالسلسلة الخاصة ؛ كلمة مرور السلسلة الخاصة ؛ عدد صحيح عام getId () {معرف الإرجاع ؛ } public void setId (integer id) {this.id = id ؛ } السلسلة العامة getUserName () {return username ؛ } public void setusername (string username) {this.userName = username ؛ } السلسلة العامة getPassword () {return password ؛ } public void setPassword (سلسلة كلمة مرور) {this.password = password ؛ } userinfo () {}}الخطوة الثالثة هي إنشاء فئة مستودع وروث فئة JParePository:
حزمة com.javazhiyin ؛ استيراد org.springframework.data.jpa.repository.jparepository ؛/*** تم إنشاؤها بواسطة 57783 في 2018/7/4.
نرث هنا فئة JParePository ، التي تغلف بعض الطرق الأساسية لعمليات قاعدة البيانات. دعنا نتحقق من الطرق المتوفرة في JParePository من خلال الكود المصدر:
///// كود المصدر الذي تم إعادة إنشاؤه من ملف .class بواسطة intellij Idea // (مدعوم من fernflower decompiler) var1) ؛ <s يمتد t> itervable <s> saveall (itervable <s> var1) ؛ اختياري <T> findbyid (ID var1) ؛ Boolean aruesbyid (id var1) ؛ itelfable <T> bindall () ؛ ITERBLE <T> bindallbyid (ITERBLE <ID> var1) ؛ العد الطويل () ؛ void deleteByid (id var1) ؛ حذف باطل (t var1) ؛ void deleteall (itervable <؟ تمتد t> var1) ؛ void deleteall () ؛}
الخطوة 4: إنشاء وحدة تحكم جديدة لتنفيذ تشغيل قاعدة البيانات وحذفها وتعديلها والتحقق منها:
حزمة com.javazhiyin ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.web.bind.annotation. userInforePository userInForePository ؛ /*** تحقق* regurn*/getMapping (value = "/list") قائمة عامة <UserInfo> getUserList () {return userInforePository.findall () ؛ }/** * إضافة * param username * param password * return */postmapping (value = "/adduser") userinfo public adduser (requestparam ("username") username string ، requestparam ("password") user.setUserName (اسم المستخدم) ؛ user.setPassword (كلمة المرور) ؛ return userInforeFoSitory.save (user) ؛ }/** * Change * param id * param username * param password * return * /pputmapping (value = "upduser/{id}") updaterinfo public upduser ( @pathvariable ("id") integer id ، extermeram (username ") string username ، @requestparam (" userInfo () ؛ user.setId (id) ؛ user.setUserName (اسم المستخدم) ؛ user.setPassword (كلمة المرور) ؛ return userInforeFoSitory.save (user) ؛ }/*** delete* param id*/deletemapping (value = "deluser/{id}") public void deluser (pathvariable ("id") integer id) {userInfo user = new userInfo () ؛ user.setId (id) ؛ userInForeFoSitory.delete (user) ؛ }}لاختبار الرمز أعلاه ، نستخدم ساعي البريد لاختباره ، وهو مريح للغاية:
اختبار الاستعلام:
اختبارات جديدة:
تعديل الاختبار:
حذف الاختبار:
يمكننا أن نرى أنه يمكن اجتياز جميع الاختبارات. يستخدم Springboot عمليات الربيع-JPA لإضافة العمليات وحذفها وتعديلها والتحقق منها بالفعل مريحة للغاية.
عدة أسئلة:
1. ما هو مفهوم واستخدام التعليقات التوضيحية @generatedvalue في فئة رسم خرائط كيان الكائن؟
يتطلب JPA أن يكون لكل كيان كيان وأن يكون له مفتاح أساسي واحد فقط ، وسيقوم توضيح GeneratedValue بتوليد مفتاح أساسي محدد بشكل فريد لكيان.
توفر JPA أربع استراتيجيات أولية لتوليد المفاتيح ، والتي يتم تعريفها في تعداد فئة GenerationType ، وهي:
GenerType.table
استخدم جدول قاعدة بيانات معين لحفظ المفتاح الأساسي ، ويقوم محرك الثبات بإنشاء المفتاح الأساسي من خلال جدول محدد في قاعدة البيانات العلائقية. ميزة هذه الاستراتيجية هي أنها لا تعتمد على التنفيذ المحدد للبيئة الخارجية وقاعدة البيانات ، ويمكن نقلها بسهولة بين قواعد البيانات المختلفة. ومع ذلك ، نظرًا لأنه لا يمكن استخدام خصائص قاعدة البيانات بالكامل ، فلن يتم استخدامها أولاً.
GenerType.sequence
لا يتم دعم النمو الذاتي الرئيسي في بعض قواعد البيانات ، مثل Oracle. ويوفر آلية تسمى "التسلسل" لإنشاء مفاتيح أولية. في هذا الوقت ، يمكن استخدام GenerType.sequence كسياسة توليد المفاتيح الأساسية. أوجه القصور في هذه الاستراتيجية هي بالضبط عكس الجدول. نظرًا لأن بعض قواعد البيانات (Oracle ، PostgreSQL ، DB2) ، فإن هذه القواعد ، لا يتم تطبيق هذه الاستراتيجية عمومًا على قواعد البيانات الأخرى.
GenerType.Identity
الإستراتيجية الرئيسية للنمو الذاتي. عندما تقوم قاعدة البيانات بإدراج البيانات ، فإنها ستقوم تلقائيًا بتعيين القيم إلى المفتاح الأساسي. على سبيل المثال ، يمكن لـ MySQL إعلان "Auto_increment" عند إنشاء جدول لتحديد النمو الذاتي المفتاح الأساسي. يتم دعم هذه السياسة في معظم قواعد البيانات (قد تكون الأساليب المحددة أو الكلمات الرئيسية مختلفة) ، ولكن لا يزال هناك عدد قليل من قواعد البيانات التي لا تدعمها ، لذلك فهي أقل محمولة قليلاً.
GenerType.Auto
اترك استراتيجية توليد المفاتيح الأساسية لمحرك الثبات. سيختار محرك الثبات إحدى استراتيجيات توليد المفاتيح الأساسية الثلاثة المذكورة أعلاه بناءً على قاعدة البيانات. يتم استخدام استراتيجية توليد المفاتيح الأساسية هذه بشكل أكثر شيوعًا. نظرًا لأن استراتيجية التوليد الافتراضي لـ JPA هي GenerationType.auto ، يمكنك تحديد GeneredValue (الاستراتيجية = GenerationType.auto) بشكل صريح عند استخدام هذه الاستراتيجية أو generatedValue مباشرة.
2. ما هي الواجهات التي توفرها بيانات الربيع JPA وما هي الوظائف التي يمكن تنفيذها؟
الكود المصدري الذي يمكن تشغيله في هذه المقالة: https://github.com/javazhiyin/springboot/tree/master/bootdemo_01
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.