Kotlin之在Gradle中无参(no-arg)编译器插件的使用详解
作者:lindroid 发布时间:2023-07-31 19:11:43
1、前言
最近在用Kotlin+Spring Boot写一个后端项目,实体类习惯性地用了Kotlin中的data class,但是Spring要求要有一个无参的构造函数,否则可能会抛出java.sql.SQLDataException。要使data class能够生成一个无参的构造函数,有两种方法可以做到:
1.给data class的构造函数中的每一个参数都赋上默认值。比如:
data class User(
@TableId(value = "id", type = IdType.AUTO)
var id: Int?=-1,
var userName: String?=null, //用户名
var age: Int?=null, //年龄
var password: String?=null, //密码
var name: String?=null, //姓名
var email: String?=null //邮箱
) : Serializable
2.使用无参编译器插件no-arg。下面我们就来看看这种方法。
2、具体步骤
2.1 添加插件依赖
首先需要在工程的build.gradle中添加no-arg插件的依赖,版本跟Kotlin的版本一致:
plugins {
……
id "org.jetbrains.kotlin.plugin.noarg" version "1.3.41"
}
我用的是plugins的形式,如果你使用的是buildscript 块的话就可以这样添加:
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-noarg:1.3.41"
}
}
apply plugin: "kotlin-noarg"
2.2 指定无参注解列表
说实话,在看官方文档时这一步并不好理解,这里只描述我经过自己的实践之后得出的经验。首先创建一个注解类,类名我们可以定为NoArg:
annotation class NoArg
然后最关键一步来了,回到工程的build.gradle文件,添加无参注解列表:
noArg {
annotation("com.lindroid.projectname.annotation.NoArg")
}
annotation中的路径就是我们创建的NoArg注解类所在的包目录。路径一定要写好,不要出错!此时无参插件就已经配置好了。我们可以在data class前面添加@NoArg注解,这样编译器就能为其生成一个无参构造函数。使用示例如下:
@NoArg
data class User(
@TableId(value = "id", type = IdType.AUTO)
var id: Int?,
var userName: String?, //用户名
var age: Int?, //年龄
var password: String?, //密码
var name: String?, //姓名
var email: String? //邮箱
) : Serializable
2.3 kotlin-jpa中的无参注解
如果你的项目中已经添加了kotlin-jpa插件,那么基本上就不必单独添加无参插件了。kotlin-jpa对无参插件做了包装,当你使用 @Entity、 @Embeddable 与 @MappedSuperclass这几个注解时,都会默认支持无参注解的。
3、参考文章
Kotlin官方文档
来源:https://segmentfault.com/a/1190000020958806


猜你喜欢
- 概述在kafka中,或者是说在任何消息队列中都有个消费顺序的问题。为了保证一个队列顺序消费,当当中一个消息消费异常时,必将影响后续队列消息的
- 1、为什么使用缓存  我们知道内存的读取速度远大于硬盘的读取速度。当需要重复地获取相同数据时,一次一次地
- 一.Mybatis-Plus——sum聚合函数//总收益 Order order =new Orde
- 对不起大家,昨天文章里的告别说早了,这个系列还不能就这么结束。我们前面的文章中讲解过RabbitMQ的用法,所谓MQ就是一种发布订阅模式的消
- 1 顺序结构顺序结构比较简单,就是代码一行一行的执行,本节之前写的所有代码都是顺序结构。例如:public static void main
- 1. pom.xml文件配置<?xml version="1.0" encoding="UTF-8&qu
- 项目需要去调用.NET的WebSrevice,本身是Java,研究了半天,终于有些头绪,记下来。1,新建.NET WebService。只在
- mybatis初始化SqlSessionFactory失败总结原因有几点1.resources中的xml配置文件放错位置或者是放的太深加载不
- 本文实例讲述了Android开发中使用颜色矩阵改变图片颜色,透明度及亮度的方法。分享给大家供大家参考,具体如下:一、如图二、代码实现publ
- 状态活动存放在一个叫返回栈的一个集合,当重新打开一个Activity时,它就会出现在栈顶。当要销毁该活动时,调用finish()或back,
- 本文实例讲述了C#实现为类和函数代码自动添加版权注释信息的方法,分享给大家供大家参考之用。具体方法如下:以web项目为例:一:给类加注释1.
- 1、字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。char str[10]={ 'I'
- 基于SSM框架的仓库管理系统功能:系统操作权限管理。系统提供基本的登入登出功能,同时系统包含两个角色:系统超级管理员和普通管理员,超级管理员
- 本文实例讲述了Android编程应用风格和主题。分享给大家供大家参考,具体如下:当你设计你的程序的时候,你可以用风格和主题来统一格式化各种屏
- 废话不多说了,具体代码如下所述:staticvoid Main(string[] args){ st
- 1、HashMap HashMap继承抽象类AbstractMap,实现接口Map、Cloneable, Serializable接口。Ha
- 代码如下所示: public static Bitmap
- 前言本文告诉大家一些 ValueTuple 的原理,避免在使用出现和期望不相同的值。ValueTuple 是 C# 7 的语法糖,如果使用的
- 原文地址:http://www.javayihao.top/detail/84一:概述由于springboot项目,不管是java工程还是w
- 通过JDK的Proxy代理实现对业务类做简单的AOP实现接口:UserService 包含的方法为切入点,会被代理拦截类:UserServi