计算机系统应用教程网站

网站首页 > 技术文章 正文

你一定要看的Mybatis generator原理探究

btikc 2024-09-29 09:59:18 技术文章 13 ℃ 0 评论

一、前言

上篇文章介绍了Mybatis的mapper3原理和使用方法,其中也介绍了mapper3自提供的generator生成器,然后抽时间研究了下mybaits generator原理为改进做准备。

二、mybatis generator原理

2.1 环境准备

为了方便debug查看信息,所以本文不使用 mvn mybatis-generator:generate生成配置文件,而使用下面代码:

public static void main(String[] args) throws SQLException, IOException, InterruptedException, XMLParserException, InvalidConfigurationException { // TODO Auto-generated method stub List<String> warnings = new ArrayList<String>(); boolean overwrite = true; // 配置文件 File configFile = new File("generatorConfig.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(configFile); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); }

上面代码需要pom文件配置:

<dependency>
 <groupId>org.mybatis.generator</groupId>
 <artifactId>mybatis-generator-core</artifactId>
 <version>1.3.5</version>
 </dependency>

其中generatorConfig.xml内如如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
 PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
 "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
 <classPathEntry
 location="/Users/zhuizhumengxiang/.m2/repository/com/oracle/ojdbc14/10.2.0.3.0/ojdbc14-10.2.0.3.0.jar" />
 <context id="demo" targetRuntime="MyBatis3">
 <property name="suppressAllComments" value="false" />
 <property name="useActualColumnNames" value="false" />
 <!-- 配置数据库连接 -->
 <jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver"
 connectionURL="jdbc:oracle:thin:@erpdb8036.alibabacorp.com:1557:erp8036"
 userId="bdapps" password="bdapps8036"></jdbcConnection>
 <javaTypeResolver>
 <property name="forceBigDecimals" value="false" />
 </javaTypeResolver>
 <!-- 对应DO -->
 <javaModelGenerator targetPackage="com.zlx.demo.dal.business"
 targetProject="src/main/java">
 <property name="enableSubPackages" value="true" />
 <property name="trimStrings" value="true" />
 </javaModelGenerator>
 <sqlMapGenerator targetPackage="com.zlx.demo.dal.businesss.mapper"
 targetProject="src/main/resources">
 <property name="enableSubPackages" value="true" />
 </sqlMapGenerator>
 <javaClientGenerator type="XMLMAPPER"
 targetPackage="com.zlx.demo.dal.business.mapper" targetProject="src/main/java">
 <property name="enableSubPackages" value="true" />
 </javaClientGenerator>
 <!-- 卖家信息表 -->
 <table tableName="SUIT_USER_TEST" domainObjectName="UserTest"
 enableUpdateByExample="false" enableDeleteByExample="false">
 <!-- 通用字段 -->
 <columnOverride column="ID" property="id" javaType="java.lang.Long"
 jdbcType="NUMERIC" />
 <columnOverride column="GMT_CREATE" property="gmtCreate"
 javaType="java.util.Date" jdbcType="TIMESTAMP" />
 <columnOverride column="CREATOR" property="creator"
 javaType="java.lang.String" jdbcType="VARCHAR" />
 <columnOverride column="GMT_MODIFIED" property="gmtModified"
 javaType="java.util.Date" jdbcType="TIMESTAMP" />
 <columnOverride column="MODIFIER" property="modifier"
 javaType="java.lang.String" jdbcType="VARCHAR" />
 <columnOverride column="IS_DELETED" property="isDeleted"
 javaType="java.lang.String" jdbcType="CHAR" />
 </table>
 </context>
</generatorConfiguration>

执行后会生成UserTestMapper.xml为:

Java

生成的mapper接口SuitOrgDoMapper.Java为:

Java

2.2 原理分析

main函数里面的代码:

ConfigurationParser cp = new ConfigurationParser(warnings);

Configuration config = cp.parseConfiguration(configFile);

作用是解析配置文件并生成对象到Configuration

其中成员classPathEntries存放配置文件里面驱动jar位置

Java

成员变量contexts存放内容:

Java

然后看下MyBatisGenerator.generate的时序图:

Java

可知如果在generatorconf.xml配置了插件,则会交给PluginAggregator管理,然后5,6分别生成基础Java类和xml内存文件,如果配置了插件则还会7,8调用插件里面生成扩展Java类和xml.最后内存文件写入磁盘。

每晚8:00烛光学院的讲师将会在腾讯课堂烛光学院Java高级免费试听课程中给大家详细讲解的,而你只需8:00准时进入课堂就可以了

Java学习资料获取或免费进入课堂权限获取(复制下段连接至浏览器即可)

data:text/html;charset=UTF-8;base64,5p625p6E5biI5a2m5Lmg6LWE5paZ5YWN6LS56aKG5Y+W6K+35Yqg5omj5omj5Y+35pivMTAxODkyNTc4MA==

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表