Préface
Cet article explique comment utiliser Kotlin sous les bases de Spring Boot2 et intégrer et se mélanger parfaitement. Afin de rendre les lecteurs plus familiers avec le sucre syntaxique de Kotlin, l'auteur parlera des nouvelles fonctionnalités et du sucre syntaxique de Kotlin dans plusieurs futurs articles. Je ne dirai pas beaucoup ci-dessous, jetons un coup d'œil à l'introduction détaillée
Modifiez le fichier POM et ajoutez les dépendances de démarrage de Spring.
<s parent> <proupId> org.springframework.boot </prôdId> <ArtifActid> printemps-boot-starter-Parent </ artifactid> <in version> 2.0.2.release </-version> <LelativePath /> </parent> <pentences> <dependency> <proupId> org.springframework.boot </preamid>> <ArtefactId> Spring-Boot-starter </letefactive> </dependency> <dependency> <proupId> org.springframework.boot </proupId> <prefactive> printemps-boot-starter-web </ artifactid> </pedency> <peedendency> <proupId> org.springframework.boot </proulid> <ArtefactId> printemps-boot-starter-jdbc </refactive> </dpendance> </dpendances>
Immédiatement après, nous devons ajouter des dépendances MySQL.
<dependency> <proupId> mysql </proncId> <ArtifActid> mysql-connector-java </ artifactid> <version> 5.1.35 </prewing> </dependency> <Dedency> <proupId> com.alibaba </prouvenid> <ptetifactid> druid </ artifactid> <version> 1.0.14 </ version> </Dedency>
Enfin, ajoutez la dépendance Kotlin.
<dependency> <proupId> org.Jetbrains.kotlin </rompupId> <Artifactid> Kotlin-stdlib-jdk8 </retifactid> </peedency> <Dedency> <ProupId> org.Jetbrains.kotlin </proupId> <Ertifactid> kotlin-reflect </tatifactid> </pedency> <dedency> <GroupId> org.Jetbrains.kotlin </rompuprid> <Ertifactive> Kotlin-stdlib </refactive> </Dependance>
Notez que dans Kotlin, la classe de données n'a pas de constructeur sans paramètre par défaut, et la classe de données par défaut est le type final et ne peut pas être héritée. Notez que si nous utilisons le mode Spring + Kotlin, l'utilisation de @Autowared peut rencontrer ce problème. Par conséquent, nous pouvons ajouter NOARG pour générer des constructeurs sans paramètres comme classe annotée. Utilisez Allopen pour supprimer la finale pour la classe annotée et permettez l'héritage.
<glugin> <Ertifactid> Kotlin-Maven-Plugin </lefactive> <proupId> org.Jetbrains.kotlin </rom groupe> <version> $ {kotlin.version} </DERNE> <Executions> <execution> <id> Compiler </id> <buts> <id> compile </puil> </ but <Cobjectifs> <but> test-compile </ but> </ buts> </ Execution> </ Execution> </Exécution> </Exécution> <Dependance> <Dedency> <GroupId> Org.Jetbrains.kotlin </proncId> <Artefactid> Kotlin-Maven-Noarg </Retifactid> <version> $ {kotlin.version ée <GroupId> org.jetbrains.kotlin </prôdId> <Artifactid> Kotlin-Maven-Alopen </Retifactid> <DERSE> $ {kotlin.version} </-version> </ Dependency> </Dependance> </gingin>À ce stade, l'environnement de dépendance de notre Maven a été à peu près configuré. Pour le code source complet, vous pouvez vous référer au référentiel GitHub à la fin de l'article.
À l'aide de la configuration par défaut de Spring Boot, vous n'avez pas besoin de créer un retour de données et un bean JDBCTemplate.
Configurer les informations de source de données dans SRC / Main / Resources / Application.Properties.
printemps.datasource.driver-class-name = com.mysql.jdbc.driverspring.datasource.url = jdbc: mysql: // localhost: 3307 / springboot_dbspring.datasource.username = rootspring.datasource.password = root.
Configurer les informations de source de données dans SRC / Main / Resources / Config / Source.Properties.
# mysqlsource.driverclassname = com.mysql.jdbc.driversource.url = jdbc: mysql: // localhost: 3306 / springboot_dbsource.username = rootsource.password = root =
Ici, créez DataSource et JDBCTemplate.
@ Configuration @ iableTransActionManagement @ propriétéSource (value = * arrayof ("classpath: config / source.properties")) open class beanConfig {@autowired private lateInit var Env: Environment @bean open fun dataSource (): dataSource {val datasource = duiddatasource () datasource.drivercyDiverclAnd = duiddatasource () datasource.drivercyDiverclAnDAM Env !!. GetProperty ("Source.DriverClassName"). Trim () dataSource.url = env.getProperty ("Source.url"). Trim () DataSource.Username = Env.getProperty ("Source.Username"). Trim () DataSource.Password = Env.getProperty ("Source.Password"). JDBCTemplate (): JDBCTemplate {Val JdbCTemplate = JDBCTemplate () JDBCTemplate.DataSource = DataSource () RETOUR JDBCTemplate}}Initialisez d'abord le script SQL requis.
Créer une base de données / *! 32312 S'il n'est pas existant * / `Springboot_DB` / *! 40100 Set de caractères par défaut UTF8 * /; Utilisez `Springboot_DB`; Table de dépôt si existe `t_author`; Créer un tableau `t_author` (` id` bigint (20) non signé non null auto_increment commentaire 'user id', `real_name` varchar (32) non nul commentaire` `nom d'utilisateur '',` nick_name` varchar (32) non nul commentaire 'user anonymous', clés primaire (`id`)) moteur = innodb auto_increment = 1 par défaut = utf8;
Classe Auteur {var Id: Long? = null var realName: String? = Null var surnom: String? = null} Interface Authordao {Fun Add (auteur: auteur): Int Fun Update (auteur: auteur): int Fun Delete (ID: Long): int Fun FindAuthor (ID: Long): Auteur? Fun FindAuthorList (): Liste <auteur>}Définissons la classe d'implémentation et accédons aux données via JDBCTemplate.
@RepositoryOpenn classe Authordaoimpl: Authordao {@autowired privé LateInit var jdbctemplate: jdbcTemplate override fun add (auteur: auteur): int {return jdbCTemplate.update ("insert dans t_author (real_name, nick_name) Valers (?,?)", Auteur. Mise à jour (auteur: auteur): int {return jdbcTemplate.update ("update t_author set real_name =?, nick_name =? où id =?", * arrayof (auteur.realname, auteur } Remplacez Fun FindAuthor (ID: Long): Auteur? {Val list = jdbcTemplate.Query <auteur> ("SELECT * FROM T_AUTHOR WHERE ID =?", Arrayof <yhy> (id), beanpropertyRowMapper (auteur :: class.java)) return list? .get (0); } Override Fun FindAuthorList (): list <auteur> {return jdbCTemplate.Query ("SELECT * FROM T_AUTHOR", ArrayOf (), BeanProperTyRowMapper (auteur :: class.java))}} Interface AuthorService {Fun Add (auteur: auteur): Int Fun Update (auteur: auteur): int Fun Delete (ID: Long): int Fun FindAuthor (ID: Long): Auteur? Fun FindAuthorList (): Liste <auteur>}Définissons la classe d'implémentation. La couche de service appelle la méthode de la couche DAO. Il s'agit d'une routine typique.
@Service ("AuthorService") Classe ouverte AuthorServiceImpl: AuthorService {@Autowired Private LateInit var Authordao: Authordao Override Fun Update (auteur: auteur): int {return this.authordao.update (auteur)} Override Fun Add (auteur: auteur): int {return this.Authordao.adddd (auteur)} Overnide funde Delete (id: Long) {return this.authordao.delete (id)} Override Fun FindAuthor (id: long): auteur? {return this.authordao.findAuthor (id)} remplacer le plaisir findAuthorList (): list <auteur> {return this.authordao.findAuthorList ()}}Pour montrer l'effet, nous définissons d'abord un ensemble simple d'interfaces API RESTful pour les tests.
@ RestController @ requestmapping (value = "/ auteurs") classe AuthorController {@Autowired private LaTinit var var AuthorService: Authorservice / ** * quey list user list * / @requestmapping (méthode = [requestMethod.get]) fun getAuthorList (request: httServLERequest): map <string, any> {valorestlist = this.authorservice.findAuthorList () val param = hashmap <string, any> () param ["total"] = auteurlist.Size param ["lignes"] = auteur return param} / ** * Informations utilisateur de requête * / @requestmapping (value = "/ {userId: // d +}", méthode = [requestMethod.get]) amu Request: httpServLetRequest): auteur {return AuthorService.FindAuthor (userId) ?: Throw RuntimeException ("Error de requête")} / ** * Nouvelle méthode * / @RequestMapping (méthode = [requestMethod.Post]) Fun Add (@Requestbody JSONOBject: jsonObject) {Val userrid = jsonObject.getSstring (") = JSONObject.getString ("Real_name") Val surnom = jsonObject.getString ("nick_name") val auteur = auteur () auteur.id = java.lang.long.valueof (userId) auteur.realname = realname auteur RuntimeException ("Nouvelle erreur")}} / ** * Méthode de mise à jour * / @RequestMapping (value = "/ {userId: // d +}", méthode = [requestMethod.put]) Fun Update (@Pathvariable Userid: Long, @Requestbody JSONOBject: JSONOBject) {var auteur = this.AutorServery.FindaThor (utilisateur) JSONOBject.getString ("Real_name") Val surnom = jsonObject.getString ("nick_name") try {if (auteur! = null) {auteur Méthode * / @RequestMapping (value = "/ {userId: // d +}", méthode = [requestMethod.Delete]) fun delete (@pathvariable userId: long) {try {this.autherService.delete (userId)} catch (e: exception) {thord runtimexception ("Delete Error")}}}Enfin, nous exécutons le programme via SpringkotlinApplication.
@SpringBootApplication (ScanBasePackages = ["com.lianggzone.demo.kotlin"]) Open classe SpringkotlinApplication {Fun Main (args: array <string>) {SpringApplication.Run (SpringkotlinApplication :: class.java, * args)}}}Ici, l'auteur recommande le client de repos de l'éditeur d'idée. Le client de l'éditeur d'idée a été pris en charge dans la version IntelliJ Idea 2017.3 et a ajouté de nombreuses fonctionnalités en version 2018.1. En fait, il s'agit d'un plugin client HTTP pour IntelliJ Idea. Voir un autre article précédent de moi: Tester rapidement de nouvelles compétences pour les interfaces API
### Liste d'utilisateurs de requête obtenir http: // localhost: 8080 / AuthorsaCcept: application / jsonContent-type: application / json; charset = utf-8 ### Informations utilisateur de requête obtenir http: // localhost: 8080 / authors / 15ACcept: application / jsoncontent-type Post: application / json; charset = utf-8 ## a ajouté la méthode post: application / json; charset = utf-8 ## ajout de la méthode Post: application / json; charset = utf-8 ## Ajout de la méthode Post: Application / JSON; Charset = UTF-8 ## Ajout de la méthode Post: Application / JSON; CHARSE http: // localhost: 8080 / AuthorsContent-type: application / json {"user_id": "21", "real_name": "liang guizhao", "nick_name": "liang guizhao"} ### Méthode de mise "Real_name": "liandggzone", "nick_name": "liandggzone"} ### delete méthode delete http: // localhost: 8080 / auteurs / 21ACcept: application / jsonContent-type: application / json; charset = utf-8Grâce au cas simple ci-dessus, nous avons constaté qu'il est très facile d'intégrer Kotlin par Spring Boot et de simplifier le processus initial de construction et de développement des applications de printemps. Afin de rendre les lecteurs plus familiers avec le sucre syntaxique de Kotlin, l'auteur parlera des nouvelles fonctionnalités et du sucre syntaxique de Kotlin dans plusieurs futurs articles.
code source
Exemples connexes Code complet: Spring-Kotlin-Samples (téléchargement local)
D'accord, ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article a une certaine valeur de référence pour l'étude ou le travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer. Merci pour votre soutien à wulin.com.