反射获取属性逆向生成Mybatis的ResultMap

import com.ruoyi.bi.mes.domain.XStockMaterialReport;
import com.ruoyi.common.utils.StringUtils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author :zhangxuewei
 * @date : 2023/3/4
 */
public class ResultMapUtil {


    /**
     * @param c
     * @return
     */
    public static List<String> getParamList(Class c) {
        List<String> propertys = new ArrayList<>();
        Field[] vos = c.getDeclaredFields();
        for (Field field : vos) {
            field.setAccessible(true);
            propertys.add(field.getName());
        }
        Class<?> superclass = c.getClass();
        while (superclass != null) {
            superclass = superclass.getSuperclass();
            if (superclass.getName().equals("java.lang.Object")) {
                break;
            }
            //获取父类的属性
            Field[] superField = superclass.getDeclaredFields();
            for (Field field : superField) {
                field.setAccessible(true);
                propertys.add(field.getName());
            }
        }
        return propertys;
    }

    private static final String ResultHead = "<resultMap type=\"resultMapType\" id=\"resultMapId\"> \n";
    private static final String Resultfoot = "</resultMap>";

    public static void getResultMap(Class c, String resultMapType, String resultMapId) {
        List<String> ps = getParamList(c);
        String resultMapBody = "";
        for (String pv : ps) {
            String p = pv;
            p=String.valueOf(p.charAt(0)).toUpperCase().concat(p.substring(1));
            StringBuffer sb=new StringBuffer();
            Pattern pattern=Pattern.compile("[A-Z]([a-z\\d]+)?");
            Matcher matcher=pattern.matcher(p);
            while(matcher.find()){
                String word=matcher.group();
                sb.append(word.toUpperCase());
                sb.append(matcher.end()==p.length()?"":"_");
            }
            resultMapBody  += " <result property=\"" + pv + "\"    column=\"" + sb.toString() + "\"    />\n";
        }
        String ResultHeadM = ResultHead;
        ResultHeadM = ResultHeadM.replaceAll( "resultMapType",resultMapType);
        ResultHeadM = ResultHeadM.replace("resultMapId",resultMapId);
        ResultHeadM  += resultMapBody;
        String ResultfootM = Resultfoot;
        ResultHeadM  += ResultfootM;
        System.out.println(ResultHeadM);
    }

    public static void main(String[] args) {
        getResultMap(XStockMaterialReport.class,"","");
    }
}

打印结果:

D:\mcdev\jdk8\bin\java.exe -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:53987,suspend=y,server=n -javaagent:C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2020.1\captureAgent\debugger-agent.jar=file:/C:/Users/Administrator/AppData/Local/Temp/capture.props -Dfile.encoding=UTF-8 -classpath "D:\mcdev\jdk8\jre\lib\charsets.jar;D:\mcdev\jdk8\jre\lib\deploy.jar;D:\mcdev\jdk8\jre\lib\ext\access-bridge-64.jar;D:\mcdev\jdk8\jre\lib\ext\cldrdata.jar;D:\mcdev\jdk8\jre\lib\ext\dnsns.jar;D:\mcdev\jdk8\jre\lib\ext\jaccess.jar;D:\mcdev\jdk8\jre\lib\ext\jfxrt.jar;D:\mcdev\jdk8\jre\lib\ext\localedata.jar;D:\mcdev\jdk8\jre\lib\ext\nashorn.jar;D:\mcdev\jdk8\jre\lib\ext\sunec.jar;D:\mcdev\jdk8\jre\lib\ext\sunjce_provider.jar;D:\mcdev\jdk8\jre\lib\ext\sunmscapi.jar;D:\mcdev\jdk8\jre\lib\ext\sunpkcs11.jar;D:\mcdev\jdk8\jre\lib\ext\zipfs.jar;D:\mcdev\jdk8\jre\lib\javaws.jar;D:\mcdev\jdk8\jre\lib\jce.jar;D:\mcdev\jdk8\jre\lib\jfr.jar;D:\mcdev\jdk8\jre\lib\jfxswt.jar;D:\mcdev\jdk8\jre\lib\jsse.jar;D:\mcdev\jdk8\jre\lib\management-agent.jar;D:\mcdev\jdk8\jre\lib\plugin.jar;D:\mcdev\jdk8\jre\lib\resources.jar;D:\mcdev\jdk8\jre\lib\rt.jar;C:\workspace\program\bmp\dm-bi\target\test-classes;C:\workspace\program\bmp\dm-bi\target\classes;C:\workspace\program\bmp\dm-bmp\target\classes;C:\workspace\program\bmp\ruoyi-system\target\classes;C:\workspace\program\bmp\ruoyi-common\target\classes;C:\workspace\mavenRepository\org\springframework\spring-context-support\5.3.20\spring-context-support-5.3.20.jar;C:\workspace\mavenRepository\org\springframework\spring-beans\5.3.20\spring-beans-5.3.20.jar;C:\workspace\mavenRepository\org\springframework\spring-context\5.3.20\spring-context-5.3.20.jar;C:\workspace\mavenRepository\org\springframework\spring-expression\5.3.20\spring-expression-5.3.20.jar;C:\workspace\mavenRepository\org\springframework\spring-core\5.3.20\spring-core-5.3.20.jar;C:\workspace\mavenRepository\org\springframework\spring-jcl\5.3.20\spring-jcl-5.3.20.jar;C:\workspace\mavenRepository\org\springframework\spring-web\5.3.20\spring-web-5.3.20.jar;C:\workspace\mavenRepository\org\springframework\boot\spring-boot-starter-security\2.5.14\spring-boot-starter-security-2.5.14.jar;C:\workspace\mavenRepository\org\springframework\boot\spring-boot-starter\2.5.14\spring-boot-starter-2.5.14.jar;C:\workspace\mavenRepository\org\springframework\boot\spring-boot\2.5.14\spring-boot-2.5.14.jar;C:\workspace\mavenRepository\org\springframework\boot\spring-boot-autoconfigure\2.5.14\spring-boot-autoconfigure-2.5.14.jar;C:\workspace\mavenRepository\org\springframework\boot\spring-boot-starter-logging\2.5.14\spring-boot-starter-logging-2.5.14.jar;C:\workspace\mavenRepository\ch\qos\logback\logback-classic\1.2.11\logback-classic-1.2.11.jar;C:\workspace\mavenRepository\ch\qos\logback\logback-core\1.2.11\logback-core-1.2.11.jar;C:\workspace\mavenRepository\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;C:\workspace\mavenRepository\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;C:\workspace\mavenRepository\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;C:\workspace\mavenRepository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\workspace\mavenRepository\org\springframework\spring-aop\5.3.20\spring-aop-5.3.20.jar;C:\workspace\mavenRepository\org\springframework\security\spring-security-config\5.5.8\spring-security-config-5.5.8.jar;C:\workspace\mavenRepository\org\springframework\security\spring-security-core\5.5.8\spring-security-core-5.5.8.jar;C:\workspace\mavenRepository\org\springframework\security\spring-security-crypto\5.5.8\spring-security-crypto-5.5.8.jar;C:\workspace\mavenRepository\org\springframework\security\spring-security-web\5.5.8\spring-security-web-5.5.8.jar;C:\workspace\mavenRepository\com\github\pagehelper\pagehelper-spring-boot-starter\1.4.6\pagehelper-spring-boot-starter-1.4.6.jar;C:\workspace\mavenRepository\org\mybatis\spring\boot\mybatis-spring-boot-starter\2.2.2\mybatis-spring-boot-starter-2.2.2.jar;C:\workspace\mavenRepository\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\2.2.2\mybatis-spring-boot-autoconfigure-2.2.2.jar;C:\workspace\mavenRepository\org\mybatis\mybatis\3.5.9\mybatis-3.5.9.jar;C:\workspace\mavenRepository\org\mybatis\mybatis-spring\2.0.7\mybatis-spring-2.0.7.jar;C:\workspace\mavenRepository\com\github\pagehelper\pagehelper-spring-boot-autoconfigure\1.4.6\pagehelper-spring-boot-autoconfigure-1.4.6.jar;C:\workspace\mavenRepository\com\github\pagehelper\pagehelper\5.3.2\pagehelper-5.3.2.jar;C:\workspace\mavenRepository\com\github\jsqlparser\jsqlparser\4.5\jsqlparser-4.5.jar;C:\workspace\mavenRepository\org\springframework\boot\spring-boot-starter-validation\2.5.14\spring-boot-starter-validation-2.5.14.jar;C:\workspace\mavenRepository\org\apache\tomcat\embed\tomcat-embed-el\9.0.63\tomcat-embed-el-9.0.63.jar;C:\workspace\mavenRepository\org\hibernate\validator\hibernate-validator\6.2.3.Final\hibernate-validator-6.2.3.Final.jar;C:\workspace\mavenRepository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;C:\workspace\mavenRepository\org\jboss\logging\jboss-logging\3.4.3.Final\jboss-logging-3.4.3.Final.jar;C:\workspace\mavenRepository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;C:\workspace\mavenRepository\org\apache\commons\commons-lang3\3.12.0\commons-lang3-3.12.0.jar;C:\workspace\mavenRepository\com\fasterxml\jackson\core\jackson-databind\2.12.6.1\jackson-databind-2.12.6.1.jar;C:\workspace\mavenRepository\com\fasterxml\jackson\core\jackson-annotations\2.12.6\jackson-annotations-2.12.6.jar;C:\workspace\mavenRepository\com\fasterxml\jackson\core\jackson-core\2.12.6\jackson-core-2.12.6.jar;C:\workspace\mavenRepository\com\baomidou\dynamic-datasource-spring-boot-starter\3.5.2\dynamic-datasource-spring-boot-starter-3.5.2.jar;C:\workspace\mavenRepository\org\springframework\boot\spring-boot-starter-jdbc\2.5.14\spring-boot-starter-jdbc-2.5.14.jar;C:\workspace\mavenRepository\com\zaxxer\HikariCP\4.0.3\HikariCP-4.0.3.jar;C:\workspace\mavenRepository\org\springframework\spring-jdbc\5.3.20\spring-jdbc-5.3.20.jar;C:\workspace\mavenRepository\org\springframework\boot\spring-boot-starter-aop\2.5.14\spring-boot-starter-aop-2.5.14.jar;C:\workspace\mavenRepository\org\aspectj\aspectjweaver\1.9.7\aspectjweaver-1.9.7.jar;C:\workspace\mavenRepository\com\alibaba\fastjson2\fastjson2\2.0.23\fastjson2-2.0.23.jar;C:\workspace\mavenRepository\commons-io\commons-io\2.11.0\commons-io-2.11.0.jar;C:\workspace\mavenRepository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;C:\workspace\mavenRepository\org\apache\poi\poi-ooxml\4.1.2\poi-ooxml-4.1.2.jar;C:\workspace\mavenRepository\org\apache\poi\poi\4.1.2\poi-4.1.2.jar;C:\workspace\mavenRepository\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;C:\workspace\mavenRepository\org\apache\commons\commons-collections4\4.4\commons-collections4-4.4.jar;C:\workspace\mavenRepository\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;C:\workspace\mavenRepository\com\zaxxer\SparseBitSet\1.2\SparseBitSet-1.2.jar;C:\workspace\mavenRepository\org\apache\poi\poi-ooxml-schemas\4.1.2\poi-ooxml-schemas-4.1.2.jar;C:\workspace\mavenRepository\org\apache\xmlbeans\xmlbeans\3.1.0\xmlbeans-3.1.0.jar;C:\workspace\mavenRepository\org\apache\commons\commons-compress\1.19\commons-compress-1.19.jar;C:\workspace\mavenRepository\com\github\virtuald\curvesapi\1.06\curvesapi-1.06.jar;C:\workspace\mavenRepository\org\yaml\snakeyaml\1.28\snakeyaml-1.28.jar;C:\workspace\mavenRepository\io\jsonwebtoken\jjwt\0.9.1\jjwt-0.9.1.jar;C:\workspace\mavenRepository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\workspace\mavenRepository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\workspace\mavenRepository\org\springframework\boot\spring-boot-starter-data-redis\2.5.14\spring-boot-starter-data-redis-2.5.14.jar;C:\workspace\mavenRepository\org\springframework\data\spring-data-redis\2.5.11\spring-data-redis-2.5.11.jar;C:\workspace\mavenRepository\org\springframework\data\spring-data-keyvalue\2.5.11\spring-data-keyvalue-2.5.11.jar;C:\workspace\mavenRepository\org\springframework\data\spring-data-commons\2.5.11\spring-data-commons-2.5.11.jar;C:\workspace\mavenRepository\org\springframework\spring-tx\5.3.20\spring-tx-5.3.20.jar;C:\workspace\mavenRepository\org\springframework\spring-oxm\5.3.20\spring-oxm-5.3.20.jar;C:\workspace\mavenRepository\io\lettuce\lettuce-core\6.1.8.RELEASE\lettuce-core-6.1.8.RELEASE.jar;C:\workspace\mavenRepository\io\netty\netty-common\4.1.77.Final\netty-common-4.1.77.Final.jar;C:\workspace\mavenRepository\io\netty\netty-handler\4.1.77.Final\netty-handler-4.1.77.Final.jar;C:\workspace\mavenRepository\io\netty\netty-resolver\4.1.77.Final\netty-resolver-4.1.77.Final.jar;C:\workspace\mavenRepository\io\netty\netty-buffer\4.1.77.Final\netty-buffer-4.1.77.Final.jar;C:\workspace\mavenRepository\io\netty\netty-codec\4.1.77.Final\netty-codec-4.1.77.Final.jar;C:\workspace\mavenRepository\io\netty\netty-transport\4.1.77.Final\netty-transport-4.1.77.Final.jar;C:\workspace\mavenRepository\io\projectreactor\reactor-core\3.4.18\reactor-core-3.4.18.jar;C:\workspace\mavenRepository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;C:\workspace\mavenRepository\org\apache\commons\commons-pool2\2.9.0\commons-pool2-2.9.0.jar;C:\workspace\mavenRepository\eu\bitwalker\UserAgentUtils\1.21\UserAgentUtils-1.21.jar;C:\workspace\mavenRepository\javax\servlet\javax.servlet-api\4.0.1\javax.servlet-api-4.0.1.jar;C:\workspace\mavenRepository\io\swagger\swagger-models\1.6.2\swagger-models-1.6.2.jar;C:\workspace\mavenRepository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;C:\workspace\mavenRepository\io\swagger\swagger-annotations\1.6.2\swagger-annotations-1.6.2.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2020.1.2\lib\idea_rt.jar" ResultMapUtil
Connected to the target VM, address: '127.0.0.1:53987', transport: 'socket'
<resultMap type="resultMapType" id="resultMapId"> 
 <result property="itemCode"    column="ITEM_CODE"    />
 <result property="itemName"    column="ITEM_NAME"    />
 <result property="itemSpec"    column="ITEM_SPEC"    />
 <result property="inType"    column="IN_TYPE"    />
 <result property="itemSN"    column="ITEM_S_N"    />
 <result property="unit"    column="UNIT"    />
 <result property="inStockNum"    column="IN_STOCK_NUM"    />
 <result property="inStockTime"    column="IN_STOCK_TIME"    />
 <result property="outStockNum"    column="OUT_STOCK_NUM"    />
 <result property="outStockTime"    column="OUT_STOCK_TIME"    />
 <result property="stockLastNum"    column="STOCK_LAST_NUM"    />
 <result property="stayHouers"    column="STAY_HOUERS"    />
</resultMap>
Disconnected from the target VM, address: '127.0.0.1:53987', transport: 'socket'

Process finished with exit code 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值