開始前須要有java基礎, SpringBoot基礎和kotlin基礎html
kotlin參考kotlin中文站的教程, 相信對於一個Java程序員來講, 半天就能上手了java
Kotlin比起java來講更加簡潔, 和java同樣是基於JVM的編程語言, 網上關於Kotlin優勢缺點的討論也有不少, 這裏就不展開了.mysql
固然, 最主要的緣由的是, 暑假實習的公司, 使用Kotlin和SpringBOot進行web開發的, o(╯□╰)ogit
以前對於kotlin的瞭解甚少, 只知道在去年的google I/O大會上成了安卓的第一語言, 其餘就不瞭解了.
如今趁暑假前, 先學習一下kotlin.程序員
首先固然是使用IDEA建立一個SpringBoot工程
github
這裏語言選擇Kotlin, 使用gradle進行管理, 以後再選擇模塊的時候只要選擇上web, jpa和mysql就能夠了web
而後修改配置文件, 由於導入了jpa, 因此必定要設置好DataSource, 不然沒法啓動spring
spring: datasource: driver-class-name: com.mysql.jdbc.Driver username: root password: ABCabc123# url: jdbc:mysql://localhost:3306/db_test?useSSL=false
配置完成後能夠, 在source目錄下能夠看到已經建立好了一個Application.kt文件, 用於啓動SpringBoot, 對應Java下的Application.java
文件sql
@SpringBootApplication class TestApplication fun main(args: Array<String>) { runApplication<TestApplication>(*args) }
@RestController @RequestMapping("/hello") class HelloController { @GetMapping fun hello():String { return "hello world" } }
和java的寫法很是像, 能夠無縫轉換編程
啓動!
使用curl命令進行請求
➜ ~ curl "http://localhost:8080/hello" hello world
簡單的請求完成了
使用Swagger2能夠自動生成接口文檔和進行接口測試, 極大的方便了後端, 不須要去花很大的功夫獲去維護文檔
首先試試導入Swagger2
compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.8.0' compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.8.0'
配置Swagger2
@Configuration @EnableSwagger2 class Swagger2 { @Bean fun createRestApi(): Docket { return Docket(DocumentationType.SWAGGER_2) // 使用Swagger2 .apiInfo(apiInfo()) // 設置接口頁面信息 .select() // 返回ApiSelectorBuilder的實例 .apis(RequestHandlerSelectors.basePackage("io.ride.vote.web")) // api接口所在的包 .paths(PathSelectors.any()) .build() } /** * 頁面信息展現 */ private fun apiInfo(): ApiInfo { return ApiInfoBuilder() .title("Vote RestFul APIs文檔") .description("項目API接口文檔") .contact(Contact("ride", "", "supreDong@gamil.com")) .version("0.0.1") .build() } }
@Configuration註解代表這是一個配置類, @EnableSwagger2註解代表啓用Swagger2
經過在controller中添加註解來生成api文檔
@Api(value = "測試", description = "測試控制器") @RestController @RequestMapping("/hello") class HelloController { @GetMapping @ApiOperation("你好!世界!", notes = "返回hello world") fun hello(): String { return "hello world" } }
以後打開http://localhost:8080/swagger-ui.html能夠看到生成的接口信息
如圖, 在該頁面上還以對接口進行測試
和java下的操做是一致的, 只是把java翻譯成了kotlin
@ControllerAdvice class CustomExceptionHandler { @ExceptionHandler(ApiException::class) fun handlerApiException(e: ApiException): ResponseEntity<Result> { val result = Result(e.code, e.data) return result.ok() } @ExceptionHandler(MissingServletRequestParameterException::class) fun handMissingServletRequestParameterException(e: MissingServletRequestParameterException): ResponseEntity<Result> { val result = Result(HttpStatus.BAD_REQUEST.value(), e.message) return result.ok() } } class ApiException(val code: ResultCode, val data: HashMap<String, Any>? = null) : RuntimeException(code.msg)
首先配置JPA:
spring: jpa: show-sql: true hibernate: ddl-auto: update database: mysql
建立data類
@Entity @Table(name = "t_user") data class User( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Long = -1, @Column(nullable = false) var username: String? = null, @Column(nullable = false) var password: String? = null, @Column(nullable = false) var email: String? = null, @Column(nullable = true) var nickname: String? = null, @Column(nullable = false) var createTime: Date = Date() )
建立repository類
interface IUserService { /** * 添加一個用戶 */ fun addUser(user: User): User /** * 展現全部用戶 */ fun listAll(): List<User> /** * 刪除一個用戶 */ fun deleteUser(id: Long) }
進行單元測試
@RunWith(SpringRunner::class) @SpringBootTest class UserRepositoryTest { @Autowired private lateinit var userRepository: UserRepository @Test fun `find all user test`() { println(userRepository.findAll()) } @Test fun `add user test`() { val user = User(username = "ride", email = "supreDong@gmail.com", password = "123123", nickname = "ride") println(userRepository.save(user)) } @Test fun `delete user test`() { val user = userRepository.findById(1) println(user.orElse(null)) if (user.isPresent) userRepository.deleteById(user.get().id) } }
在單元測試而且只能在單元測試中(kotlin1.2)可使用反引號來定義方法
使用使用kotlin結合SpringBoot是一種從船新體驗, 推薦你們嘗試一下