kotlin中使用mapstruct
前言
我们在java中使用mapstruct只需要简单的引入我们的相关的maven依赖就可以了,但是在kotlin中我们无法直接使用java的形式来处理,那么接下来我们将实现如何在kotlin中来使用我们的mapstruct。
创建实体和我们的dto以及我们的mapper
首先我们创建一个kotlin的项目,然后在我们的kotlin项目中分别创建以下的实体:
实体Flight
package com.kotlin.mapstruct.demo.entity
class Flight {
var flightId: Int? = null
var flightName: String? = null
}
转换以后的实体FlightDto
package com.kotlin.mapstruct.demo.dto
class FlightDto {
var flightId: Int? = null
var flightNewName: String? = null
}
转换的工具类FlightConverter
package com.kotlin.mapstruct.demo.mapper
import com.kotlin.mapstruct.demo.dto.FlightDto
import com.kotlin.mapstruct.demo.entity.Flight
import org.mapstruct.Mapper
import org.mapstruct.Mapping
import org.mapstruct.Mappings
@Mapper(componentModel = "spring")
interface FlightConverter {
/**
* 功能描述: 实现实体的转换
*/
@Mappings(Mapping(target = "flightNewName", source = "flightName"), Mapping(target = "flightId", source = "flightId"))
fun convertToDto(flight: Flight) : FlightDto
/**
* 功能描述: 实现集合的转换
*/
fun convertToDtos(flights: List<Flight>) : List<FlightDto>
}
构建项目
到此处我们的整个实现的流程和我们的java是一致的,如果是基于我们的java工程我们只需要clean下然后编译下就可以了,但是在我们的kotlin中这样是不行的我们必须按照以下步骤来实现。
clean项目=》build项目【或者ctrl+F9】=》使用kotlin:kpta插件=》build项目【或者ctrl+F9】这样才算完成我们的mapper的生成。
打包项目
接着是我们的项目打包,当我们使用到mapstruct插件的时候不能直接package进行打包这样打出来的包是没有生成我们的mapper的实现的我们需要按照以下的方式进行打包:
clean项目=》build项目【或者ctrl+F9】=》使用kotlin:kpta插件=》package项目
懒人解决方案
我们还可以直接使用组合的maven的命令的形式来组合我们自定义的打包或者编译的实现,直接新建一个maven命令来实现打包一体化
clean compile kotlin:kapt package
编译的我们也可以一样的方式来实现
clean compile kotlin:kapt compile
有不理解的地方大家可以直接到github上直接下载本章节的demo例子自己验证整个的过程:https://github.com/lazyboyl/kotlin-mapstruct-demo