Kotlin 实战小记:No-Arg 引用解决 No constructor found的问题

news2024/10/6 10:37:08

一、问题

新的项目试用一下kotlin, 调用数据库查询数据的时候报了这个问题:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: No constructor found in com.neusoft.collect.entity.cm.CmRoom matching [java.lang.String, java.lang.String, java.lang.String, java.lang.Integer, java.lang.String, java.lang.Double, java.lang.Double]

二、原因

因为使用的是kotlin data class,通过mybatis查询返回不是data class中全部的字段,kotlin创建对象本身是没有无参构造器的,Java默认包含无参构造器;data class 是要返回所有字段,而业务不需要返回所有字段,这是问题出现的所在。

三、处理办法

通过引用No-Arg 插件,官网地址:No-arg compiler plugin | Kotlin Documentation

四、工程样例

注意:  <option>no-arg:annotation=com.neusoft.collect.config.NoArg</option> 和 创建的annotation class 路径保持一致

1、maven 部分引包

   <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <springfox.swagger3.version>3.0.0</springfox.swagger3.version>
        <kotlin.version>2.0.0</kotlin.version>
    </properties>

   <dependencies>
      <dependency>
         <groupId>org.jetbrains.kotlin</groupId>
         <artifactId>kotlin-maven-noarg</artifactId>
         <version>${kotlin.version}</version>
       </dependency>
    </dependencies>

   <build>
        <plugins>
            <plugin>
                <artifactId>kotlin-maven-plugin</artifactId>
                <groupId>org.jetbrains.kotlin</groupId>
                <version>${kotlin.version}</version>
                <configuration>
                    <compilerPlugins> <!-- Or "jpa" for JPA support -->
                        <plugin>no-arg</plugin>
                    </compilerPlugins>
                    <pluginOptions>
                        <option>no-arg:annotation=com.neusoft.collect.config.NoArg</option>
                        <!-- Call instance initializers in the synthetic constructor -->
                        <!-- <option>no-arg:invokeInitializers=true</option> -->
                    </pluginOptions> </configuration>
            </plugin>
          
        </plugins>
    </build>

2、创建 annotation class

package com.neusoft.collect.config

/**
 * @author zc
 * @date 2024/06/18 10:31
 * @desc
 */
annotation class NoArg

3、data class 样例 引用 annotation class NoArg

package com.neusoft.collect.entity.cm


import com.neusoft.collect.config.NoArg
import java.io.Serializable

/**
 * @author zc
 * @date 2024/06/05 16:33
 * @desc 机房
 */
@NoArg
data class CmRoom(
    /**
     * 多云统一名称
     */
    var mc_uniform_name: String,

    /**
     * 详细地址
     */
    var detailed_address: String,

    /**
     * 机楼名称
     */
    var building_name: String,

    /**
     * 机房所在楼层
     */
    var floor: Int,

    /**
     * 机房房间号
     */
    var room_num: String,

    /**
     * 机房总行数
     */
    var row_count: Int?,

    /**
     * 机房总列数
     */
    var column_count: Int?,

    /**
     * 规划机架数
     */
    var project_rack_count: Int?,

    /**
     * 占用机架数
     */
    var occupation_rack_count: Int?,

    /**
     * 共用情况 枚举值:仅省级云使用、与其他业务共用
     */
    val share_statistic: String = "仅省级云使用",

    /**
     * 机房数据维护责任人
     */
    val data_maintain_vendor: String = "李剑春",

    /**
     * 关联资源池节点
     */
    var rel_res_pool_id: String,

    /**
     * 所属数据中心
     */
    val rel_dc_id: String = "JX001CPC-RP-JX-01",

    /**
     * 资源ID
     */
    var resource_id: String
): Serializable

4、mapper 样例: 返回部分字段

 /**
     * Room
     * 机房
     * @return
     */
    @Select(
        "SELECT  name AS mc_uniform_name," +
                " address AS detailed_address," +
                " building_name," +
                " floor," +
                " '001' AS room_num," +
                " #{province} + '004' + pool_alias AS rel_res_pool_id," +
                " #{province} + '002' + instance_id AS resource_id" +
                " FROM cm_room_t"
    )
    fun room(province: String): List<CmRoom>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1834487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AMEYA360代理品牌 | 思瑞浦发布高精度12位8通道SAR ADC-TPC502200

聚焦高性能模拟芯片和嵌入式处理器的半导体供应商思瑞浦3PEAK(股票代码&#xff1a;688536)全新推出TPC502200&#xff0c;支持I2C接口的12位8通道SAR ADC。 TPC502200集成了高精度基准源&#xff0c;同时可在极端温度范围(-40C至125C)下稳定工作。TPC502200凭借强大的性能优势…

前端工具篇

在线工具 https://tool.lu/ 程序员工具箱 http://tool.pfan.cn/apitest 配色 https://webkul.github.io/coolhue/ 在线字符串和16进制互转 https://kw360.net/ox2str/ 代码美化截图 https://carbon.now.sh/?bgrgba 菜鸟工具 https://www.jyshare.com/ 文件格式转换 htt…

【Altium】PCB设计中如何设置同一网络的间距规则

【更多软件使用问题请点击亿道电子官方网站】 1、文档目标&#xff1a; 对同一网络的各个元素间设置间距规则 2、应用场景&#xff1a; PCB设计规则中&#xff0c;当对网络设置间距规则时&#xff0c;默认的约束对象是不同的网络之间才生效&#xff0c;在一些特殊情况下&am…

关系模式的规范化设计概述-认识“好”的数据库模式、数据依赖

一、引言 前面学习了关系数据库的基本概念&#xff0c;关系模型的组成要素&#xff0c;关系数据库的标准查询语言SQL 三部分的内容&#xff0c;为了使得关系模式设计能够有一个标准&#xff0c;Codd提出了指导关系模式设计的规范 理论 二、为学生选课数据库添加院系表 1、…

[巨详细]安装HBuilder-X教程

文章目录 下载HBuilder-X点击网址 &#xff0c;打开官网先点击所有产品&#xff0c;再点击HBuilder-X。进入HBuilder-X官网页面点击more&#xff0c;选择适合的版本下载。等待下载打开压缩包&#xff0c;点击HBuilderX.exe选择喜欢的风格关闭该弹窗&#xff0c;选择创建就创建成…

郑州设计资质延续流程:人员社保的审核标准是什么?

郑州设计资质延续流程中&#xff0c;人员社保的审核标准如下&#xff1a; 一、社保缴纳期限 审核标准&#xff1a;人员&#xff08;技术负责人、注册人员等&#xff09;的社保考核期限恢复为3个月。需要提供相关人员至少连续3个月的社保缴纳记录。 二、社保缴纳主体 审核标准…

【Pandas驯化-06】一文搞懂Dataframe中的索引stack、unstack问题

【Pandas驯化-06】一文搞懂Dataframe中的索引stack、unstack问题 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内容文档获取 微信公…

macbook屏幕录制技巧,这2个方法请你收好

在当今数字化时代&#xff0c;屏幕录制成为了一项不可或缺的技能&#xff0c;无论是教学演示、游戏直播&#xff0c;还是软件操作教程&#xff0c;屏幕录制都能帮助我们更直观地传达信息。MacBook作为苹果公司的标志性产品&#xff0c;其屏幕录制功能也备受用户关注。本文将详细…

GeoJson 地图地理信息数据获取

效果图&#xff1a; 获取渠道&#xff1a; 通过阿里数据可视化平台获取通过Vector Maps获取通过geojson来获取 1、通过阿里数据可视化平台获取 2、通过Vector Maps获取 3、通过geojson获取

618数码好物有哪些?热门榜单强势出炉

大家好&#xff01;随着6.18购物狂欢节的来临&#xff0c;我可以明白在面对非常吸引人的商品时&#xff0c;“选择困难症”就上来了。因此&#xff0c;为了帮助大家在这场购物盛事中有方向&#xff0c;我特意结合个人使用体验和市场研究&#xff0c;为大家筛选了几件既具有超高…

【启明智显产品介绍】Model4 工业级HMI芯片详解系列专题(一):芯片性能

Model4 工业级HMI芯片详解系列专题&#xff08;一&#xff09;【芯片性能】 Model4系列工业级MPU是国产自主面向工业应用的RISC-V架构的应用级芯片&#xff0c;内置玄铁64bit RISC-V CPU C906&#xff0c;主频高达600MHz&#xff0c;算力约1380DMIPS。 Model4系列工业级MPU具…

课程设计——基于FPGA的交通红绿灯控制系统(源代码)

摘要&#xff1a; 本课程设计旨在设计一个基于FPGA&#xff08;现场可编程门阵列&#xff09;的交通红绿灯控制系统。该系统模拟了实际道路交叉口的红绿灯工作场景&#xff0c;通过硬件描述语言&#xff08;如Verilog或VHDL&#xff09;编写源代码实现。系统包含三个主要部分&a…

DAY6-力扣刷题

1.下一个排列 31. 下一个排列 - 力扣&#xff08;LeetCode&#xff09; 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组…

2024年移动端技术探索

2024年移动端技术探索 引子 2023年号称AI元年&#xff0c;AI带来了一些不是很清晰的机会&#xff0c;没有看到有多好的落地&#xff0c;对于互联网&#xff0c;不止技术层面没有突破&#xff0c;业务层面的需求也断崖式下滑&#xff0c;没有创新就没有需求&#xff0c;老业务…

Folly,一个强大的C++库

目录 1.引言 2.Folly库的特点 3.Folly库的应用场景 4.示例代码 5.总结 1.引言 Folly 是Facebook开发的一个开源、无许可&#xff08;Apache 2.0&#xff09;的现代C库&#xff0c;旨在提升性能和简化编写复杂任务的工作流程。它包含了一系列用于系统级编程的工具&#xff…

联华集团:IT团队如何实现从成本中心提升至价值中心|OceanBase 《DB大咖说》(十)

OceanBase《DB大咖说》第 10 期&#xff0c;我们邀请到了联华集团的CTO楼杰&#xff0c;来分享他如何思考 IT 业务价值&#xff0c;以及联华华商数据库的升级实践。 楼杰从大学毕业后就进入了联华工作&#xff0c;并一直扎根在近 20 年的&#xff0c;从一名底层的技术员成长为…

Swift Combine — Future和Promise的使用

平时在开发的过程中&#xff0c;免不了进行异步编程&#xff0c;比如进行网络请求&#xff0c;以前异步编程的时候主要采用两种方法&#xff1a; 通过代理方法&#xff0c;设置代理&#xff0c;实现代理方法。通过闭包block块处理。 采用第一种方法代码分家&#xff0c;不利于…

eNSP学习——配置DHCP中继

目录 主要命令 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、基本配置 2、搭建OSPF网络 3、配置DHCP服务器 4、配置DHCP中继 5、配置PC获取地址方式为DHCP 主要命令 //配置指定DHCP服务器的方法 //方法一&#xff1a;在面向PC的接口下直接配置DHCP服…

CentOS 7.9上创建的JBOD阵列恢复(二)

系列文章目录 CentOS 7.9上创建JBOD&#xff08;一&#xff09; CentOS 7.9检测硬盘坏区、实物定位&#xff08;三&#xff09; 文章目录 系列文章目录前言一、用命令查看是否认到盘二、直接组JBOD三、挂载到新目录四、查看原数据总结 前言 在CentOS 7.9上创建了一个软阵列JB…

游戏运营与发行:从入门到实践

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…