Springboot هي ترقية إلى SpringMVC ، وهو أمر أسهل في الترميز والتكوين والنشر والمراقبة.
الخدمات المجهرية
MicroServices هي بنية برمجية ناشئة تقسم تطبيقًا وخدمة فردية كبيرة إلى عشرات الخدمات المجهرية المدعومة. يمكن أن تجعل استراتيجية الخدمات المجهرية العمل أسهل ، والتي يمكن أن تقوس مكونًا واحدًا بدلاً من مكدس تطبيق كامل ، وبالتالي تلبية بروتوكولات مستوى الخدمة.
يوفر Spring مجموعة كاملة من المكونات للخدمات المجهرية - SPRINGCLOUND ، و spiRngboot هو الأساس.
برنامج Springboot الأول
برنامج التطوير المستخدم هنا هو Idea Intellij ، والتي لا تختلف كثيرًا عن Eclipse ، مع واجهة أكثر برودة ووظائف أكثر قوة ؛ تم تطوير Android Studio على أساس Intellij. لقد استخدمت Android Studio من قبل ، وواجهات كلاهما متشابهة تقريبًا.
موقع Intellij IDEA الرسمي: http://www.jetbrains.com/idea/
بعد تكوين Maven ، Tomcat ، JDK ، يمكنك استخدامه
صورة Alibaba Cloud للمستودع المركزي الذي تم تكوينه بواسطة Maven ، سرعة تنزيل حزم JAR على هذا العنوان ، من يعرف من يستخدمه!
setting.xml
.. <lirrors> <lirror> <Id> alimaven </id> <name> Aliyun Maven </mame> <Url> http://maven.aliyun.com/nexus/content/groups/public/ </url> <lirrorof> المركزية </mirrorof> </liror>. .
إنشاء مشاريع Springboot مع الفكرة
إصدار فكرتي: IDEAMEG IDEA 2016.3.1
هيكل المشروع هو:
ملف maven pom.xml الافتراضي للمشروع
pom.xml
<؟ XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 <soph> 0.0.1-snapshot </version> <packaging> جرة </packaging> <name> spiRngbootDemo </same> <speciped> مشروع تجريبي لـ Spring Boot </description> <parent> <rougiD> org.springframework.boot </roughid> <tring-boot-parent </atsiD> <REPERANTERPARPHAPT/> <!-LANEUP PARTER من المستودع-> </inpart> <ferties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <Project.reporting.outputing> uTF-8 </proport.reporting.outppouting> </properties> <ependencies> <redence> <roupiD> org.springframework.boot </rougeid> <intifactid> spring-boot-starter-web </stifactid> </redenced> <redenced> <roupiD> org.springframework.boot </groupid> <scope> test </scope> </sependency> </rependencies> <build> <uccedins> <roupiD> org.springframework.boot </rougiD> <Stifactid> Spring-boot-maven-plugin </shifactid> </sultin> </plugins> </build> </project
قم بتشغيل الطريقة الرئيسية لـ SpirngbootDemOapplication ويمكنك البدء في التشغيل.
للحصول على أساليب بدء التشغيل الأخرى ، يرجى الاطلاع على البرنامج التعليمي http://www.imooc.com/learn/767/
إخراج وحدة التحكم:
"C:/Program Files/Java/JDK1.8.0_91/Bin/Java" .... ____ __ __ /// ___'_ __ __ _ (_) _ ___ ___ / / / (() / ___ | '_ | .__ || | _ | | _ | | _/__ ، | / / / / / / / ============================================ ____ / = / _ / :: spring boot :: (v1.4.2.release) 2016-12-16 14: 56: 52.083 info 15872 --- Startup2016-12-16 14: 56: 52.215 info 15872 --- [Main] SbcettomCatembedDedServletContainer: بدأ Tomcat على المنفذ (s): 8080 (http) 2016-12-16 14: 56: 52.255 info 15872 --- [Main] المنفذ (المنفذ): 8080 (HTTP) 2016-12-16 14: 56: 52.255 INFO 15872 --- [MAIN] SBCETTOMCATEMBEDDEDSERVLETCONTAINER: بدأ Tomcat على الموانئ (MAIN]: 8080 (HTTP) 2016-12-16 14: 56: 52.255 INFO 15872 --- sbcettomCatemBedDedServletContainer: بدأ Tomcat على المنفذ (s): 8080 (http) 2016-12-16 14: 56: 52.255 info 15872 ---
من هنا يمكنك رؤية رقم منفذ tomcat. نظرًا لعدم وجود وحدة تحكم مخصصة ، لا يوجد عرض حتى الآن. دعنا ننشئ طريقة عرض يخرج Hello Springboot!.
قم بإنشاء HelloconTroller ، الموجود تحت حزمة وحدة التحكم
Hellocontroller.java
package com.jxust.controller ؛ استيراد org.springframework.web.bind.annotation.getMapping ؛ استيراد org.springframework.web.bind.annotation.restController ؛/** * ** * تم إنشاؤه بواسطة Peng * time: 2016/12/16 15:45 */refrontroller@ @requestmapping ("/hello") short says () {return "hello springboot!" ؛ }}@RestController تعليق توضيحي جديد بعد Spring4. اتضح أن إرجاع JSON يتطلب responseBody للتعاون مع Controller. الآن واحد هو أفضل اثنين
أدخل http: // localhost: 8080/hello في المتصفح لإخراج الجملة Hello Springboot!
تكوين خاصية مخصصة
يتم استخدام ملف Application.Properties
تكوين رقم المنفذ وبادئة الوصول
application.propertiesserver.port = 8081Server.Context-path =/springboot
بالإضافة إلى استخدام ملفات تنسيق .properties ، يمكنك أيضًا استخدام ملفات تكوين تنسيق .مية (موصى بها) ، وهو أسهل
application.yml
حذف ملف Application.Properties الأصلي
انتبه إلى التنسيق ، لا يمكن أن تكون المساحات مفقودة
احصل على قيمة السمة في ملف التكوين
يمكننا أيضًا تكوين البيانات في ملف التكوين والحصول عليها في وحدة التحكم ، على سبيل المثال:
application.yml
الخادم: المنفذ: 8081 مسار السياق: /SpringBootName: Xiaopang
HelloconTroller يحصل على القيمة في ملف التكوين
Hellocontroller.java
.... @restControllerPublic Class HelloconTroller {value ("$ {name}") اسم السلسلة الخاصة ؛ requestmapping (value = "/hello" ، method = requestMethod.get) seker public string () {return name ؛ }} القيمة التي تم إرجاعها للاسم
تنويع طرق تكوين القيمة في ملفات التكوين
يمكن أن تكون قيم ملف التكوين متعددة أو مجتمعة ، مثل:
application.yml
الاسم: Xiaopang العمر: 22 أو الاسم: Xiaopang العمر: 22-content: "الاسم: $ {name} ، العمر: $ {Age}" أو الخادم: المنفذ: 8081 مسار السياق: /springbootperson: الاسم: Xiaopang العمر: 22التكوين الأولين هما بنفس الطريقة للحصول على القيم ، ولكن بالنسبة لهذه الطريقة ، يكون لدى الشخص خصائصان مقابلان ، والتي يجب التعامل معها بهذه الطريقة.
personproperties.java
package com.jxust ؛ استيراد org.springframework.boot.context.properties.ConfigurationProperties ؛ استيراد org.springframework.stereotypee.component ؛/** * تم إنشاؤه بواسطة privail * time: 2016/12/16 عصر عدد صحيح خاص ؛ السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } integer getAge () {return Age ؛ } public void setage (integer age) {this.age = age ؛ }}ALT+إدراج مفتاح اختصار مفتاح لإنشاء getter و setter
يحتاج pom.xml إلى إضافة التبعيات التالية للتعامل مع التحذيرات
<Rependency> <roupeD> org.springframework.boot </rougiD> <intifactid> Spring-Boot-Configuration-Processor </stifactid> <اختياري> صحيح </experenal> </respency>
Hellocontroller.java
package com.jxust.controller ؛ import com.jxust.personproperties ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.web.bind.annotation.antquestmapping ؛ import org.springframework.webind.ynotation org.springframework.web.bind.annotation.restController ؛/** * تم إنشاؤه بواسطة Peng * الوقت: 2016/12/15 20:55 */ @restControllerpublic Class HelloconTroller {Autowired perfectProperties ؛ requestmapping (value = "/hello" ، method = requestMethod.get) sexer sexer string () }}حول تطبيق ملف التكوين. مجموعة مجموعات متعددة من التكوينات
على غرار تدويل ملفات IL8N ، I18N_EN_US.Properties و I18N_ZH_CN.Properties
هذا يمكن أن يحل إحراج تعديلات التكوين المتكررة
الأمر متروك لملف التكوين Application.YML لتحديد ملف التكوين الذي يجب استخدامه.
application.yml
الربيع: ملفات تعريف: نشطة: أ
application-a.yml
الخادم: المنفذ: 8081 مسار السياق: /SpringBootperson: الاسم: Xiaoleiag: 21
التطبيق- B.YML
الخادم: المنفذ: 8081 مسار السياق: /Springbootperson: الاسم: Xiaopang العمر: 22
يضيف Springboot ويحذف وتغييرات للتحقق من الأمثلة
بنية المشروع كاملة
استخدام وحدة التحكم
استخدام وحدة التحكم
Controller CHU يتولى طلب HTTP
@RestController تعليق توضيحي جديد بعد Spring4 ، اتضح أن إرجاع JSON يتطلب responsebody للتعاون مع Controller
requestmapping تكوين تعيين عنوان URL
طلبات نمط الراحة
للتعليقات على الطرق في وحدة التحكم
requestmapping (value = "/hello" ، method = requestMethod.get) requestMapping (value = "/hello" ، method = requestMethod.post) @requestmapping (value = "/hell
Springboot يبسط التعليق التوضيحي أعلاه
getMapping (value = "/girls") postmapping (value = "/girls") putmapping (value = "/girls/{id}") deletemapping (value = "/girls/{id}")يحتاج المتصفح إلى إرسال الطلبات بطرق مختلفة ، ويمكنك تثبيت المكون الإضافي HTTPrequester ، ويمكن للمتصفح Firefox البحث مباشرة عن هذا المكون للتثبيت.
الربيع data-jpa
JPA الاسم الكامل Java Prosistence API.JPA يصف علاقة رسم الخرائط لجدول علاقة الكائنات من خلال التعليق التوضيحي JDK 5.0 أو XML ، ويستمر في كائنات الكيانات الجارية في قاعدة البيانات.
Hibernate3.2+، Toplink 10.1.3 و OpenJPA يوفرون تطبيق JPA.
قم بإنشاء قاعدة بيانات MySQL باستخدام JPA
يضيف pom.xml تبعيات JPA و MySQL
<Rependency> <roupeD> org.springframework.boot </groupId> <insifactid> Spring-boot-starter-data-JPA </stifactid> </sependency>
تكوين JPA وقاعدة البيانات
application.yml
الربيع: ملفات تعريف: نشطة: A DataSource: Driver-Class-Name: com.mysql.jdbc.driver url: jdbc: mysql: //127.0.0.1: 3306/db_person usernam
التنسيق مهم
تحتاج إلى إنشاء قاعدة بيانات DB_Person يدويًا
إنشاء فئة كيان شخص يتوافق مع جدول البيانات
شخص
package com.jxust.entity ؛ استيراد javax.persistence.entity ؛ استيراد javax.persistence.generatedvalue ؛ استيراد javax.persistence.id ؛/** * تم إنشاؤه بواسطة peng * الوقت: 2016/12/16 17:56 */ @intitypublic person { @ @generatedvalue ideger ide. اسم السلسلة الخاصة ؛ عصر عدد صحيح خاص ؛ // يجب أن يكون المُنشئ شخصًا عامًا () {} العدد العام getId () {return id ؛ } public void setId (integer id) {this.id = id ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } integer getAge () {return Age ؛ } public void setage (integer age) {this.age = age ؛ }}بعد تشغيل المشروع ، تحقق من قاعدة البيانات وسيتم إنشاء شخص الجدول تلقائيًا
mysql> استخدم db_person ؛ database changeMysql> desc شخص ؛+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | فارغ | |+--------------------------+---------+----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
بعد ذلك ، يمكنك إضافة جدول الشخص وحذفه وتعديله والتحقق منه
إنشاء وحدة تحكم personcontroller.java
قم أولاً بإنشاء واجهة personrepository ، الموجودة تحت حزمة DAO. يستدعي PersonController الطريقة الموروثة من JParePository لتحقيق التفاعل مع قاعدة البيانات.
تشبه وظيفة هذه الواجهة personrepository وظيفة واجهة طبقة DAO في إطار SSM ؛ في إطار SSM ، تنفذ طبقة الخدمة بشكل غير مباشر عبارات SQL المقابلة في ملف تعيين قاعدة بيانات MyBatis (.xml) من خلال هذه الواجهة ، وتنفيذ عمليات إضافة قاعدة البيانات وحذفها وتعديلها والبحث عنها. (Mapper يقوم تلقائيًا بتنفيذ واجهة DAO)
personrepository.java
package com.jxust.dao ؛ import com.jxust.entity.person ؛ استيراد org.springframework.data.jpa.repository.jparepository ؛/** * تم إنشاؤه بواسطة peng * الوقت: 2016/12/16 18:07 */public interface personrepository تمتد
personcontroller.java
package com.jxust.controller ؛ import com.jxust.dao.personRepository ؛ import com.jxust.entity.person ؛ import org.springframework.beans.factory.annotation.autowired ؛ import org.springframework.web.bind.annotation.getmapping ؛ org.springframework.web.bind.annotation.restController ؛ استيراد java.util.list ؛/** * تم إنشاؤه بواسطة peng * الوقت: 2016/12/16 18:04 */ @restControllerPublic personcontroller {autowired personrepository ؛ getMapping (value = "/person") قائمة خاصة <Person> personlist () {return personrepository.findall () ؛ }}أضف قطعتين من البيانات إلى قاعدة البيانات
mysql> حدد * من شخص ؛+---+-----+------+| معرف | العمر | الاسم |+----+-------+-------+| 1 | 23 | شارلوت || 2 | 21 | Ma Dongmei |+----+-------+------+2 صفوف في المجموعة (0.04 ثانية)
ابدأ طلب تنفيذ المشروع http: // localhost: 8081/springboot/person
بيانات SQL الإخراج بواسطة وحدة التحكم:
hibernate: حدد person0_.id as id1_0_ ، person0_.age as Age2_0_ ، person0_.name as name3_0_ from person0_
طرق أخرى لإضافة وحذف وتعديل وفحص
personcontroller.java
..../** * أضف شخصًا * * param اسم * param age * @return */postmapping (value = "/"/person ") prinical personadd ( @requestparam (" name ") اسم السلسلة ، requestparam (" العمر ") person.setName (name) ؛ person.setage (العمر) ؛ إرجاع personrepository.save (شخص) ؛ }/** * Query A Profle * * param id * return */getMapping (value = "/person/{id}") public personfindone (pathvariable ("id") integer id) {return personrepository.findone (id) ؛ }/** * حذف شخص * * param id */deletemapping (value = "/person/{id}") public persondelete (pathvariable ("id") integer id) {personrepository.delete (id) ؛ }/** * تحديث شخص * * param معرف * param name * param age * @return * /putMapping (value = "/person/{id}") personupdate personupdate ( @pathvariable ("id") integer id ، @eferrequestparam ("name") string ، @requestparam ( person.setId (id) ؛ person.setName (name) ؛ person.setage (العمر) ؛ إرجاع personrepository.save (شخص) ؛ }طريقة الطلب المقابلة هي:
الاستعلام عن مستخدم:
أضف مستخدمًا
حذف مستخدم (لا توجد قيمة إرجاع)
تحديث المستخدم
لذلك ، هل يمكنني التحقق بناءً على العمر؟ الجواب هو أنه غير ممكن بعد
من عبارات وحدة التحكم ، يمكن ملاحظة أن عبارات SQL يتم الاستعلام عنها بناءً على المعرف
hibernate: حدد person0_.id as id1_0_0_ ، person0_.age as Age2_0_0_ ، person0_.name as name3_0_0_ من شخص person0_ where person0_.id =؟
الاستعلام حسب العمر
إضافة طريقة إلى personrepository findByage (عصر عدد صحيح)
الواجهة العامة PersonRepository يمتد JParePository <شخص ، integer> { / ** * Query حسب العمر * الأسلوب الاسم الثابت findByage * param age * return * / public list <Person> findByage (integer age) ؛}أضف طريقة الاستعلام المقابلة إلى personcontroller
..../** * Query by Age * param age * regurn */getMapping (value = "/age/age/age}") list public list <Person> personlistbyage (pathVariable ("Age") integer age) {return personrepository.findbyage (Age) ؛ }أدخل طلب http: // localhost: 8081/springboot/person/age/23 للاستعلام عن الشخص الذي يبلغ من العمر 23 عامًا
تقوم وحدة التحكم بإخراج بيان SQL:
Hibernate: حدد person0_.id as ID1_0_ ، person0_.age as Age2_0_ ، person0_.name as name3_0_ من شخص person0_ أين الشخص 0_.age =؟
إدارة المعاملات
يتم تنفيذ بيانين SQL بطريقة واحدة في نفس الوقت. من أجل منع بيان SQL واحد من التنفيذ بنجاح وبيان SQL الآخر من الفشل ، يتم تقديم إدارة المعاملات. مطلوب التعليق التوضيحي المعاملة transactional لإضافة الطريقة.
تضمن المعاملات سلامة واتساق بيانات قاعدة البيانات
PropoSonservice.Java
في personcontroll
package com.jxust.service ؛ استيراد com.jxust.dao.personRepository ؛ استيراد com.jxust.entity.person ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.stereotype.service ؛ 2016/12/16 19:30 */ @servicepublic class prophonservice {autowired personrepository personrepository ؛ / *** اختبار إدارة المعاملات* تنجح قطعتان من البيانات في نفس الوقت ، أو لم تنجح في نفس الوقت* ضمان سلامة واتساق بيانات قاعدة البيانات*/ transactional public void inserttwo () {persona persona = new person () ؛ persona.setName ("qiuya") ؛ persona.setage (19) ؛ personrepository.save (persona) ؛ system.out.print (1/0) ؛ شخص الشخص = شخص جديد () ؛ personb.setName ("mengtejiao") ؛ personb.setage (25) ؛ personrepository.save (personb) ؛ }}اختبار في ER
... AUTOWIRED PERMONSEREVICE PERSONSERVICE ؛ .../*** اختبار المعاملات*/postmapping ("/person/two") Public void persontwo () {personvice.inserttwo () ؛ }إعادة تشغيل المشروع وتنفيذ طريقة Post Method http: // localhost: 8081/springboot/person/اثنين
لم تتم إضافة الجزء الأول من البيانات إلى قاعدة البيانات ، مما يشير إلى وجود إدارة معاملات
COMMUNT Personcontroller.java ، personrepository.java و pom.xml
personcontroller.java
package com.jxust.controller ؛ استيراد com.jxust.dao.personRepository ؛ استيراد com.jxust.entity.person ؛ استيراد com.jxust.service.personservice ؛ استيراد org.springframework.beans.factory.annotation.autowired java.util.list ؛/** * تم إنشاؤه بواسطة Peng * الوقت: 2016/12/16 18:04 */ @RestControllerPublic class personcontroller {autowired personrepository personrepository ؛ Autowired Performerservice Propersencer ؛ /** * Query قائمة جميع الموظفين * * regurn */getMapping (value = "/person") قائمة خاصة <Person> personlist () {return personrepository.findall () ؛ }/** * أضف شخصًا * * param اسم * param age * @return */postmapping (value = "/"/person ") profular personadd (requestparam (" name ") اسم السلسلة ، requestparam (" العمر ") person.setName (name) ؛ person.setage (العمر) ؛ إرجاع personrepository.save (شخص) ؛ }/** * Query A Profle * * param id * return */getMapping (value = "/person/{id}") public personfindone (pathvariable ("id") integer id) {return personrepository.findone (id) ؛ }/** * حذف شخص * * param id */deletemapping (value = "/person/{id}") public persondelete (pathvariable ("id") integer id) {personrepository.delete (id) ؛ }/** * تحديث شخص * * param معرف * param name * param age * @return * /putMapping (value = "/person/{id}") personupdate personupdate ( @pathvariable ("id") integer id ، @eferrequestparam ("name") string ، @requestparam ( person.setId (id) ؛ person.setName (name) ؛ person.setage (العمر) ؛ إرجاع personrepository.save (شخص) ؛ }/** * Query by Age * param age * regurn */getMapping (value = "/age/age/{Age}") list public <Person> personlistbyage (pathvariable ("age") }/*** اختبار المعاملات*/postmapping ("/person/two") Public void persontwo () {personvice.inserttwo () ؛ }}personrepository.java
package com.jxust.dao ؛ import com.jxust.entity.person ؛ استيراد org.springframework.data.jpa.repository.jparepository ؛ استيراد java.util.list ؛/** * تم إنشاؤه بواسطة peng * الوقت: 2016/12/16 18:07 */public interface استعلام حسب العمر * اسم الطريقة الثابتة * param age * @return */ list public list <Person> findByage (integer age) ؛}
pom.xml
<؟ XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 <soph> 0.0.1-snapshot </version> <packaging> جرة </packaging> <name> spiRngbootDemo </same> <speciped> مشروع تجريبي لـ Spring Boot </description> <parent> <rougiD> org.springframework.boot </roughid> <tring-boot-parent </atsiD> <REPERANTERPARPHAPT/> <!-LANEUP PARTER من المستودع-> </inpart> <ferties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <Project.reporting.outputing> uTF-8 </proport.reporting.outppouting> </properties> <ependencies> <redence> <roupiD> org.springframework.boot </rougeid> <intifactid> spring-boot-starter-web </stifactid> </redenced> <redenced> <roupiD> org.springframework.boot </groupid> <scope> test </scope> </sependency> <redency> <roupiD> org.springframework.boot </rougiD> <StifactId> spring-boot-configuration-processor </suntifactid> </incental> true </perican <StifactId> Spring-boot-starter-data-JPA </stifactid> </reperence> <reperence> <roupiD> mysql </roughid> <terifactid> mysql-connector-java </shintifactid> </reperency> </reperency> <roupringid> org.springframework.boot </rougiD> <StifactId> Spring-boot-maven-plugin </stifactid> </spliexin> </sultiins> </build> </project>
لخص
ما سبق هو شرح مفصل لإضافة قاعدة بيانات intellij idea springboot ، والحذف ، والتعديل والبحث أمثلة البحث التي أدخلها المحرر. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!