优雅解决kotlin中mybatis (plus)无法正确映射data class问题

当使用Kotlin和MyBatis时,可能会遇到因缺少无参构造函数导致的错误。文章介绍了问题的由来,并提出了一种优雅的解决方案——使用JetBrains的NoArg注解。通过在pom.xml中配置Kotlin Maven插件,添加NoArg插件和注解,可以在不破坏代码优雅性的情况下,为数据类生成无参构造函数。只需在数据类上添加@NoArg注解,问题即可解决。

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Error instantiating class com.keysking.affairs.domains.user.entity.UserRole with invalid types (long,Role) or values (4,null). Cause: java.lang.reflect.InvocationTargetException

如果你在使用kotlin和mybatis,那你非常有可能碰见上面的问题,
这个问题出现的原因,是mybatis企图寻找一个无参构造函数,
但是data class并没有提供一个无参构造函数.

@TableName("user_role")
class UserRole(
    var user: Long,
    var role: Role
) : BaseEntity()

于是,你到网络上寻找答案,找到了一种解决方案:

@TableName("user_role")
class UserRole(
    var user: Long?=null,
    var role: Role?=null
) : BaseEntity()

这可把视编程为艺术的你恶心坏了,原本优雅的kotlin,因此充满了?和!!
你在想,有没有更好的解决办法…你苦苦寻找,却没有结果
直到…你看到了本文(滑稽)

优雅解决方案

其实,类似的这种情况,伟大的jetbrains早已帮我们想到了,于是他给我们提供了NoArg解决方案.

通过这种方案,在最终生成的字节码中,将会为data class生成一个无参构造方法,但是在kotlin的编写过程中,你却找不到这个构造方法的踪影. 优雅,高效!

接下来提供maven的解决办法(gradle的可以看这里)

首先,在你的工程中新建一个注解,叫做NoArg,例如这样:

package com.keysking.demo
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值