คำนำ
บทความนี้อธิบายวิธีการใช้ Kotlin ภายใต้พื้นฐานของ Spring Boot2 และรวมเข้าด้วยกันและผสมผสานอย่างลงตัว เพื่อให้ผู้อ่านคุ้นเคยกับน้ำตาลวากยสัมพันธ์ของ Kotlin ผู้เขียนจะพูดคุยเกี่ยวกับคุณสมบัติใหม่ของ Kotlin และน้ำตาลวากยสัมพันธ์ในบทความในอนาคตหลายบทความ ฉันจะไม่พูดมากขึ้นด้านล่างเรามาดูการแนะนำรายละเอียด
แก้ไขไฟล์ POM และเพิ่มการพึ่งพาการบูตสปริง
<carent> <roupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Parent </artifactid> <version> 2.0.2.Release </เวอร์ชัน> <inelative path/> </parent> <ArtIfactId> Spring-Boot-Starter </ArtifactId> </serdency> <การพึ่งพา> <roupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Web </artifactid> <ArtIfactId> Spring-Boot-Starter-JDBC </artifactId> </dependency> </dependencies>
หลังจากนั้นเราต้องเพิ่มการพึ่งพา MySQL
<Eperency> <sderctId> MySQL </groupId> <ratifactId> mysql-connector-java </artifactid> <persion> 5.1.35 </version> </predency> <predency> <roupid> com.alibaba </groupid>
ในที่สุดเพิ่มการพึ่งพา Kotlin
<การพึ่งพา> <roupId> org.jetbrains.kotlin </groupId> <ratifactid> Kotlin-stdlib-Jdk8 </artifactid> </การพึ่งพาการพึ่งพา> <predency> <roupid> org.jetbrains.kotlin </groupid> <RoupID> org.jetbrains.kotlin </groupId> <ratifactid> Kotlin-stdlib </artifactId> </dependency>
โปรดทราบว่า ใน Kotlin คลาสข้อมูลไม่มีตัวสร้างพารามิเตอร์โดยค่าเริ่มต้นและค่าเริ่มต้นของคลาสข้อมูลเป็นประเภทสุดท้ายและไม่สามารถสืบทอดได้ โปรดทราบว่าหากเราใช้โหมด Spring + Kotlin การใช้ @autowared อาจประสบปัญหานี้ ดังนั้นเราสามารถเพิ่ม noarg เพื่อสร้างตัวสร้างพารามิเตอร์ที่ไม่มีพารามิเตอร์เป็นคลาสที่มีคำอธิบายประกอบ ใช้ allopen เพื่อลบขั้นสุดท้ายสำหรับคลาสที่มีคำอธิบายประกอบและอนุญาตการสืบทอด
<Plugin> <RatIfactId> Kotlin-Maven-Plugin </artifactid> <roupId> org.jetbrains.kotlin </groupId> <cersion> $ {kotlin.version} </เวอร์ชัน> <cencutions> <เป้าหมาย> <goal> ทดสอบการคอมไพล์ </goal> </เป้าหมาย> </Execution> </Execution> </Execution> </Execution> <การพึ่งพา> <การพึ่งพา> <roupId> org.jetbrains.kotlin </groupid> <RoupID> org.jetbrains.kotlin </groupId> <ratifactid> Kotlin-Maven-Alopen </artifactid> <cersion> $ {kotlin.version} </version>ณ จุดนี้สภาพแวดล้อมการพึ่งพาของ Maven ของเราได้รับการกำหนดค่าคร่าวๆ สำหรับซอร์สโค้ดที่สมบูรณ์คุณสามารถอ้างถึงที่เก็บ GitHub ได้ในตอนท้ายของบทความ
การใช้การกำหนดค่าเริ่มต้นของสปริงบูตคุณไม่จำเป็นต้องสร้างแหล่งข้อมูลและ 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.
กำหนดค่าข้อมูลแหล่งข้อมูลใน 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
@การกำหนดค่า @enableTransactionManagement @propertySource (value = *arrayof ("classpath: config/source.properties")) เปิดคลาส beanconfig {@autowired private lateinit var env: สภาพแวดล้อม env !!. getProperty ("source.driverclassname"). trim () dataSource.url = env.getProperty ("source.url"). trim () datasource.username = env.getProperty ("username") @Bean Open Fun JDBCTEMPLATE (): JDBCTEMPLATE {VAL JDBCTEMPLATE = JDBCTEMPLATE () JDBCTEMPLATEครั้งแรกเริ่มต้นสคริปต์ SQL ที่ต้องการ
สร้างฐานข้อมูล /*! 32312 หากไม่มีอยู่* /`springboot_db` /*! 40100 ชุดอักขระเริ่มต้นที่ตั้งค่า UTF8* /; ใช้ `springboot_db`; ตารางวางถ้ามีอยู่ `t_author`; สร้างตาราง `t_author` (` id` bigint (20) ที่ไม่ได้ลงนามไม่ได้เป็น null auto_increment ความคิดเห็น 'รหัสผู้ใช้', `real_name` varchar (32) ไม่ใช่ความคิดเห็นที่เป็นโมฆะ 'ชื่อผู้ใช้',` nick_name 'varchar (32)
ผู้เขียนชั้นเรียน {var id: ยาว? = null var realname: สตริง? = NULL VAR ชื่อเล่น: สตริง? = null} Interface Authordao {Fun Add (ผู้แต่ง: ผู้แต่ง): Int Fun Update (ผู้แต่ง: ผู้แต่ง): int fun delete (id: long): int fun findauthor (id: long): ผู้แต่ง? fun findauthorlist (): รายการ <ผู้เขียน>}มากำหนดคลาสการใช้งานและเข้าถึงข้อมูลผ่าน JDBCTEMPLATE
@RepositoryOpen คลาส Authordaoimpl: Authordao {@autoWired Private Lateinit var Jdbctemplate: Jdbctemplate Override Fun เพิ่ม (ผู้แต่ง: ผู้แต่ง): int {return jdbctemplate.update ("แทรกลงใน t_author (real_name, nick_name) อัปเดต (ผู้แต่ง: ผู้แต่ง): int {return jdbctemplate.update ("อัปเดต t_author set real_name =?, nick_name =? ที่ไหน id =?", *arrayof (ผู้แต่ง. id)} แทนที่ fundauthor สนุก (id: long): ผู้แต่ง? {val list = jdbctemplate.query <adish> ("เลือก * จาก t_author โดยที่ id =?", arrayof <any> (id), beanpropertyrowmapper (ผู้เขียน :: class.java)) รายการส่งคืน? .get (0); } Override Fun findauthorlist (): รายการ <adish> {return jdbctemplate.query ("เลือก * จาก t_author", arrayof (), beanpropertyrowmapper (ผู้แต่ง :: class.java))}}} Interface AuthorService {Fun Add (ผู้แต่ง: ผู้แต่ง): Int Fun Update (ผู้แต่ง: ผู้แต่ง): int fun delete (id: long): int fun findauthor (id: long): ผู้แต่ง? fun findauthorlist (): รายการ <ผู้เขียน>}มากำหนดคลาสการใช้งานกันเถอะ เลเยอร์บริการเรียกวิธีการเลเยอร์ DAO นี่เป็นกิจวัตรทั่วไป
@Service ("AuthorService") Open Class AuthorServiceImpl: AuthorService {@autowired Private Lateinit Var Authordao: Authordao Override Fun Update (ผู้เขียน): int {return this.authordao.update (ผู้เขียน) Long): int {return this.authordao.delete (id)} แทนที่ความสนุก findauthor (id: long): ผู้แต่ง? {return this.authordao.findauthor (id)} แทนที่ความสนุก findauthorlist (): รายการ <adish> {return this.authordao.findauthorlist ()}}เพื่อแสดงเอฟเฟกต์ก่อนอื่นเราให้กำหนดชุดอินเทอร์เฟซ API แบบ RESTFUL อย่างง่ายสำหรับการทดสอบ
@restcontroller @requestmapping (value = "/uthors") คลาส AuthorController {@autoWired Private Lateinit Var AuthorService: AuthorService/*** รายการผู้ใช้แบบสอบถาม*/@requestmapping (method = [requestmethod.get] this.authorservice.findauthorlist () val param = hashmap <string, any> () param ["total"] = uthorlist.size param ["rows"] = uthorlist return param}/*** ข้อมูลผู้ใช้แบบสอบถาม*/@requestmapping (value = "/{userid: // d+}" ยาว, คำขอ: httpservletRequest): ผู้แต่ง {return uthorservice.findauthor (userId)?: โยน runtimeException ("ข้อผิดพลาดในการสอบถาม")} / *** วิธีใหม่* / @requestmapping (method = [requestmethod.post]) ความสนุก realName = jsonObject.getString ("real_name") val nickname = jsonobject.getString ("nick_name") val ผู้แต่ง = ผู้เขียน () ผู้เขียน. java.lang.long.long.valueof (userid) ผู้เขียน runtimeException ("ข้อผิดพลาดใหม่")}}/*** วิธีการอัปเดต*/@requestmapping (value = "/{userId: // d+}", method = [requestMethod.put]) การอัปเดตที่สนุกสนาน jsonObject.getString ("real_name") val nickname = jsonobject.getString ("nick_name") ลอง {ถ้า (ผู้เขียน! = null) {uther.realname = realname uther.nickname = ชื่อเล่น this.authorservice.update (ผู้เขียน) วิธีการลบ*/@requestmapping (value = "/{userId: // d+}", method = [requestMethod.delete]) ความสนุกลบ (@PathVariable UserId: ยาว) {ลอง {this.authorService.delete (userId)} catch (e: exception)ในที่สุดเราเรียกใช้โปรแกรมผ่าน SpringKotlinApplication
@springbootapplication (scanbasepackages = ["com.liangzone.demo.kotlin"]) การเปิดคลาส Springkotlinapplication {fun main (args: array <string>) {springapplication.run (springkotlinapplication :: class.java, *args)ที่นี่ผู้เขียนแนะนำไคลเอนต์ Editor Rest ของ Idea ไคลเอนต์ Editor Rest ของ Idea ได้รับการสนับสนุนใน Intellij ICIDE 2017.3 เวอร์ชันและได้เพิ่มคุณสมบัติมากมายในปี 2018.1 เวอร์ชัน ในความเป็นจริงมันเป็นปลั๊กอินไคลเอนต์ HTTP สำหรับแนวคิด IntelliJ ดูบทความก่อนหน้าอื่นโดยฉัน: ทดสอบทักษะใหม่อย่างรวดเร็วสำหรับอินเตอร์เฟส API
### รายการผู้ใช้ Query รับ http: // localhost: 8080/AuthorSaccept: แอปพลิเคชัน/jsoncontent-type: แอปพลิเคชัน/json; charset = utf-8 ### ข้อมูลผู้ใช้แบบสอบถามได้รับ http: // localhost: 8080/ผู้เขียน http: // localhost: 8080/AuthorsContent-type: แอปพลิเคชัน/json {"user_id": "21", "real_name": "Liang Guizhao", "nick_name": "Liang Guizhao"} ### วิธีการอัปเดต "real_name": "liangzone", "nick_name": "lianggzone"} ### เมธอดลบลบ http: // localhost: 8080/ผู้เขียน/21Accept: แอปพลิเคชัน/jsonContent-type: แอปพลิเคชัน/json; charset = utf-8ผ่านกรณีง่ายๆด้านบนเราพบว่ามันง่ายมากที่จะรวม Kotlin โดย Spring Boot และทำให้กระบวนการก่อสร้างและการพัฒนาเริ่มต้นง่ายขึ้นของแอพพลิเคชั่นฤดูใบไม้ผลิ เพื่อให้ผู้อ่านคุ้นเคยกับน้ำตาลวากยสัมพันธ์ของ Kotlin ผู้เขียนจะพูดคุยเกี่ยวกับคุณสมบัติใหม่ของ Kotlin และน้ำตาลวากยสัมพันธ์ในบทความในอนาคตหลายบทความ
รหัสต้นฉบับ
ตัวอย่างที่เกี่ยวข้องรหัสที่สมบูรณ์: spring-kotlin-samples (ดาวน์โหลดท้องถิ่น)
โอเคข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com