IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)

版本说明

  1. 系统:macOS(Windows同理)
  2. IDE:IntelliJ IDEA 2023.1.3 (哪个版本都可以)
  3. MyBatisCodeHelper Pro 3.2.1(哪个版本都可以)

环境准备

  1. 从插件市场下载MyBatisCodeHelper Pro
    IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第1张图片
  2. 领取临时激活码

领取地址:https://brucege.com/pay/getfreetrial
IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第2张图片
IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第3张图片

  1. 使插件处于试用状态

输入刚刚申请的试用码

IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第4张图片

试用成功:

IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第5张图片

  1. 下载cfr的jar包

下载地址:https://github.com/leibnitz27/cfr/releases

下最新的就行:

IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第6张图片

正式教程

找到MyBatisCodeHelper Pro的jar包

  1. Windows:在地址栏输入%appdata%\JetBrains\找到idea安装目录,里面有个plugins文件夹,然后里面有个文件夹MyBatisCodeHelper-Pro
  2. MacOS:/Users/用户名/Library/Application Support/JetBrains/IntelliJIdea2023.1/plugins/MyBatisCodeHelper-Pro

MacOS的有一点特殊,注意用户名目录和你的idea版本号

然后进入到lib文件夹,找到MyBatisCodeHelper-Pro-obfuss.jar

IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第7张图片

将它和刚刚下载的cfr的jar包拷贝到另一个地方,比如桌面,方便修改。

IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第8张图片

反编译jar包

  1. 在刚刚两个jar包的目录打开终端(Windows是打开cmd,一个意思)。
    IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第9张图片

  2. 执行命令: java -jar cfr-0.152.jar MyBatisCodeHelper-Pro-obfuss.jar --renamedupmembers true --hideutf false >> result.txt

    需要注意cfr版本号,如果你跟我下载的不是一个版本,需要更改为指定版本。

    过程会比较慢,耐心等待…

    执行完毕文件夹中会出现一个result的文本文件:
    IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第10张图片
    IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第11张图片

修改前准备/介绍/目标

准备/介绍

用一个比较方便的工具打开上面的result.txt。

  • 搜索validTo,找到具有paidKey,valid,validTo的类

    不同插件版本,这个类的位置会不一样
    IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第12张图片

  • valid为判断是否在有效期的变量,变量定义为下方的private Boolean d

  • validTo为有效时长变量,定义为下方的private Long e;

  • package com.ccnode.codegenerator.T.e是当前类所在的包,类名为c,由此可知当前类的绝对定位为com.ccnode.codegenerator.T.e.b

IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第13张图片

目标(这是我们将要用代码实现的目标,先演练)

  1. 修改变量d,也就是代表是否有效的那个变量的get/set方法始终为true

    (再次提醒:不同的插件版本变量名称也不一样,你要看清楚!)

// ------------get方法-----------
public Boolean b() {
	return this.d;
}

// 改为:

public Boolean b() {
	return true;
}

// ------------set方法-----------
public void a(Boolean bl) {
	this.d = bl;
}

// 改为:

public void a(Boolean bl) {
	this.d = true;
}

IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第14张图片

  1. 修改变量e,也就是那个代表有效期还剩多久的变量,get/set方法为固定值

    (再次提醒:不同的插件版本变量名称也不一样,你要看清楚!)

// ------------get方法-----------
public Long e() {
	return this.e;
}

// 改为:

public Long e() {
	return new Long(4797976044000L);
}

// ------------set方法-----------
public void a(Long l2) {
	this.e = l2;
}

// 改为:

public void a(Long l2) {
	this.e = new Long(4797976044000L);
}

IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第15张图片

代码实现

上面已经找到了要修改的类的绝对定位com.ccnode.codegenerator.T.e.b,以及要修改get/set方法,下面通过Javassist修改对于的class文件。以实现我们的目标。

  1. 使用IDEA创建一个Maven项目
    IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第16张图片
  2. 导入Javassist依赖

<dependency>
	<groupId>org.javassistgroupId>
	<artifactId>javassistartifactId>
	<version>3.28.0-GAversion>
dependency>

IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第17张图片

  1. 代码实现

以下代码需要注意几点:

  • pool.insertClassPath("MyBatisCodeHelper-Pro-obfuss.jar"); 需要填写MyBatisCodeHelper-Pro-obfuss.jar在你本机实际的路径!
  • cc.writeFile("/Users/localhost/Desktop/test"); 需要填写你能找到的输出路径
  • 还有就是代码中体现的包名,类名,变量名,都要和上面咱们准备的时候一直,这个一定要注意!!!
  • 代码都有注释!注意看!
package org.example;

import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;

/**
 * Hello world!
 * @author localhost
 */
public class App {
    public static void main(String[] args) {
        try {
            ClassPool pool = ClassPool.getDefault();
            // 此处改为你实际的的 MyBatisCodeHelper-Pro-obfuss.jar 的路径
            pool.insertClassPath("/Users/localhost/Library/Application Support/JetBrains/IntelliJIdea2023.1/plugins/MyBatisCodeHelper-Pro/lib/MyBatisCodeHelper-Pro-obfuss.jar");
            // 通过绝对定位,加载指定的类
            CtClass cc = pool.get("com.ccnode.codegenerator.T.e.b");

            // 获取validTo的get方法
            // public Long e()
            CtMethod getValidToMethod = cc.getDeclaredMethod("e");

            // 获取validTo的set方法的参数:Long
            CtClass[] params = new CtClass[] { pool.get("java.lang.Long") };
            // 获取validTo的set方法
            // public void a(Long l2)
            CtMethod setValidToMethod = cc.getDeclaredMethod("a", params);

            // 获取valid的set方法的参数:Boolean
            CtClass[] params1 = new CtClass[] { pool.get("java.lang.Boolean") };
            // 获取Valid的set方法
            // public void a(Boolean bl)
            CtMethod setValidMethod = cc.getDeclaredMethod("a", params1);

            // 获取valid的get方法
            // public Boolean b()
            CtMethod getValidMethod = cc.getDeclaredMethod("b");

            // 修改validTo的get方法
            // 直接返回4797976044000
            StringBuilder builder = new StringBuilder();
            builder.append("{")
                    .append("       return new Long(4797976044000L);")
                    .append("}");
            getValidToMethod.setBody(builder.toString());

            // 修改validTo的set方法
            // 直接设为4797976044000
            StringBuilder builder1 = new StringBuilder();
            builder1.append("{")
                    .append("        this.e = new Long(4797976044000L);")
                    .append("}");
            setValidToMethod.setBody(builder1.toString());

            // 修改valid的set方法
            // 设为True
            String getValidMethodBuilder = "{" +
                    "       return Boolean.TRUE;" +
                    "}";
            getValidMethod.setBody(getValidMethodBuilder);

            // 修改valid的get方法
            // 直接返回True
            String setValidMethodBuilder = "{" +
                    "this.d = Boolean.TRUE;" +
                    "}";
            setValidMethod.setBody(setValidMethodBuilder);

            // 将修改后的Class b写入指定文件夹
            cc.writeFile("/Users/localhost/Desktop/test");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行上面的代码后会在你指定的文件夹中生成修改的Class b:

IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第18张图片

打开看一下是不是修改成功了:
IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第19张图片

替换Class文件

由于我MacOS装的解压缩工具,貌似不支持打开jar文件,所以下面的操作我用我装的虚拟机版Windows11演示。

  1. 用压缩工具打开刚刚拷贝出来的MyBatisCodeHelper-Pro-obfuss.jar

IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第20张图片

  1. 找到com.ccnode.codegenerator.T.e.b并替换成我们刚刚修改的Class文件

直接拖进去:

IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第21张图片
然后关闭压缩工具即可。

  1. 替换jar包

将我们拷贝出来并修改完的MyBatisCodeHelper-Pro-obfuss.jar,替换我们开头找到的原始MyBatisCodeHelper-Pro-obfuss.jar。

为防止出问题,注意先备份再替换!!!

IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第22张图片

查看是否成功

重新打开IEDA

设置—其他设置中找到MyBatisCodeHelperPro,往下翻,看到期时间:

IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)_第23张图片

注意

如果不小心更新了插件,按照上述步骤重新操作即可,但是操作前需要保证插件在试用状态下,重新申请试用再操作即可。
领取地址:https://brucege.com/pay/getfreetrial

你可能感兴趣的:(其他,Mybatis,mybatis,MyBatis,java)