• 创建基于kotlin开发环境的spring项目入门


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

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

    新建项目,类型是spring
    https://images.cnblogs.com/cnblogs_com/somefuture/1863121/o_210226013327si.png

    在下一步选择kotlin语言
    https://images.cnblogs.com/cnblogs_com/somefuture/1863121/o_210226013334np.png

    后面选择需要依赖的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就更新

  • 相关阅读:
    切片
    类型断言
    方法表达式
    接口
    函数式编程
    多人聊天室
    反射
    yarn基础解释
    webpack基础概念
    ssh登陆报错:packet_write_wait: Connection to x.x.x.x port 22: Broken pipe
  • 原文地址:https://www.cnblogs.com/somefuture/p/14450753.html
Copyright © 2020-2023  润新知