Vorwort
In diesem Artikel wird erläutert, wie Kotlin unter den Grundlagen von Spring Boot2 verwendet und nahtlos integriert und perfekt mischt. Um die Leser mit Kotlins syntaktischer Zucker vertraut zu machen, wird der Autor in mehreren zukünftigen Artikeln über Kotlins neue Funktionen und syntaktische Zucker sprechen. Ich werde unten nicht viel sagen. Schauen wir uns die detaillierte Einführung an
Ändern Sie die POM -Datei und fügen Sie Spring Startabhängigkeiten hinzu.
<sport> <GroupId> org.springFramework.boot </GroupId> <artifactId> Spring-Boot-Starter-Parent </artifactid> <version> 2.0.2.Release </Version> <RelativePath/> </parent> <Deponcies> <Deponcy> <gruppe </gruppen> org.springPath.boot </gruppen> </Groupid> <artifactid> Spring-Boot-Starter </artifactId> </abhängig> <depeationcy> <gruppe> org.springFramework.boot </Groupid> <artifactId> Spring-Boot-Starter-Web </artifactId> </abhängig> <Deponcy> <Gruppe> org.ssprungFramework. <artifactid> Spring-Boot-Starter-JDBC </artifactid> </abhängig> </abhängigkeiten>
Unmittelbar danach müssen wir MySQL -Abhängigkeiten hinzufügen.
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.35</version></dependency><dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.14</version></dependency>
Schließlich fügen Sie die Kotlin -Abhängigkeit hinzu.
<Depopenty> <gruppe> org.jetbrains.kotlin </GroupId> <artifactId> kotlin-stdlib-jdk8 </artifactid> </abhängig> <depeaponen> <gruppe.jetbrains <gruppe> org.jetbrains.kotlin </Groupid> <artifactid> kotlin-stdlib </artifactId> </abhängig>
Beachten Sie, dass in Kotlin die Datenklasse standardmäßig keinen parameterlosen Konstruktor hat und die Datenklasse standardmäßig den endgültigen Typ enthält und nicht vererbt werden kann. Beachten Sie, dass wenn wir den Spring + Kotlin -Modus verwenden, kann die Verwendung von @Autowared auf dieses Problem stoßen. Daher können wir NoARG hinzufügen, um parameterlose Konstruktoren als kommentierte Klasse zu generieren. Verwenden Sie Allopen, um das endgültige für die kommentierte Klasse zu entfernen und Erbschaft zu ermöglichen.
<plugin> <artifactId> kotlin-maven-plugin </artifactId> <gruppe> org.jetbrains <giele> <giel> Testkompile </Ziel> </Ziele> </Execution> </Execution> </Execution> </Execution> <Deponcies> <Deponcy> <GroupID> org.jetbrains <gruppe> org.jetbrains.kotlin </Groupid> <artifactid> kotlin-maven-alopen </artifactId> <version> $ {kotlin.version} </Version> </abhängig> </abhängig> </plugin>Zu diesem Zeitpunkt wurde die Abhängigkeitsumgebung unseres Maven -Abhängigkeit grob konfiguriert. Für den vollständigen Quellcode können Sie sich am Ende des Artikels auf das Github -Repository beziehen.
Mithilfe der Spring -Start -Standardkonfiguration müssen Sie keine Datenquelle und JDBCtemplate -Bean erstellen.
Konfigurieren Sie Datenquelleninformationen in SRC/Main/Ressourcen/Anwendung.Properties.
spring.datasource.driver-class-name = com.mysql.jdbc.driverspring.datasource.url = jdbc: mysql: // localhost: 3307/springboot_dbspring.datasource.username = rootspring.datasource.Password = root
Konfigurieren Sie Datenquelleninformationen in SRC/Main/Ressourcen/config/source.properties.
# mysqlSource.DriverClassName = com.mysql.jdbc.driversource.url = jdbc: mysql: // localhost: 3306/springboot_dbsource.username = rootSource.password = root
Erstellen Sie hier DataSource und JDBCtemplate.
@Configuration @EnableTransactionManagement @PropertySource (value = *arrayof ("classPath: config/source.properties") Open Class Beanconfig {@autowired Private LateInit var envality @Bean Open Fun DataSource (): dataSource = dreUidDataSource () dataSource () dataSource.droverclasSnAnsnAMAMAME = DRUSORCE: Env !!. jdbctemplate (): jdbctemplate {val jdbctemplate = jdbctemplate () jdbctemplate.dataSource = dataSource () return jdbctemplate}}Initialisieren Sie zuerst das erforderliche SQL -Skript.
Datenbank erstellen /*! 32312, wenn nicht existiert Verwenden Sie `Springboot_db`; Droptabelle, wenn existiert `t_author`; Erstellen Sie Tabelle "t_author" ("id" bigint (20) nicht signiert null auto_increment comment 'user id', `real_name` varchar (32) NICHT NULL Kommentar 'Benutzername'," Nick_name "varchar (32) Null -Kommentar 'Benutzer anonynous', primärer Schlüssel (` id`)). Klasse Autor {var id: lang? = null var realname: String? = NULL VAR -Spitzname: String? = null} Interface Authordao {Fun Add (Autor: Autor): int Fun Update (Autor: Autor): int Fun Löschen (ID: Long): int Fun FindAuthor (ID: Long): Autor? Fun findAuthorList (): List <autor>}Definieren wir die Implementierungsklasse und greifen Sie über JDBCTEMplate auf die Daten zu.
@Repositoryopen class AuthorDaoImpl : AuthorDao { @Autowired private lateinit var jdbcTemplate: JdbcTemplate override fun add(author: Author): Int { return jdbcTemplate.update("insert into t_author(real_name, nick_name) values(?, ?)", author.realName, author.nickName) } override fun Update (Autor: Autor): int {return jdbctemplate.update ("Aktualisieren Sie T_Author set real_name =? } Override Fun FindAuthor (ID: Long): Autor? {val list = jdbctemplate.Query <autor> ("SELECT * von t_author WHERE ID =?", Arrayof <Onus> (id), beanpropertyRowMapper (Autor :: class.java)) returnliste? .get (0); } override Fun findAuthorList (): list <autor> {return jdbctemplate.query ("SELECT * von t_author", arrayof (), beanpropertyrowmapper (Autor :: class.java))}}}}}}}}}}}}}} Interface AuthorService {Fun Add (Autor: Autor): int Fun Update (Autor: Autor): int Fun Löschen (ID: Long): int Fun FindAuthor (ID: Long): Autor? Fun findAuthorList (): List <autor>}Definieren wir die Implementierungsklasse. Die Serviceschicht ruft die Dao -Layer -Methode auf. Dies ist eine typische Routine.
@Service ("AuthorService") Open Class AuthorServiceImpl: AuthorService {@autowired Private LateInit var Authordao: Authordao überschreiben Sie Spaß (Autor: Autor): int {return this.Authordao.Update (Autor)} Übergeordneter Fass add (Autor: int {return). {return this.authordao.delete (id)} override Fun findAuthor (id: long): Autor? oderUm den Effekt zu zeigen, definieren wir zunächst einen einfachen Satz erholsamer API -Schnittstellen zum Testen.
@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["rows"] = authorList return param } /** * Query user information*/ @RequestMapping(value = "/{userId://d+}", method = [RequestMethod.GET]) fun getAuthor(@PathVariable 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 fickname = jsonObject.getString ("Nick_name") Val Author = Author () Autor.id = java.lang.long.valueof (userId) Autor.RealNee RunTimeException ("neuer Fehler")}}/*** Aktualisieren Sie die Methode*/@RequestMapping (value = "/{userId: // d+}", method = [requestMethod.put]) Fun -Update (@PathVariable userId: long, @RequestBody jsonObject: jsonObject) {var Author -this.Authors.Authors.Authors.Authors.Authors. jsonObject.getString ("real_name") val fickname = jsonObject.getString ("nick_name") try {if (author! Methode*/@RequestMapping (value = "/{userId: // d+}", method = [requestMethod.delete]) Fun Delete (@PathVariable userId: long) {try {this.AuthorService.delete (userId)} catch (E: Ausnahme) {Throw RunTimeXcedSchließlich führen wir das Programm über Springkotlinapplication durch.
@SpringBootApplication(scanBasePackages = ["com.lianggzone.demo.kotlin"])open class SpringKotlinApplication{ fun main(args: Array<String>) { SpringApplication.run(SpringKotlinApplication::class.java, *args) }}Hier empfiehlt der Autor den Redakteur von IDEE Editor Rest Client. Der Redakteur von IDEE Editor Rast Client wurde in der Intellij IDE 2017.3 -Version unterstützt und hat in der Version 2018.1 viele Funktionen hinzugefügt. Tatsächlich ist es ein HTTP -Client -Plugin für die Intellij -Idee. Siehe einen weiteren vorherigen Artikel von mir: Testen Sie schnell neue Fähigkeiten für API -Schnittstellen
### Abfrage Benutzerliste erhalten 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"} ### Löschen Methode Löschen Sie http: // localhost: 8080/Autoren/21Accept: application/jsonContent-Typ: application/json; Charset = Utf-8-8In dem obigen einfachen Fall haben wir festgestellt, dass es sehr einfach ist, Kotlin mit Spring Boot zu integrieren und den anfänglichen Konstruktions- und Entwicklungsprozess von Springanwendungen zu vereinfachen. Um die Leser mit Kotlins syntaktischer Zucker vertraut zu machen, wird der Autor in mehreren zukünftigen Artikeln über Kotlins neue Funktionen und syntaktische Zucker sprechen.
Quellcode
Verwandte Beispiele Komplett Code: Spring-Kotlin-Samples (lokaler Download)
Okay, das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.