MyBatis Generator代码分析一

本文主要分析MyBatis Generator的执行流程,从ShellRunner的Main入口开始,详细讲解了ConfigurationParser如何解析配置文件,以及MyBatisGeneratorConfigurationParser将配置转换为MyBatis3风格的过程。重点在于Context对象的封装,它代表了MBG生成代码的核心配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【原创文章,转载请注明原文章地址,谢谢!】

注意:以下代码都有适当修改和删改,为了更好看清楚执行流程

首先是简单分析使用Shell Runner执行MBG的最概略的执行流程分析:

org.mybatis.generator.api.ShellRunner:运行MyBatis Generator 的Main入口类;

核心代码(main方法):

//解析命令行
Map<String, String> arguments = parseCommandLine(args);

//创建一个警告列表,整个MBG运行过程中的所有警告信息都放在这个列表中,执行完成后统一System.out
List<String> warnings = new ArrayList<String>();

//得到generatorConfig.xml文件
String configfile = arguments.get(CONFIG_FILE);
File configurationFile = new File(configfile);

Set<String> fullyqualifiedTables = new HashSet<String>();//如果参数有tables,得到table名称列表
Set<String> contexts = new HashSet<String>();//如果参数有contextids,得到context名称列表

try {
    //创建配置解析器
    ConfigurationParser cp = new ConfigurationParser(warnings);
    //调用配置解析器创建配置对象(Configuration对象非常简单,可以简单理解为包含两个列表,一个列表是List<Context> contexts,包含了解析出来的Context对象,一个是List<String> classPathEntries,包含了配置的classPathEntry的location值)
    Configuration config = cp.parseConfiguration(configurationFile);
    //创建一个默认的ShellCallback对象,之前说过,shellcallback接口主要用来处理文件的创建和合并,传入overwrite参数;默认的shellcallback是不支持文件合并的;
    DefaultShellCallback shellCallback = new DefaultShellCallback(
                arguments.containsKey(OVERWRITE));
    //创建一个MyBatisGenerator对象。MyBatisGenerator类是真正用来执行生成动作的类
    MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, shellCallback, warnings);
    //创建一个默认的ProgressCallback对象,之前说过,在MBG执行过程中在一定的执行步骤结束后调用ProgressCallback对象的方法,达到执行过程监控的效果;
    //如果在执行ShellRunner是传入了-verbose参数,那么创建一个VerboseProgressCallback(VerboseProgressCallback只是调用了System.out打印出了执行过程而已)
    ProgressCallback progressCallback = arguments.containsKey(VERBOSE) ? new VerboseProgressCallback()
                : null;
    //执行真正的MBG创建过程
    //注意,这里的contexts是通过-contextids传入的需要的上下文id列表;
    //fullyqualifiedTables是通过-tables传入的本次需要生成的table名称列表;
    myBatisGenerator.generate(progressCallback, contexts, fullyqualifiedTables);
}catch(...){...}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值