Giter VIP home page Giter VIP logo

beanmappingkey's Introduction

BeanMappingKey

GitHub Stars GitHub Forks GitHub Watchers

简体中文 | English

一键生成两个实体类之间的字段映射代码,用于代替 BeanUtil 与 MapStruct 等工具。


安装指南

  • Windows 系统上安装:
    • File > Settings > Plugins > Browse repositories... > Search for "BeanMappingKey" > Install Plugin
  • MacOS 系统上安装:
    • Preferences > Settings > Plugins > Browse repositories... > Search for "BeanMappingKey" > Install Plugin
  • 手动安装:
    • 下载 latest release 之后, 选择 Preferences > Plugins > Install plugin from disk...

注:暂且只支持 2020 以上版本的 IDEA,安装之后无需重启。


使用指南

在 Java 开发的过程中,经常会使用众多包装型的对象如:BO、VO、DTO,它们之间往往只有两三个字段的差异, 而对它们进行相互转换则是一项耗时耗力的体力活,所以 Java 生态中就衍生出了 BeanUtilMapStruct 这种工具, 然而 BeanUtil 无法查看对象转换细节,MapStruct 有时则会遇到对象转换不尽如人意的情况,此时你仍需手动编写对象转换代码。


BeanMappingKey 就是为了解决繁琐的手动对象转换而开发的,它(暂时)一共有三种用法:

  • 选中一个带有返回值和参数的方法,使用快捷键 Ctrl+M 或者右键点击 BeanMappingKey, 就能自动插入相关转换代码。
  • 选中一个变量,使用快捷键 Ctrl+M 或者右键点击 BeanMappingKey,就能自动生成转换代码到粘贴板。
  • 选中一个类,使用快捷键 Ctrl+M 或者右键点击 BeanMappingKey,就能自动生成转换代码到粘贴板。

以上生成逻辑中,若有 Builder 内部类则优先生成 Builder 代码,其次生成 Set 型代码。

Tip: 在最新的 2.X 版本中,它连嵌套对象也可以生成了,比如一个 User 对象中包含了一个 Address 对象, 那么它将会将这两个对象都生成出来,并且自动赋值。


代码生成指南

仔细阅读代码生成指南可以帮助你理解本插件生成代码的逻辑,倘若你在使用中遇到问题可以更好的判断是插件问题还是用法问题。

Q1: 怎么判断一个类会生成 Builder 代码还是 Set 代码 ?

A: 如果此类中有一个以 Builder 结尾的内部类则会生成 Builder 代码,倘若没有则会生成 Set 型代码, Set 型代码则是通过寻找类中以 SetXXX 开头的方法来判断的。

如果生成的类是一个嵌套对象,请务必保证父对象和子对象都是 Builder 代码 或者 Set 型代码,因为判断时只会通过父对象来判断, 如果父对象是 Builder 代码而子对象是 Set 型代码则在生成子对象代码时出现一些错误代码,如果这种情况无法避免,可以将生成的错误代码删除,再点击子对象类单独生成。

Q2: 通过方法参数和返回值进行代码生成时,是用什么逻辑做匹配 ?

A: 首先我会拿到所有方法参数,依次将他们的变量名取出,接着对返回值的变量名做匹配,所以是通过变量名匹配。

Q3: 在使用的过程中插件无反应,是什么问题 ?

A: 这时你可以留意 IDEA 右下角气泡提示,如果它提示是绿色则代表你生成成功,如果是红色且可以看到 BeanMapping 开头的提示语则代表选中的对象不支持生成, 如果你看到了一个红色气泡但是并没有 BeanMapping 开头的提示语而是一个 occurred error,这代表我的插件出现了问题,你可以给我提 Issues。

Tip: 当代码还没有编译完成或者 IDEA 还没有准备完成,这时使用插件也有可能得到一个错误,因为插件依赖 IDEA 内部的上下文环境。

Q4: 除了 Java,插件是否还支持其他语言 ?

A: 截止到 2.0 版本,本插件只支持 Java。


Issues 指南

如您在使用过程中,遇到了什么问题或者有良好的使用建议,可以通过提 issues 方式告知我, 提 issues 之前请先组织好您的语言,尽量详细,如果是问题类的 issues 则需要附上 IDEA 版本。

最后,欢迎 Star

beanmappingkey's People

Contributors

rookie-ricardo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

beanmappingkey's Issues

无法使用

IntelliJ desc

  • IntelliJ platform :
  • Version :

IntelliJ IDEA 2021.1 (Ultimate Edition)
Build #IU-211.6693.111, built on April 6, 2021
Licensed to IntelliJ IDEA Evaluator
Expiration date: July 8, 2022
Runtime version: 11.0.10+9-b1341.35 amd64
VM: Dynamic Code Evolution 64-Bit Server VM by JetBrains s.r.o.
Windows 10 10.0
GC: G1 Young Generation, G1 Old Generation
Memory: 2016M
Cores: 8
Registry: debugger.watches.in.variables=false, compiler.automake.allow.when.app.running=true
Non-Bundled Plugins: io.zhile.research.ide-eval-resetter (2.3.5), com.github.copilot (1.1.24.1610), com.github.wangji92.arthas.plugin (2.37), com.alibaba.p3c.smartfox (2.1.1), com.kyexpress.fmk.debug.ui (2.5.1), com.kyexpress.plugins.openapi-generator (1.1.0), org.rookie.plugins.BeanMappingKey (2.0), org.sonarlint.idea (6.7.0.45926), MavenRunHelper (4.13.203.000.0), org.jetbrains.plugins.vue (211.6693.111), org.jetbrains.kotlin (211-1.5.0-release-759-IJ6693.72), JRebelPlugin (2022.2.1), cn.yiiguxing.plugin.translate (3.3.1-203u212.patch.1), com.baomidou.plugin.idea.mybatisx (1.5.4)
Kotlin: 211-1.5.0-release-759-IJ6693.72

Describe the bug
A clear and concise description of what the bug is.

IMG20220608095252

我在下述代码块里面,右键 ctrl+m 是灰色的,无法点击(如图所示)

public class Convert {
    public FileNameUrlV2 convert(FileNameUrl fileNameUrl){
        FileNameUrlV2 fileNameUrlV2 = new FileNameUrlV2();
        
        return fileNameUrlV2;
    }
}
public class FileNameUrl {
    private String fileName;
    private String url;

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }
}
public class FileNameUrlV2 {
    private String fileName;
    private String url;

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }
}

Request support for Intellij IDEA 2022.3

IntelliJ desc

  • IntelliJ platform :
  • Version : 2022.3

Describe the bug
Plugin 'BeanMappingKey' (version '2.2') is not compatible with the current version of the IDE, because it requires build 223 or older but the current build is IU-223.7571.182

希望能支持 setter 的链式调用

IntelliJ desc

  • IntelliJ platform : MAC
  • Version : 2022.3.2

Describe the bug
no bug

能否对支持 setter 的链式调用.
比如

@Getter
@Setter
@Accessors(chain = true)
public class TestDO{
    private String name;
    private String age;
}

@Getter
@Setter
@Accessors(chain = true)
public class TestVO{

    private String name;
    private String age;

    public static TestVO fromDO(TestDO item) {
        TestVO vo = new TestVO();
        vo.setName(item.getName());
        vo.setAge(item.getAge());
        return vo;
    }
}

希望能生成

public static TestVO fromDO(TestDO item) {
        return new TestVO()
           .setName(item.getName())
           .setAge(item.getAge());
    }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.