千家信息网

如何使用kotlin集成springboot开发

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章给大家分享的是有关如何使用kotlin集成springboot开发的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、安装支持插件在 idea中安装 kotlin插件
千家信息网最后更新 2025年01月19日如何使用kotlin集成springboot开发

这篇文章给大家分享的是有关如何使用kotlin集成springboot开发的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

一、安装支持插件

idea中安装 kotlin插件(大多数情况下会默认安装了)

二、maven配置 注意

kotlin目前不支持 lombok所以不能使用或引用 lombok相关的插件或依赖包,下面是一个排除示例,同时也不支持 maven-enforcer-plugin

            com.ayouran.common            a-common            1.0.0-SNAPSHOT                                                    org.projectlombok                       lombok                             

maven的属性配置

        UTF-8        UTF-8        1.8        1.8        1.8        1.3.21                true                enable        2.2.4.RELEASE        Hoxton.SR1        2.7.0        com.lc.github.KotlinDemoApplication        4.2.1        1.3.1.Final    

必要的依赖

                           org.jetbrains.kotlin            kotlin-reflect            ${kotlin.version}                                 org.jetbrains.kotlin            kotlin-stdlib-jdk8            ${kotlin.version}            

编译部分

                                     org.jetbrains.kotlin                kotlin-maven-plugin                                    true                    ${kotlin.language.version}                                                                            org.jetbrains.kotlin                        kotlin-maven-allopen                        ${kotlin.version}                                                                                                kapt                                                    kapt                                                                            true                                                            src/main/kotlin                                src/main/java                                                                                                                            com.google.dagger                                    dagger-compiler                                    2.9                                                                                                    com.querydsl                                    querydsl-apt                                    ${querydsl.version}                                    jpa                                                                                                    org.mapstruct                                    mapstruct-processor                                    ${mapstruct.version}                                                                                                                                                    compile                                                    compile                                                                                                            src/main/kotlin                                src/main/java                                                                                                                    test-kapt                                                    test-kapt                                                                                                            src/test/kotlin                                src/test/java                                                                                                                            com.google.dagger                                    dagger-compiler                                    2.9                                                                                                    com.querydsl                                    querydsl-apt                                    ${querydsl.version}                                    jpa                                                                                                    org.mapstruct                                    mapstruct-processor                                    ${mapstruct.version}                                                                                                                                                    test-compile                                                    test-compile                                                                                                            src/test/kotlin                                src/test/java                                target/generated-sources/kapt/test                                                                                                                                org.apache.maven.plugins                maven-compiler-plugin                3.8.1                                    none                    ${java.version}                    ${java.version}                                                                        org.projectlombok                            lombok                            ${lombok.version}                                                                            org.mapstruct                            mapstruct-processor                            ${mapstruct.version}                                                                                        -Amapstruct.suppressGeneratorTimestamp=true                        -Amapstruct.defaultComponentModel=spring                                                                                                                    default-compile                        none                                                                                    default-testCompile                        none                                                                java-compile                        compile                                                    compile                                                                                        java-test-compile                        test-compile                                                    testCompile                                                                                                    org.apache.maven.plugins                maven-assembly-plugin                2.6                                                            make-assembly                        package                                                    single                                                                                                                                                ${main.class}                                                                                                                        jar-with-dependencies                                                                                                                

javakotlin混合的情况,在上面的 下加入下面的编译插件

                            org.apache.maven.plugins                            maven-compiler-plugin                            3.8.1                                                            none                                ${java.version}                                ${java.version}                                                                                                            org.mapstruct                                        mapstruct-processor                                        ${mapstruct.version}                                                                                                                                        -Amapstruct.suppressGeneratorTimestamp=true                                    -Amapstruct.defaultComponentModel=spring                                                                                                                                                                                            default-compile                                    none                                                                                                                                    default-testCompile                                    none                                                                                                    java-compile                                    compile                                                                            compile                                                                                                                                        java-test-compile                                    test-compile                                                                            testCompile                                                                                                                        

maven配置集成了 querydslmapstructdagger2的编译,基本上能满足常规的使用

三、创建入口函数类

四、编写入口函数

springboot的启动方法及 swagger的配置

@EnableAsync@EnableSwagger2@EnableScheduling@SpringBootApplicationclass KotlinDemoApplication : CommandLineRunner {    companion object {        @JvmStatic        fun main(args: Array) {            SpringApplication.run(KotlinDemoApplication::class.java, *args)        }    }    @Bean    fun api(): Docket {        return Docket(DocumentationType.SWAGGER_2)                .ignoredParameterTypes(Session::class.java)                .select()//                .apis(RequestHandlerSelectors.any())                .apis(RequestHandlerSelectors.basePackage("com.ayouran.flow.controllers"))                .paths(PathSelectors.any())                .build()                .apiInfo(ApiInfoBuilder()                        .description("ayouram-flow相关API")                        .title("ayouram-flow")                        .version("1.0")                        .build())                .pathMapping("/")    }    override fun run(vararg args: String?) {        println("*************************** ok ***********************************")    }}

五、创建数据库对象

import com.fasterxml.jackson.annotation.JsonFormatimport org.hibernate.annotations.DynamicInsertimport org.hibernate.annotations.DynamicUpdateimport java.util.*import javax.persistence.*/**** * 设备流量规则 */@Entity@Table(name = "device_rules",        indexes = [Index(name = "device_no", columnList = "device_no"),            Index(name = "rules_no", columnList = "rules_no"),            Index(name = "deleted", columnList = "deleted")],        uniqueConstraints = [UniqueConstraint(name = "device_no_rules_no", columnNames = ["device_no", "rules_no"])])@DynamicUpdate@DynamicInsertclass DeviceRules {    @Id    @Column(name = "id", columnDefinition = "bigint(20) COMMENT 'ID,自增'")    @GeneratedValue(strategy = GenerationType.IDENTITY)    var id: Long? = null    @Column(name = "device_no", columnDefinition = "varchar(18) COMMENT '设备编号'")    var deviceNo: String? = null    @Column(name = "rules_no", columnDefinition = "varchar(18) COMMENT '规则编号'")    var rulesNo: String? = null    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")    @Column(name = "create_at", columnDefinition = "datetime COMMENT '创建时间'")    var createAt: Date? = null    @Column(name = "update_at", columnDefinition = "datetime COMMENT '修改时间'")    var updateAt: Date? = null    /**     * 触发jpa update代码需要执行的逻辑     */    @PreUpdate    fun preUpdate() {        updateAt = Date()    }    /**     * 自动设置必要字段的值     */    @PrePersist    fun prePersist() {        updateAt = Date()        createAt = updateAt        deleted = BaseEnum.NOT_REMOVE.index    }}

注解使用了 hibernate的功能主要用于自动创建/更新表结构以及索引的生成,如果需要 mybatis版本的,只需要去掉这里面的注释就好。

六、创建仓库操作接口

基于 springboot-data-jparepository

@Repositoryinterface DeviceRulesRepository : JpaRepository,        JpaSpecificationExecutor, QuerydslPredicateExecutor {    fun getAllByDeviceNoAndDeleted(deviceNo: String, deleted: Int): Optional>}

七、创建一个业务接口来声明业务

interface DeviceService {      /**     * 查询设备的路由规则     */    fun queryDeviceFlowRules(aPageRequest: APageRequest): PageResult}

八、创建一个业务接口实现来实现声明的业务

@Serviceclass DeviceServiceImpl @Autowiredconstructor(privateval deviceRepository: DeviceRepository,            privateval deviceRulesRepository: DeviceRulesRepository,            privateval querydslUtlis: QuerydslUtlis,            privateval deviceMapstruct: DeviceMapstruct) : DeviceService {    privateval logger = LoggerFactory.getLogger(javaClass)        override fun queryDeviceFlowRules(aPageRequest: APageRequest): PageResult {        val qDeviceRules = QDeviceRules.deviceRules        val qFlowRules = QFlowRules.flowRules        var rredicate: Predicate? = null        if (StringUtils.isNotBlank(aPageRequest.query)) rredicate = qDeviceRules.deviceNo.eq(aPageRequest.query)        val exprs = arrayOf>(qDeviceRules.deviceNo, qDeviceRules.deleted, qFlowRules.rulesNo, qFlowRules.flowMax,                qFlowRules.startTime, qFlowRules.endTime)        val results = querydslUtlis.getQueryFactory()                .select(*exprs)                .from(qDeviceRules)                .where(ExpressionUtils.allOf(rredicate))                .leftJoin(qFlowRules)                .on(qDeviceRules.rulesNo.eq(qFlowRules.rulesNo))                .orderBy(qDeviceRules.createAt.desc())                .offset((aPageRequest.pageIndex!! - 1) * aPageRequest.pageSize!!)                .limit(aPageRequest.pageSize!!)                .fetchResults()        return PageUtlis.retPage(results, querydslUtlis.getCollection(results.results, exprs, QueryDeviceFlowRulesVO::class.java) as Collection)    }}

这里使用了 querydsl来完成一个多表查询

九、创建一个 http服务接口

@RestWrapper@RestController@RequestMapping("/device")@Api(value = "device", description = "设备相关接口", tags = ["device"])class DeviceController @Autowiredconstructor(privateval deviceService: DeviceService) {    @GetMapping("/query_device")    fun queryDevice(aPageRequest: APageRequest) = deviceService.queryDevice(aPageRequest)    @GetMapping("/query_device_flow_rules")    fun queryDeviceFlowRules(aPageRequest: APageRequest) = deviceService.queryDeviceFlowRules(aPageRequest)}

至此完成一个基本的开发过程,大多数情况下可以直接将 java代码粘贴到 kotlin文件中,会自动转换成合适的 kotlin代码(偶尔需要自己调整,毕竟编辑器不是万能的)

感谢各位的阅读!关于"如何使用kotlin集成springboot开发"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

接口 业务 插件 设备 配置 开发 代码 情况 规则 面的 支持 编译 必要 入口 内容 函数 时间 更多 篇文章 UTF-8 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 以行为为中心的网络安全保护 中国网络安全部长 兰州市洛枫软件开发有限责任公司 学生成绩分析系统数据库课程设计 兰州双创互联网科技 网络安全相关宣传 亚马逊云网络技术有限公司 电脑服务器中硬盘的作用 苹果适合女生软件开发 软件开发和编程学哪个好 文件服务器常见类型 北京嵌入式软件开发定制费用 宿迁工业网络技术联系方式 个人服务器主机出租 网络安全教育培训视频 郑州软件开发行业哪里多 网络安全技能大赛网上报名 上海管理网络技术服务报价 网络安全教育2000 安卓使用数据库模拟中英文词典 数据库视图一直重新编译 杭州乾庄网络技术有... 软件开发个体工商户取名 电子商务网络安全结构图 武汉市网络安全大会 腾讯云服务器存储扩容 数据库添加不成功id不连续 风云天下手游ol服务器查询 数据库中如何增加id号设为主键 财务软件开发模板
0