如何使用kotlin集成springboot开发
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,这篇文章给大家分享的是有关如何使用kotlin集成springboot开发的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、安装支持插件在 idea中安装 kotlin插件
千家信息网最后更新 2025年11月11日如何使用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安全错误
数据库的锁怎样保障安全
中国网络安全大赛是什么比赛
三点科创网络技术有限公司
服务器为什么要备案
网络技术的自我评价
任天堂账号与服务器连接断开
2021计算机三级网络技术真题
徐州浪潮服务器哪个厂家质量好
网络安全师是国家几级
中国电信网络技术二面会提问什么
金华高防服务器
服务器安全防护工作
西安网络安全违法举报网站
最早提出的软件开发模型
海加加密存储服务器
amax深度学习服务器
玉溪自学java软件开发
服务器怎么连接网络
app服务器端安全
我的世界纯净版服务器
堡垒之夜无法登录服务器
网络安全模式连无线
云南超级服务器云主机
网络安全教育体会400字左右
pop3服务器怎么设置身份验证
分散服务器
医药软件开发专业排名
4月27日网络安全审查办法
ctf网络安全大赛的人
网络技术学什么赚钱
在国内看国外网站买什么服务器