kotlin是idea所属公司开发的一门jvm语言,如果你不了解估计也不会看这里,所以我就不多说了。

这里简单说一下如何新建一个小的kotlin spring项目。kotlin和idea是一家公司,所以Idea天然是支持kotlin语言的,现在spring也完全支持了kotlin。

新建项目,类型是spring

在下一步选择kotlin语言

后面选择需要依赖的spirng组件。我们是来玩的,选个web+jpa就够了。


搭建好以后结构和Java maven一样,源码也是src/main/kotlin。里面有一个kt文件,就是kotlin的源文件。

为啥是一个显示后缀名kt的文件呢?如果你自己创建kotlin类或接口,后缀kt在idea中是不显示的,图标也不一样。这里是kotlin特色,这个文件里除了定义了一个被SpringBootApplication标注的类以外还有main函数,所以不是类文件。

现在已经可以运行main函数了,启动过程和Java工程一样。


正常对于kotlin来讲,类要被代理,必须是open的(open class才能被继承,否则默认是final的。你可以给主类加上final看一下,spring会报错)。这里没有加open关键字是因为我们使用了kotlin-maven-plugin插件。你可以在pom.xml中找一下。

接下来我们提供一个mvc端口,定义controller:

@RestController
class MessageResource() {
@GetMapping("a", "b")
fun index(): String = "hello world!"
}

方法的返回类型可以不写。再启动程序,访问http://localhost:8080/a,浏览器上就是hello world!


现在我们加上数据库的访问。定义一个data class(和Java新的Record类似,相等于lombok的@Data,会自动包含getter/setter等方法):

@Table("messages")
data class Message(@Id val id: String?, val text: String)

这个类有两个属性,定义在后面的括号里。第一个的类型后面还有问号,说明可以为空。按照这个格式去创建一个表:

CREATE TABLE  messages (
id varchar(60) not null DEFAULT '' PRIMARY KEY,
text VARCHAR(60) NOT NULL
);
INSERT INTO messages VALUES ('1', 'text'),('2', 'ttt');

pom中增加mysql依赖,比如

        <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>

application.properties中增加数据源:

spring.datasource.driverClassName =com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/jfinal?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false
spring.datasource.username = root
spring.datasource.password = 123456

增加jpa repo:

interface MessageRepository : CrudRepository<Message, String> {

    @Query("select * from messages")
fun findMessage(): List<Message>
} @Service
class MessageService(val db: MessageRepository) {
fun findMessages(): List<Message> = db.findMessage() fun post(message: Message) {
db.save(message)
}
}

改造controller:

@RestController
class MessageResource(val service: MessageService) {
@GetMapping("a", "b")
fun index(): List<Message> = service.findMessages() @PostMapping
fun post(@RequestBody message: Message) {
service.post(message)
}
}

现在你可以测试一下这两个接口了。

注意jpa的save方法是对象没有Id就新增,有id就更新

创建基于kotlin开发环境的spring项目入门的更多相关文章

  1. Ionic2开发环境搭建、项目创建调试与Android应用的打包、优化

    Ionic2开发环境搭建.项目创建调试与Android应用的打包.优化. windows下ionic2开发环境配置步骤如下: 下载node.js环境,稳定版本:v6.9.5 下载android stu ...

  2. Google Android Studio Kotlin 开发环境配置

    Google 近日开发者大会宣布Kotlin成为Android开发的第一级语言,即Android官方开发语言,可见Google对Kotlin的重视,本文就介绍一下Android Studio下的Kot ...

  3. 从零开始,创建GitHub团队开发环境

    从零开始,创建GitHub团队开发环境 GitHub提供免费的团队环境,不过免费仓库容量是300MB,请大家注意. 申请GitHub个人账号 1. 使用浏览器访问GitHub主页.如果使用IE,尽量不 ...

  4. ubuntu下创建虚拟python3开发环境

    友情链接:ubuntu16.04下安装python3+创建虚拟python3开发环境 1.为什么要创建python3虚拟开发环境? /********************************* ...

  5. vue.js2.0实战(1):搭建开发环境及构建项目

    Vue.js学习系列: vue.js2.0实战(1):搭建开发环境及构建项目 https://my.oschina.net/brillantzhao/blog/1541638 vue.js2.0实战( ...

  6. Angular开发环境搭建和项目创建以及启动

    工具的安装 首先需要安装node,直接在官网下载node,然后一直下一步安装完即可,在安装node的时候自带了npm包管理工具 然后安装Angular CLI,使用npm命令安装输入以下命令 npm ...

  7. Django之Django简介,开发环境搭建,项目应用创建

    软件及Django框架简介 软件框架 一个软件框架是由其中各个软件模块组成的: 每一个模块都有特定的功能: 模块与模块之间通过相互配合来完成软件的开发. 软件框架是针对某一类软件设计问题而产生的. M ...

  8. Hadoop伪分布配置与基于Eclipse开发环境搭建

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  9. Kotlin入门(1)搭建Kotlin开发环境

    Kotlin做为一门编程语言,已经出现好几年了,但此前在国内并不闻名.自从5月份谷歌宣布它成为Android的官方开发语言之后,Kotlin猛然窜红了,虽说短期内Kotlin无法取代Java,但对于一 ...

  10. vagrant特性——基于docker开发环境(docker和vagrant的结合)-0-简介

    原文https://www.hashicorp.com/blog/feature-preview-docker-based-development-environments Feature Previ ...

随机推荐

  1. 一键自动化博客发布工具,用过的人都说好(oschina篇)

    oschina和segmentfault一样,界面非常的清爽. 界面上除了必须的标题,内容之外,还有文章专辑和推广专区这几个选项. 一起来看看在blog-auto-publishing-tools中, ...

  2. gorm使用小结

    增 db.Create(user) db.Save(user) 参数只能用**结构体指针****,因为要根据指针写入该条插入的数据, 所以user可以作为该条数据使用. 新增只能用结构体 save方法 ...

  3. layui.js

    目录 用法: 1.在base.js里导入layui插件 2.在使用的html页面里引入 base.js lucky.js index.html 用法: 1.在base.js里导入layui插件 2.在 ...

  4. LVS负载均衡(1)-- LVS概述及LVS网络模型

    目录 1. 负载均衡集群概述 2. LVS理论基础 2.1 LVS常用术语 2.2 LVS数据调度原理 2.3 LVS工作模型 2.3.1 NAT模型 2.3.2 DR模型 2.3.3 TUNNEL模 ...

  5. 关于小说阅读前端翻页插件推荐turn.js

    http://www.turnjs.com

  6. 基于webapi的websocket聊天室(一)

    上一次我已经讲了在webapi主机上面加入websocket中间件. 这次就更进一步,搭建一个websocket局域网聊天室. 传送门-->webapi添加添加websocket中间件 下一篇 ...

  7. WPF自定义控件,如何使得xaml涉及器中的修改能立即反应到预览

    这是我无意中发现的,xaml中设置的是依赖属性而不是包装器,所以我们可以直接在注册依赖属性那里设置回调,触发某个控件重绘,比如本身或父控件重绘. xaml设计器就会实时更新 1 // !!!由于xam ...

  8. go强大的垃圾回收机制。

    一.C语言中返回函数中局部变量值和指针(1) 在C语言中,一个函数可以直接返回函数中定义的局部变量,其实在函数返回后,局部变量是被系统自动回收的,因为局部变量是分配在栈空间,那为什么还可以返回局部变量 ...

  9. ubuntu下openCV-Haar特征分类器训练

    ubuntu下openCV-Haar特征分类器训练 这段时间在学openCV,准备做一个头部检测,但是openCV自带的分类器只有人脸检测的,而且准确度不高,就准备自己训练一个分类器.在网上看了很多的 ...

  10. ch58x/ch59xADC差分采样NTC电阻获取当前温度

    前言:之前的文章中也有关于使用I2C器件进行温度的采集的文章 采集温度的方式不止使用传感器,也可以使用NTC温敏电阻进行采集,此方法的外围电路较为简单切成本较低,代码也较为容易实现. 实现原理:先通过 ...