如何使用kotlin集成springboot开发
发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,这篇文章给大家分享的是有关如何使用kotlin集成springboot开发的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、安装支持插件在 idea中安装 kotlin插件
千家信息网最后更新 2024年11月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} 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} 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安全错误
数据库的锁怎样保障安全
物流自动化服务器
学哲学的网络安全总监
华为 录播服务器
华为云服务器登录快捷键
服务器返回状态
计算机网络技术协会
java和数据库注册qq
lol对局进入服务器无法连接
实时海康流媒体服务器
仪征新百网络技术
第六届网络安全技能大赛
商务局网络安全方案
软件开发工作室是什么意思
半年网络安全总结
武汉容易装互联网科技
服务器速建视频教程
国际贸易合同风险数据库
魔兽世界三区服务器排名
现在lol是不是服务器有问题啊
怎么查论文上了万方数据库
戴尔t440服务器启动选项
恭喜发财服务器能成为火区吗
网络安全意识教育培训视频
信息网络安全行业占有率
浪潮软件开发类笔试
软件开发java了解
宝山区优势软件开发试验设备
打一网络技术
服务器业务上线
数据库一般要维修多久