Kata pengantar
Artikel ini menjelaskan cara menggunakan Kotlin di bawah dasar -dasar Spring Boot2, dan mengintegrasikan dan memadukan dengan sempurna. Untuk membuat pembaca lebih terbiasa dengan gula sintaksis Kotlin, penulis akan berbicara tentang fitur baru Kotlin dan gula sintaksis dalam beberapa artikel di masa depan. Saya tidak akan banyak bicara di bawah ini, mari kita lihat perkenalan yang terperinci
Ubah file POM dan tambahkan dependensi boot pegas.
<partent> <groupId> org.springframework.boot </groupid> <ArTifactId> Spring-boot-starter-parent </artifactid> <version> 2.0.2.release </version> <relativePath/> </Parent> <deptendency> <groupdency> <groupid> org.springfring.boot.boot <ArtifactId> Spring-Boot-starter </stifactid> </dependency> <dependency> <Groupid> org.springframework.boot </proupid> <ArtifactId> Spring-boot-starter-web </artifactid> <groups> <dependency> <groupid> org.springfring.springfring.boot.boot <ArTifactId> Spring-boot-starter-jdbc </artifactid> </dependency> </dependencies>
Segera setelah itu, kita perlu menambahkan dependensi MySQL.
<dependency> <GroupId> mysql </proupid> <ArtifactId> mysql-connector-java </arttifactid> <version> 5.1.35 </version> </dependency> <dependency> <Roupid> com.alibaba </groupid> <titifactid> druid </artifactid> </versi </groupid> <titifactid> </artifactid> </versi </version4 </version4 </artifactid> <T/version4
Akhirnya, tambahkan ketergantungan Kotlin.
<dependency> <GroupId> org.jetbrains.kotlin </groupid> <ArtifactId> Kotlin-stdlib-jdk8 </artifactid> </dependency> <sependency> <roupid> org.jetbrains.kotlin </groupid> <t Artifactid> Kotlin-reflect </ArtiFlin </groupId> <t Artifactid> <groupId> org.jetbrains.kotlin </groupid> <ArtifactId> Kotlin-stdlib </artifactid> </dependency>
Perhatikan bahwa di Kotlin, kelas data tidak memiliki konstruktor tanpa parameter secara default, dan default kelas data ke jenis akhir dan tidak dapat diwariskan. Perhatikan bahwa jika kita menggunakan mode Spring + Kotlin, maka menggunakan @Autowared mungkin menghadapi masalah ini. Oleh karena itu, kami dapat menambahkan NOARG untuk menghasilkan konstruktor tanpa parameter sebagai kelas beranotasi. Gunakan Allopen untuk menghapus final untuk kelas beranotasi dan memungkinkan warisan.
<Plugin> <ArtifactId> Kotlin-Maven-plugin </artifactid> <groupid> org.jetbrains.kotlin </groupid> <version> $ {Kotlin.version} </version> </execution> <decution> <decution> </id </id </id </id </ID </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </ID </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </id </ID </ID </id </ID </ID <seals> <jetik> Kompil Tes </ject> </ject> </secution> </secution> </ececution> </execution> <dependencies> <dependency> <groupid> org.jetbrains.kotlin </sroupid> <ArtiFacTid> Kotlin--ven-noarg </ArtiFlin> <ArtifactId> Kotlin-vaven-noarg </artifactD> <ArtifactId> Kotlin--vong </ArtiFacTid> $ {version> <TREPERENGY> $ {Version> <TRIPLING> <TRIPLING> <TERPERING> $ {version> <TRIPLING> <TERFACTION> <GroupId> org.jetbrains.kotlin </proupid> <ArtifactId> Kotlin-Maven-Alopen </arttifactid> <Version> $ {Kotlin.version} </version> </Dependency> </Dependencies> </plugin>Pada titik ini, lingkungan ketergantungan Maven kami telah dikonfigurasi secara kasar. Untuk kode sumber lengkap, Anda dapat merujuk ke repositori GitHub di akhir artikel.
Menggunakan Konfigurasi Default Spring Boot, Anda tidak perlu membuat DataSource dan JDBCtemplate Bean.
Konfigurasikan informasi sumber data di SRC/Main/Resources/Application.Properties.
spring.datasource.driver-class-name = com.mysql.jdbc.driverspring.datasource.url = jdbc: mysql: // localhost: 3307/springboot_dbspring.datasource.username = rootpring.dataSource.password = root
Konfigurasikan informasi sumber data di SRC/Main/Resources/Config/Source.properties.
# mysqlsource.driverclassname = com.mysql.jdbc.driversource.url = jdbc: mysql: // localhost: 3306/springboot_dbsource.username = rootsource.password = root/root/springboot_dbsource.username = rootource.password = root
Di sini, Buat DataSource dan JDBCtemplate.
@Configuration@EnableTransactionManagement@PropertySource(value = *arrayOf("classpath:config/source.properties"))open class BeanConfig { @Autowired private lateinit var env: Environment @Bean open fun dataSource(): DataSource { val dataSource = DruidDataSource() dataSource.driverClassName = Env !!. getProperty ("source.driverclassname"). trim () datasource.url = env.getProperty ("source.url"). trim () dataSource.username = env.getProperty ("source.username"). trim () dATasource.password = letasproperty ("). DATasour. @Bean Open Fun Jdbctemplate (): jdbctemplate {val jdbctemplate = jdbctemplate () jdbctemplate.dataSource = dataSource () return jdbctemplate}}Pertama inisialisasi skrip SQL yang diperlukan.
Buat database /*! 32312 Jika tidak ada* /`springboot_db` /*! 40100 Karakter default Set utf8* /; Gunakan `springboot_db`; Tabel drop jika ada `t_author`; Buat tabel `t_author` (` id` bigint (20) tidak ditandatangani bukan null auto_increment komentar 'id pengguna', `real_name` varchar (32) bukan komentar null 'nama pengguna',` nick_name` varchar (32) bukan null komentar 'pengguna anonim', kunci primer (`` `` ``))
Penulis kelas {var id: Long? = null var realname: string? = NULL VAR NOLNAME: String? = null} antarmuka authordao {fun add (penulis: penulis): int fun update (penulis: penulis): int fun delete (id: long): int fun findauthor (id: long): penulis? Fun FindAuthorList (): Daftar <Touror>}Mari kita tentukan kelas implementasi dan akses data melalui JDBCtemplate.
@RepositoryOpen class authordaoImpl: authordao {@Autowired private lateInit var jdbctemplate: jdbctemplate override fun add (penulis: penulis): int {return jdbctemplate.update ("masukkan ke t_Author (real_name, nick_name) values (? UPDATE (Author: Author): int {return jdbctemplate.update ("Perbarui t_author set real_name =?, nick_name =? Di mana id =?", *arrayof (penulis. id)} override fun findauthor (id: long): penulis? {val list = jdbctemplate.Query <OUnTor> ("SELECT * DARI T_AUTHOR WHERE ID =?", Arrayof <natu> (id), BeanpropertyrowMapper (Author :: class.java)) daftar pengembalian? .get (0); } override fun findauthorlist (): list <noror> {return jdbctemplate.query ("SELECT * from t_author", arrayof (), beanpropertyrowmapper (penulis :: class.java))}} Antarmuka Penulis UNTUK {fun add (penulis: penulis): Int Fun Update (penulis: penulis): int fun delete (id: long): int fun findauthor (id: long): penulis? Fun FindAuthorList (): Daftar <Touror>}Mari kita tentukan kelas implementasi. Lapisan layanan memanggil metode lapisan DAO. Ini adalah rutinitas yang khas.
@Service ("Penulisservice") Open Class PenulisanServiceImpl: Penulisservice {@Autowired Private LateInit var Authordao: authordao Override Fun Update (penulis: penulis): int {return this.Authordao.Apdate (penulis)} override fun add (penulis: penulis): int {return this. {return this.authordao.delete (id)} override fun findauthor (id: long): penulis? {return this.authordao.findauthor (id)} override fun findauthorlist (): list <noror> {return this.authordao.findauthorlist ()}}}Untuk menunjukkan efeknya, pertama -tama kami mendefinisikan serangkaian antarmuka API yang tenang untuk pengujian.
@RestController@RequestMapping(value = "/authors")class AuthorController { @Autowired private lateinit var authorService: AuthorService /** * Query user list*/ @RequestMapping(method = [RequestMethod.GET]) fun getAuthorList(request: HttpServletRequest): Map<String, Any> { val authorList = this.authorService.findauthorlist () val param = hashmap <string, any> () param ["total"] = authorList.size param ["baris"] = Param Pengembalian AuthorList}/*** Informasi Pengguna @/@requestmapping (value = "/{userid: // d+}, metode = @requestmapping (value ="/{userid: // d+}, metode = @requestmapping (value = "/{userid: // d+}, metode = @requestmapp userId: Long, request: HttpServletRequest): Author { return authorService.findAuthor(userId) ?: throw RuntimeException("Query Error") } /** * New method*/ @RequestMapping(method = [RequestMethod.POST]) fun add(@RequestBody jsonObject: JSONObject) { val userId = jsonObject.getString ("user_id") val realname = jsonobject.getString ("real_name") val nickname = jsonobject.getString ("nick_name") val worsor = author.id noUrname = nickname = nickname. this.authorService.add (penulis)} catch (e: exception) {throw runtimeException ("kesalahan baru")}}/*** Metode Perbarui*/@RequestMapping (value = "/{UserId: // d+}, metode = [requestMethod.put] pembaruan menyenangkan (@pathvariable {@pathvariableed {@pathvariable {@pathvariable {@pathvariable) = this.authorService.findauthor (userid) val realname = jsonobject.getString ("real_name") val nickname = jsonobject.getString ("nick_name") coba {if (ucnor! = null) {author.RealName = realname author.nickname = nickname. {Throw runtimeException ("Update error")}}/*** Hapus metode*/@RequestMapping (value = "/{userid: // d+}", metode = [requestMethod.delete]) delete fun (@pathvariable userid: long) {try {this.authorservice (@pathvariable userid: long) {try {this.authorservice RunimeException ("hapus kesalahan")}}}Akhirnya, kami menjalankan program melalui springkotlinApplication.
@SpringbootApplication (scanbasepackages = ["com.lianggzone.demo.kotlin"]) kelas buka springkotlinApplication {fun main (args: array <string>) {springapplication.run (springkotliclication :: class.java, *args)}}Di sini, penulis merekomendasikan klien editor Idea. Idea's Editor REST Klien telah didukung dalam versi Intellij Idea 2017.3, dan telah menambahkan banyak fitur dalam versi 2018.1. Faktanya, ini adalah plugin klien HTTP untuk ide IntelliJ. Lihat artikel sebelumnya yang sebelumnya oleh saya: dengan cepat menguji keterampilan baru untuk antarmuka API
### Daftar Pengguna Kueri Dapatkan http: // localhost: 8080/penuliscepcept: Application/JSONContent-Type: Application/Json; Charset = UTF-8 ### Informasi Pengguna Kueri Dapatkan http: // localhost: 8080/authors/15accept: Application/JSONContent-Type: Application/Json; http://localhost:8080/authorsContent-Type: application/json { "user_id": "21", "real_name": "Liang Guizhao", "nick_name": "Liang Guizhao"} ### Update method PUT http://localhost:8080/authors/21Content-Type: application/json { "real_name" : "Lianggzone", "nick_name": "Lianggzone"} ### Hapus metode hapus http: // localhost: 8080/penulis/21accept: Application/jsonContent-Type: Application/json; charset = UTF-8Melalui kasus sederhana di atas, kami menemukan bahwa sangat mudah untuk mengintegrasikan Kotlin dengan Spring Boot dan menyederhanakan proses konstruksi awal dan pengembangan aplikasi pegas. Untuk membuat pembaca lebih terbiasa dengan gula sintaksis Kotlin, penulis akan berbicara tentang fitur baru Kotlin dan gula sintaksis dalam beberapa artikel di masa depan.
Kode Sumber
Contoh Terkait Kode Lengkap: Spring-Kotlin-sampel (unduhan lokal)
Oke, di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini memiliki nilai referensi tertentu untuk studi atau pekerjaan semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.