مقدمة
تشرح هذه المقالة كيفية استخدام Kotlin ضمن أساسيات SPRING BOOT2 ، ودمجها بسلاسة ومزج تمامًا. من أجل جعل القراء أكثر دراية بالسكر النحوي لـ Kotlin ، سيتحدث المؤلف عن ميزات Kotlin الجديدة والسكر النحوي في العديد من المقالات المستقبلية. لن أقول الكثير أدناه ، دعنا نلقي نظرة على المقدمة التفصيلية
تعديل ملف POM وإضافة تبعيات التمهيد الربيعي.
<Arnal> <roupiD> org.springframework.boot </rougiD> <insifactid> Spring-boot-starter-parent </shintifactid> <الإصدار> 2.0.2.Release </version> <riseidpath/> </parent> <ependencies> <StifactId> Spring-Boot-Starter </stifactid> </sependency> <redency> <roupiD> org.springframework.boot </groupiD> <StifactId> spring-boot-starter-web </stifactid> </enperenc <StifactId> Spring-Boot-Starter-JDBC </stifactid> </reperence> </
بعد ذلك مباشرة ، نحتاج إلى إضافة تبعيات MySQL.
<Rependency> <roupEd> mysql </rougiD> <StifactId> mysql-connector-java </stifactid> <الإصدار> 5.1.35 </version> </repreadency> <redency> <roupiD> com.alibaba </rougeid>
أخيرًا ، أضف التبعية Kotlin.
<Rependency> <roupeD> org.jetbrains.kotlin </rougiD> <StifactId> kotlin-stdlib-jdk8 </shintifactid> </sependency> <reperence> <roupid> org.jetbrains.kotlin </rougiD> <roupl> org.jetbrains.kotlin </groupId> <StifactId> kotlin-stdlib </shintifactid> </preminal>
لاحظ أنه في Kotlin ، لا تحتوي فئة البيانات على مُنشئ بدون معلمة افتراضيًا ، ويتخلف عن فئة البيانات الافتراضية إلى النوع النهائي ولا يمكن مورراها. لاحظ أنه إذا استخدمنا وضع SPRING + KOTLIN ، فقد يواجه استخدام AUTOWARED هذه المشكلة. لذلك ، يمكننا إضافة NOARG لإنشاء مُنشئين بدون معلمات كفئة مشروحة. استخدم allopen لإزالة النهائي للفئة المشروحة والسماح للميراث.
<rector> <TrifactId> kotlin-maven-plugin </artifactId> <roupiD> org.jetbrains.kotlin </groupId> <الإصدار> $ {kotlin <irod> <vish> test-compile </soph> </execution> </execution> </execution> </execution> </eversion> <ependencies> <reperation> <roupiD> org.jetbrains.kotlin </rougiD> <StifactId> kotlin-maven-noarg </artiveTid> <Gropled> org.jetbrains.kotlin </rougiD> <StifactId> kotlin-maven-alopen </stifactid> <sophy> $ {kotlin.version} </version> </repreadency> </repreadencies> </sultiin>في هذه المرحلة ، تم تكوين بيئة التبعية الخاصة بنا في Maven تقريبًا. للحصول على رمز المصدر الكامل ، يمكنك الرجوع إلى مستودع GitHub في نهاية المقالة.
باستخدام تكوين SPRING BOOT الافتراضي ، لا تحتاج إلى إنشاء مصدر بيانات و JDBCTEMPLATE BEAN.
تكوين معلومات مصدر البيانات في SRC/Main/Resources/Application.Properties.
spring.datasource.driver-class-name = com.mysql.jdbc.driverspring.datasource.url = jdbc: mysql: // localhost: 3307/springboot_dbspring.datasource.username = rootspring.datasource.password = root
تكوين معلومات مصدر البيانات في SRC/Main/Resources/Config/Source.Properties.
# mysqlsource.driverClassName = com.mysql.jdbc.driversource.url = jdbc: mysql: // localhost: 3306/springboot_dbsource.username = rootsource.password = root
هنا ، قم بإنشاء DataSource و JDBCtemplate.
@configuration @enableTransActionManagement @propertysource (value = *arrayof ("classpath: config/source.properties")) فتح الفئة beanconfig {autowired private lateinit var env: eversitybean open fun dataSource (): datasource ENV !! jdbctemplate (): jdbctemplate {val jdbctemplate = jdbctemplate () jdbctemplate.datasource = datasource () return jdbctemplate}}قم أولاً بتهيئة البرنامج النصي SQL المطلوب.
قم بإنشاء قاعدة بيانات /*! 32312 إذا لم يكن موجودًا* /`SpringBoot_DB` /*! 40100 مجموعة الأحرف الافتراضية UTF8* /؛ استخدم `springboot_db` ؛ جدول إسقاط إذا كان موجودًا "t_author` ؛ قم بإنشاء جدول `t_author` (` id` bigint (20) غير موقّع غير موقّع auto_increment تعليق "معرف المستخدم" ، `real_name` varchar (32) وليس التعليقات الخالية" اسم المستخدم "،` nick_name` varchar (32) null التعليق "مجهول الهوية" ، مفتاح أساسي (`id`)) محرك = 1 antf ؛
فئة مؤلف {var id: long؟ = null var realname: string؟ = null var لقب: سلسلة؟ = null} interface Authordao {fun add (المؤلف: المؤلف): int fun update (المؤلف: المؤلف): int fun delete (id: long): int fundauthor (id: long): uptor؟ FundauthorList (): قائمة <uption>}دعنا نحدد فئة التنفيذ والوصول إلى البيانات من خلال jdbctemplate.
repositoryopen class authordaoimpl: Authordao {autowired private fathinit var jdbctemplate: jdbctemplate override fun add (uptor: intor): int {return jdbctemplate.update ("insert in t_author (real_name ، nick_name) desure (؟) تحديث (المؤلف: المؤلف): int {return jdbctemplate.update ("تحديث t_author تعيين real_name =؟ ، nick_name =؟ أين id =؟ } تجاوز findauthor المرح (معرف: طويل): مؤلف؟ {val list = jdbctemplate.query <uption> ("SELECT * from t_author where id =؟" ، arrayof <ho> (id) ، BeanPropertyRowMapper (uptor :: class.java)). } تجاوز FundauthorList (): قائمة <Tepher> {return jdbctemplate.query ("SELECT * from t_author" ، arrayof () ، BeanPropertyRowMapper (effect :: class.java))}}}}}}}}}}}} Interface AuthorService {fun add (المؤلف: المؤلف): int fun update (المؤلف: المؤلف): int fun delete (id: long): int fundauthor (id: long): uptor؟ FundauthorList (): قائمة <uption>}دعونا نحدد فئة التنفيذ. تدعو طبقة الخدمة طريقة طبقة DAO. هذا روتين نموذجي.
service ("AuthorService") المفتوح upplusterviceImpl: AuthorService {autowired private lateinit var authordao: Authordao override fun update (upluat: int {return this.authordao.update (upert)} override fun add (upumn): int {return this.authorda {return this.authordao.delete (id)} تجاوز findauthor متعة (معرف: طويل): مؤلف؟ {return this.authordao.findauthor (id)} تجاوز FundauthorList (): قائمة <upher> {return this.authordao.findauthorlist ()}}لإظهار التأثير ، نحدد أولاً مجموعة بسيطة من واجهات API المريحة للاختبار.
@RESTCONTROLLER @requestMapping (value = "/"/upitors ") class upluctController {Auutowired private lateinit var upervorservice: AuthorService/*** Query Query List*/requestmapp this.authorservice.findauthorlist () val param = hashmap <string ، any> () param ["total"] = upervileList.size param ["rows"] = upervilels return param}/** الطلب: httpservletrequest): المؤلف {return AuthorService.Findauthor (userId) ؟: رمي RunTimeException ("خطأ الاستعلام")} / *** طريقة جديدة* / @requestmapping (method = [requestMethod.post] = jsonobject.getString ("real_name") val lobearame = jsonobject.getString ("nick_name") val uplut = upult.id. RunTimeException ("خطأ جديد")}}/*** طريقة التحديث*/ @requestmapping (value = "/{userId: // d+}" ، method = [requestMethod.put]) fun update (pathvariable userId: jsonobject.getString ("real_name") val lobearame = jsonobject.getString ("nick_name") حاول {if (uperm! الطريقة*/ @requestmapping (value = "/{userId: // d+}" ، method = [requestMethod.delete]) متعة delete (pathvariable userId: long) {ther {this.authorservice.delete (userId)} catch (e: at strain)أخيرًا ، ندير البرنامج من خلال SpringKotlinapplication.
springbootapplication (scanbasepackages = ["com.lianggzone.demo.kotlin"]) المفتوحة springkotlinapplication {المرح الرئيسي (args: array <string>)هنا ، يوصي المؤلف عميل REST لمحرر IDEA. تم دعم عميل REST في Idea في إصدار Intellij Idea 2017.3 ، وقد أضاف العديد من الميزات في الإصدار 2018.1. في الواقع ، إنه مكون إضافي عميل HTTP لفكرة Intellij. شاهد مقالًا سابقًا آخر من قبلي: اختبار مهارات جديدة بسرعة لواجهات API
### قائمة مستخدم الاستعلام احصل على http: // localhost: 8080/upervorsaccept: application/jsoncontent-type: application/json ؛ charset = utf-8 ### query Quary Information get http: // localhost: 8080/uptors/15accept: application/jsoncontent-type: application ؛ http: // localhost: 8080/upervorscontent-type: application/json {"user_id": "21" ، "real_name": "liang guizhao" ، "nick_name": "liang guizhao"} ### method plit http: // localhost: 8080/pupple. "real_name": "Lianggzone" ، "Nick_name": "Lianggzone"} ### حذف طريقة حذف http:.من خلال الحالة البسيطة أعلاه ، وجدنا أنه من السهل جدًا دمج Kotlin بواسطة Spring Boot وتبسيط عملية البناء والتطوير الأولية لتطبيقات الربيع. من أجل جعل القراء أكثر دراية بالسكر النحوي لـ Kotlin ، سيتحدث المؤلف عن ميزات Kotlin الجديدة والسكر النحوي في العديد من المقالات المستقبلية.
رمز المصدر
أمثلة ذات صلة رمز كامل: Spring-Kotlin-Samples (التنزيل المحلي)
حسنًا ، ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون لمحتوى هذه المقالة قيمة مرجعية معينة لدراسة أو عمل الجميع. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل. شكرا لك على دعمك إلى wulin.com.