如何使用kotlin集成springboot开发
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章给大家分享的是有关如何使用kotlin集成springboot开发的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、安装支持插件在 idea中安装 kotlin插件
千家信息网最后更新 2026年11月02日如何使用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
有 java与 kotlin混合的情况,在上面的 下加入下面的编译插件
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配置集成了 querydsl、mapstruct、dagger2的编译,基本上能满足常规的使用
三、创建入口函数类
四、编写入口函数
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-jpa的 repository
@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安全错误
数据库的锁怎样保障安全
互联网科技有限公司经营范围
深圳互联网科技公司
金融科技与互联网金融
互联网科技金融公司
深圳互联网络科技有限公司
艾特科技互联网
友谊互联网络科技
兼蜜互联网科技
齐家互联网科技有限公司
宁夏科技产业互联网案例
彤创互联网科技有限公司
中国科技创新与世界互联网大会
东莞新华互联网科技学校
互联网科技创新的路径
互联网企业科技类企业如何做账
雨阳互联网卡科技有限公司
上海同邻互联网科技有限公司规模
抖集互联网科技技术咨询
伍佰万互联网科技是干嘛的
前海云享互联网科技
广州凡科互联网科技
互联网科技咨询
盛创互联网科技有限公司
天速互联网络科技有限公司
互联网对科技的发展
哈尔滨屹滨互联网科技有限公司
徐州市互联网科技有限公司
滨湖区互联网智能科技产品有哪些
世界互联网科技成果奖
深圳互联网科技园地址