في العام الماضي ، لم أفهم القليل من مدى راحة وسريع سبرينج في القنوات المختلفة. لكنني لم أدرس بجد في ذلك الوقت. بعد كل شيء ، شعرت أنني لم أكن بارعا للغاية في الدعامات و springMVC. ومع ذلك ، بعد قراءة الكثير من المقدمات حول Springboot ، لم يكن الأمر صعبًا كما اعتقدت ، لذلك بدأت في الاستعداد لتعلم سبرينغ بوت. في وقت فراغي ، بعد قراءة قتال Springboot الفعلي وبعض مدونات Masters حول Springboot ، بدأت في كتابة أول مشروع Springboot الخاص بي. بعد أن تتمكن من تنفيذ وظائف CRUD في Springboot مع بعض التطورات البسيطة للواجهات على الطراز المريح ، تم إنشاء منشور المدونة هذا.
مقدمة إلى Springboot
Spring Boot هو إطار جديد يوفره الفريق المحوري. تم تصميمه لتبسيط عملية البناء والتطوير الأولية لتطبيقات الربيع الجديدة. يستخدم Framework طريقة محددة لتكوينه ، بحيث لم يعد المطورون بحاجة إلى تحديد تكوينات BoilerPlate.
ببساطة ، يمكنك تطوير مشروع بسرعة مع بعض الجرار وبعض التكوينات البسيطة.
إذا أردت ببساطة تطوير واجهة خارجية ، فأنا بحاجة فقط إلى الكود التالي.
يبدأ البرنامج الرئيسي Springboot
springbootapplicationpublicpublic application {public static void main (string [] args) {springapplication.run (application.class ، args) ؛ }}طبقة التحكم
RestControllerPublic Class HelloWorLdController {REquestMapping ("/Hello") Public String Index () {return "Hello World" ؛ }}بعد بدء البرنامج الرئيسي بنجاح ، اكتب طبقة التحكم ، ثم أدخل http: // localhost: 8080 // hello in the browser لعرض المعلومات.
أشعر أن استخدام Springboot لتطوير البرامج أمر بسيط للغاية!
في كلمات Springboot العملية:
لا يوجد تكوين هنا ، لا يوجد web.xml ، لا تعليمات بناء ، وحتى لا يوجد خادم تطبيق ، ولكن هذا هو التطبيق بأكمله. ستقوم Springboot بجميع الخدمات اللوجستية المطلوبة لتنفيذ التطبيق ، وتحتاج فقط إلى الحصول على رمز التطبيق.
قم بتطوير خدمة مريحة على أساس Springboot
قبل تطوير برنامج ، يجب عليك إجراء بعض الاستعدادات
إنشاء قاعدة بيانات `springboot` ؛ استخدم` springboot` ؛ جدول إسقاط إذا كان موجودًا `t_user` ؛ إنشاء جدول` t_user` (`id` int (11) not null auto_increment التعليق auto_increment = 12 charset الافتراضي = UTF8 ؛
أكثر جرة من سبرينغ بوت
SPRING-BOOT-Starter: الوحدة الأساسية ، بما في ذلك دعم التكوين التلقائي وتسجيله و YAML ؛
<Arnal> <roupiD> org.springframework.boot </rougiD> <intifactid> Spring-Boot-Starter-Parent </stifactid> <splection> 1.5.9 <Java.version> 1.7 </java.version> <Mebatis-spring-boot> 1.2.0 </mybatis-spring-boot> <Mysql-connector> 5.1.39 </lysql-connector> </sperperties> <ependencies> <StifactId> Spring-boot-Starter-Web </stifactid> </sependency> <reperence> <roupiD> org.springframework.boot </groupid> <StifactId> Spring-boot-starter-data-JPA </stifactid> </reperence> <reperence> <roupiD> org.springframework.boot </roucidid> </shintifactid> spring-boot-boot-devtools </stifactid> </speanical> <Groper> org.springframework.boot </groupId> <StifactId> Spring-boot-starter-test </artifactid> <scope> اختبار </scope> </premedency> <!-Boot MyBatis التبعية-> <sperency> <roupiD> org.mybatis.spring. <StifactId> mybatis-spring-boot-starter </shintifactid> <الإصدار> $ {mybatis-spring-boot} </version> </dependency> <!-MySQL Connection Driver-> <sperency> <roupiD> mysql </groupid> <sophy> $ {mysql-connector} </version> </sependency> </sependency> <build> <Plugins> <!-استخدم Springboot Plug-in لاستخدام تطبيق وحدة Dring-Boot-DevTools. عندما يتغير الملف في ClassPath ، سيتم إعادة تشغيله تلقائيًا! -> <reclosin> <rouckid> org.springframework.boot </rougiD> <StifactId> Spring-Boot-Maven-Plugin </suntifactid> <foction> <fork> True </fork> </foction> com.pancm.web - طبقة تحكم
com.pancm.dao - طبقة تشغيل البيانات داو
com.pancm.bean - فئة الكيان
com.pancm.bean.service - طبقة منطق الأعمال
التطبيق - فئة بدء تشغيل التطبيق
Application.Properties - ملف تكوين التطبيق ، سيتم قراءة التكوين تلقائيًا بواسطة بدء تشغيل التطبيق
بشكل عام ، نحتاج إلى بعض التكوينات المخصصة ، مثل تكوين تكوين اتصال JDBC ، حيث يمكننا استخدام Application.properties لتكوينه. يجب أن يخضع التكوين الفعلي لمصدر البيانات للجميع.
## تكوين مصدر البيانات spring.datasource.url = jdbc: mysql: // localhost: 3306/springboot؟ useUnicode = true & maracterencoding = utf8spring.datasource.username = rootspring.datasource.password = 123456spring.dataRce MyBatis Configuration# Configures as com.pancm.bean نقطة إلى مسار حزمة فئة الكيانات. mybatis.typealiasespackage = com.pancm.bean# تكوين حزمة mapper ضمن مسار classpath ، * يعني أنه سيتم مسح جميع ملفات XML. mybatis.mapperlocations = classpath/: mapper/*. xml
لقد حان الوقت تقريبًا للوصول إلى الكود الرئيسي.
نبدأ بكتابة فئة POJO ، المقابلة لجدول T_USER في قاعدة البيانات.
الرمز كما يلي
مستخدم الفئة العامة { / ** number* / private int id ؛ / ** الاسم*/ اسم السلسلة الخاصة ؛ / ** العمر*/ العصر الخاص المستخدم العام () {} فئة عامة مستخدم { / ** رقم* / private int id ؛ / ** الاسم*/ اسم السلسلة الخاصة ؛ / ** العمر*/ العصر الخاص المستخدم العام () {} // getter و setter remitt}في طبقة DAO السابقة ، يمكن لكل من Hibernate و MyBatis استخدام التعليقات التوضيحية أو ملفات تكوين Mapper. هنا نستخدم JPA الربيع لإكمال Crud.
يوضح:
هناك عمومًا طريقتان لتنفيذ تنفيذ CRUD وقاعدة البيانات:
الأول هو تكوين Mapper من XML.
النوع الثاني هو استخدام التعليقات التوضيحية ، insert ، @select ، update ، delete وغيرها من التعليقات التوضيحية. تستخدم هذه المقالة النوع الثاني
استيراد org.apache.ibatis.annotations.delete ؛ import org.apache.ibatis.annotations.insert ؛ import org.apache.ibatis.annotations.mapper ؛ import org.apache.ibatis.annotations.Result ؛ import org.apache.ibatis.annotations.results ؛ import Org.Apate.Ansion.Ansion.Ansion.Ansion.Ansion.Ansion org.apache.ibatis.annotations.update ؛ استيراد org.springframework.data.repository.query.param ؛ import com.pancm.bean.user ؛ mapperpublp interface userdao { / *** user data addal* / insert (" (#{id} ،#{name} ،#{Age}) ") void adduser (مستخدم المستخدم) ؛ / *** تعديل بيانات المستخدم*/ @update ("تحديث t_user set name =#{name} ، Age =#{Age} حيث id =#{id}") void updateUser (مستخدم المستخدم) ؛ / *** حذف بيانات المستخدم*/ delete ("حذف من t_user حيث id =#{id}") void deleteuser (int id) ؛ / *** استعلام معلومات المستخدم استنادًا إلى اسم المستخدم**////// يتخلى عن ("حدد المعرف ، الاسم ، العمر من T_USER") // إرجاع مجموعة نتائج خريطة الإرجاع ({ @result (property = "id" ، column = "id") ، @stringname ("stringname" ، stringname (stringname "، stringname (stringname (propert. اسم المستخدم)؛ / *** معلومات المستخدم استنادًا إلى معرف المستخدم**/// select ("حدد المعرف ، الاسم ، العمر من T_USER") المستخدم FindById (param ("id") int userId) ؛ / *** Query Information معلومات مستخدم استنادًا إلى عمر المستخدم*// select ("حدد المعرف ، الاسم ، العمر من T_USER حيث العمر = #{userage}") userbyage (int userage) ؛}الفهم الشخصي للشروح المستخدمة في هذه الواجهة:
MAPPER: أضاف هذا التعليق التوضيحي إلى الواجهة للإشارة إلى أن هذه الواجهة عبارة عن CRUD تم تنفيذها على أساس التعليقات التوضيحية.
النتائج: مجموعة نتائج الخريطة التي تم إرجاعها ، تمثل الخاصية حقول فئة المستخدم ، ويمثل العمود حقول قاعدة البيانات المقابلة.
Param: حقل لحالة SQL.
أدخل وتحديد وتحديث وحذف: توظيف وتعديل وحذف قواعد البيانات المقابلة.
هذا هو في الأساس نفس السبات و mybatis.
الرمز كما يلي:
واجهة
استيراد com.pancm.bean.user ؛/**** العنوان: uservice* الوصف: واجهة المستخدم* الإصدار: 1.0.0* Author pancm* date 9 يناير 2018*/واجهة عامة uservice {/*** إضافة المستخدم* param* return*/boolean adduser (مستخدم المستخدم) ؛ / ** * تعديل المستخدم * param user * regurn */ boolean updateUser (مستخدم المستخدم) ؛ / ** * حذف المستخدم * param id * return */ boolean deleteuser (int id) ؛ / *** معلومات المستخدم استنادًا إلى اسم المستخدم* param username*/ user findUserByName (string username) ؛ / *** معلومات المستخدم استنادًا إلى معرف المستخدم* param userid*/ user findUserById (int userId) ؛ / *** معلومات المستخدم استنادًا إلى معرف المستخدم* param userage*/ user findUserByage (int userage) ؛}فئة التنفيذ
استيراد org.springframework.beans.factory.annotation. الإصدار: 1.0.0* Author Pancm* date 9 يناير 2018*/ @servicepublic class orperviceImpl تنفذ المستخدمين {autowired private userdao userdao ؛ Override Public Boolean AddUser (مستخدم المستخدم) {boolean flag = false ؛ حاول {userDao.adduser (user) ؛ العلم = صحيح ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } العلم الإرجاع ؛ } Override Public Boolean UpdateUser (مستخدم المستخدم) {boolean flag = false ؛ حاول {userDao.upDateuser (user) ؛ العلم = صحيح ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } العلم الإرجاع ؛ } Override public boolean deleteuser (int id) {boolean flag = false ؛ حاول {userDao.Deleteuser (id) ؛ العلم = صحيح ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } العلم الإرجاع ؛ } Override Public User FindUserByName (string username) {return userDao.findbyName (username) ؛ } Override Public User FindUserById (int userId) {return userDao.findbyid (userId) ؛ } Override public user findUserByage (int userage) {return userDao.findByage (userage) ؛ }}تشبه طبقة التحكم إلى حد كبير springMVC ، لكنها أبسط بكثير من ذلك.
ما يلي فهمي الشخصي للتعليق التوضيحي حول طبقة التحكم:
RestController: سيتم إرجاع الطرق في الفئة الافتراضية بتنسيق JSON.
requestmapping: تكوين مسار الواجهة.
الطريقة: تنسيق الطلب.
requestparam: طلب المعلمات.
التنفيذ المحدد هو كما يلي:
استيراد org.springframework.beans.factory.annotation. org.springframework.web.bind.annotation.restController ؛ استيراد com.pancm.bean.user ؛ استيراد com.pancm.service.userservice ؛/***** العنوان: userrestController* الوصف:* واجهة تشغيل بيانات المستخدم* الإصدار: 1.0. "/API/user") الفئة العامة userrestController {Autowired private userviservice uservice ؛ requestmapping (value = "/adduser" ، method = requestMethod.post) AddUser boolean العامة (مستخدم المستخدم) {system.out.println ("ابدأ إضافة ...") ؛ إرجاع sterveservice.adduser (المستخدم) ؛ } @requestmapping (value = "/updateUser" ، method = requestMethod.put) public boolean updateUser (user user) {system.out.println ("ابدأ التحديث ...") ؛ إرجاع sterveservice.updateuser (user) ؛ } requestMapping (value = "/deleteuser" ، method = requestMethod.delete) Delete Boolean Public ( @requestparam (value = "username" ، required = true) int userid) {system.out.println ("start delete ...") ؛ إرجاع orperService.deleteuser (userId) ؛ } requestMapping (value = "/username" ، method = requestMethod.get) المستخدم العام findByUserName ( @requestparam (value = "username" ، مطلوب = true) username) {system.out.println ("start query ...") ؛ إرجاع orperService.finduserByName (اسم المستخدم) ؛ } requestMapping (value = "/userId" ، method = requestMethod.get) المستخدم العام findByUserId ( @requestparam (value = "userId" ، required = true) int userId) {system.out.println ("start query ...") ؛ إرجاع orperService.finduserById (userId) ؛ } @requestmapping (value = "/userage" ، method = requestMethod.get) المستخدم العام findByUserage ( @requestparam (value = "userage" ، required = true) int userage) {system.out.println ("start query ...") ؛ إرجاع orperService.finduserById (userage) ؛ }}SpringApplication عبارة عن فئة تستخدم لبدء تطبيقات الربيع من الطريقة الرئيسية.
بشكل افتراضي ، يقوم بالخطوات التالية:
1. إنشاء مثيل ApplicationContext مناسب (اعتمادًا على ClassPath).
2. قم بتسجيل A CommandLinePropertySource لاستخدام معلمات سطر الأوامر كخصائص الربيع.
3. قم بتحديث سياق التطبيق وتحميل جميع حبوب المفرد.
4. تفعيل جميع الفول.
ابدأ هذه الفئة مباشرة باستخدام Main ، وسيقوم Springboot بتكوينه تلقائيًا.
ملاحظة: حتى الآن ما زلت أعتقد أن هذا مذهل حقًا.
يتم شرح بعض التعليقات التوضيحية لهذا الفصل. :
SpringBootApplication: قم بتشغيل المسح الضوئي للمكون والتكوين التلقائي.
Mapperscan: تكوين حزمة فحص فئة واجهة Mapper
الرمز كما يلي:
استيراد org.mybatis.spring.annotation.mapperscan ؛ استيراد org.springframework.boot.springapplication ؛ استيراد org.springframework.boot.autoconfigure.springboTapplication ؛/***** العنوان* وصف: applyboot program* version: 1.0.0. 2018*/@springbootapplication@mapperscan ("com.pancm.dao") تطبيق الطبقة العامة {public static void main (string [] args) {// ابدأ tomcat المدمج وتهيئة بيئة Spring ومكونات Spring springapplication.run (application.class ، args) ؛ System.out.println ("البرنامج قيد التشغيل ...") ؛ }}بعد كتابة الرمز ، نجري اختبار الكود.
بعد بدء التطبيق ، استخدم أداة Postman لاختبار الواجهة.
نتائج الاختبار كما يلي:
يتم استخدام اختبار واحد فقط واختبار النشر هنا. تم اختبار الأساليب الفعلية ، لكنني أشعر أنه لا توجد حاجة لتثبيت الخريطة.
أضع المشروع على جيثب:
https://github.com/xuwujing/springboot
لخص
ما سبق هو مقدمة المحرر لتطوير خدمة مريحة تعتمد على Springboot لتنفيذ وظيفة إضافة وحذف وتعديل وفحص. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!