为了账号安全,请及时绑定邮箱和手机立即绑定

【Demo】Gradle + Kotlin + Spring Boot + Mybatis

标签:
MySQL

1 框架介绍

这个Demo也可以说是一个轻量级服务器应用,其架构使用 Gradle + Kotlin + Spring Boot + Mybatis + MySQL。其中:

Gradle

Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化构建开源工具。它使用一种基于 Groovy 的特定领域语言 (DSL) 来声明项目设置,抛弃了基于 XML 的各种繁琐配置。支持maven, Ivy仓库,支持传递性依赖管理

Kotlin

Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。Kotlin 已正式成为 Android 官方支持开发语言

Spring Boot

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot 致力于在蓬勃发展的快速应用开发领域 (rapid application development) 成为领导者。其主要特点有:

  • 1.创建独立的Spring应用程序

  • 2.嵌入的Tomcat,无需部署WAR文件

  • 3.简化Maven配置

  • 4.自动配置Spring

  • 5.提供生产就绪型功能,如指标,健康检查和外部配置

  • 6.绝对没有代码生成并且对XML也没有配置要求

Mybatis

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集

MySQL

MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件

RESTful

一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。即 URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作——@Ivony


2 项目结构及开发环境

Demo使用的是 IntelliJ IDEA 开发运行,该项目的文件结构大致如下:

├── build.gradle├── gradle├── gradlew.bat├── settings.gradle└── src
    ├── main
         ├── java
         ├── kotlin
         │   └── com
         │       └── cloud
         │           ├── MyApplication.kt
         │           ├── controller
         │           │   ├── UserController.kt
         │           │   └── TestController.kt
         │           ├── dao
         │           │   └── UserRepository.kt
         │           └── model
         │               └── User.kt
         ├── resources
         │   ├── application.yml
         └── webapp
             └── index.jsp

项目无需运行在 Tomcat,因为Spring Boot 自带了一个 Tomcat。main 函数入口在 MyApplication.kt 中,只需要双击该文件,然后点击 main 函数 左边的绿色右箭头,点击 Run 既可以运行项目

webp


3 使用 IntelliJ IDEA 创建项目

3.1 创建 Kotlin 的 web 项目

第一步

webp

第二步

webp

第三步

webp

最后 Finish 即可

3.2 配置 build.gradle

增加 Spring Boot、Mybatis、MySQL、JSP、pagehelper 的依赖

其中,pagehelper 是 MyBatis 分页插件,支持任何复杂的单表、多表分页

buildscript {
    ext {
        kotlin_version = '1.1.2'
        springBootVersion = '2.0.1.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {        // Kotlin
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        // Spring-boot
        classpath "org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion"
    }
}

plugins {
    id 'java'
    id 'org.jetbrains.kotlin.jvm' version '1.2.51'
    id 'war'}

group 'com.cloud'version '1.0-SNAPSHOT'sourceCompatibility = 1.8repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    testCompile group: 'junit', name: 'junit', version: '4.11'
    testCompile group: 'junit', name: 'junit', version: '4.12'}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    testCompile group: 'junit', name: 'junit', version: '4.12'
    // Kotlin
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
    compile("org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version")
    compile("org.jetbrains.kotlin:kotlin-reflect:$kotlin_version")    // Spring-boot
    compile("org.springframework.boot:spring-boot-starter-web:$springBootVersion")    // Mybatis
    compile 'org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2'
    // 支持jsp
    compile 'org.apache.tomcat.embed:tomcat-embed-jasper:9.0.7'
    // jsp的jstl表达式
    compile 'javax.servlet:jstl:1.2'
    // mysql
    compile('mysql:mysql-connector-java:5.1.13')    // pagehelper
    compile group: 'com.github.pagehelper', name: 'pagehelper', version: '4.1.0'}

3.3 创建数据库表并配置 application.yml

首先在本地创建一个 MySQL 数据库,然后新建一个 user 表,列属性为 id int,name varchar(20)

然后配置 application.yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/KotlinDemo
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

3.4 创建 User 类

package com.cloud.modelclass User {    var id: Int = 0
    var name:String? = null}

3.5 创建应用入口 MyApplication

package com.cloudimport com.github.pagehelper.PageHelperimport org.mybatis.spring.annotation.MapperScanimport org.springframework.boot.SpringApplicationimport org.springframework.boot.autoconfigure.SpringBootApplicationimport org.springframework.context.annotation.Beanimport java.util.*@MapperScan("com.cloud.dao")@SpringBootApplicationopen class MyApplication()fun main(args: Array<String>) {
    SpringApplication.run(MyApplication::class.java, *args)

    @Bean
    fun pageHelper() : PageHelper {
        System.out.println("=========MyBatisConfiguration.pageHelper()");        val pageHelper = PageHelper();        val p = Properties();
        p.setProperty("offsetAsPageNum", "true");
        p.setProperty("rowBoundsWithCount", "true");
        p.setProperty("reasonable", "true");
        pageHelper.setProperties(p);        return pageHelper;
    }
}
  • @MapperScan 用来配置扫描该包名以下的 Dao 接口

  • pageHelper() 是用来设置PageHelper插件(当然,PageHelper 的设置方法不仅仅只有这个,他的功能也不仅仅如此)

3.6 创建 UserController 类

我习惯是先写控制类,然后再写 Dao 接口

PS:由于逻辑比较简单,所以省略了 Service 层,也将 SQL语句 直接以注解的形式绑定在 Dao 层

package com.cloud.controllerimport com.cloud.dao.UserDaoimport org.apache.ibatis.annotations.Paramimport org.springframework.beans.factory.annotation.Autowiredimport org.springframework.web.bind.annotation.*@RestControllerclass UserController {    @Autowired
    lateinit var userDao: UserDao    @GetMapping("/all")
    fun getAllUser() : Any {        val users = userDao.getAllUser()        return users
    }    @PostMapping("/user")
    fun createUser(@Param("id") id : Int, @Param("name")name : String) : Any {
        userDao.createUser(id, name)        return getAllUser()
    }    @DeleteMapping("user")
    fun deleteUserById(@Param("id") id : Int) : Any {
        userDao.deleteUserById(id)        return getAllUser()
    }    @PutMapping("/user")
    fun updateUserById(@Param("id") id : Int, @Param("name")name : String) : Any {
        userDao.updateUserById(id, name)        return getAllUser()
    }    @GetMapping("/user")
    fun getUserById(id : Int) : Any {        val user = userDao.getUserById(id)        return user
    }    @GetMapping("/list")
    fun getUserList(@Param("currentPage") currentPage : Int, @Param("pageSize") pageSize : Int) : Any {        val currentPageNew = (currentPage - 1) * pageSize        val users = userDao.getUserList(currentPageNew, pageSize)        return users
    }

}



作者:苍云横渡
链接:https://www.jianshu.com/p/3fd0bdb8f268


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消