源碼剖析介紹:基於mybatis-generator-core 1.3.5項目的修訂版以及源碼剖析
目前,我把該項目,發布到了Maven中央倉庫中,可直接使用;
使用方式
在項目.pom中,添加以下部分,更新maven即可(因為我已經把項目發布到maven中央倉庫去了)。
<build>
<defaultGoal>compile</defaultGoal>
<plugins>
<!-- 指定java版本-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
<!-- 指定配置文件的路徑,默認是在resources下-->
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
</configuration>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>io.github.orange1438</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
配置文件
1.generatorConfig.properties
# data base info
jdbc.dataSource.url:jdbc:mysql://localhost:3306/manage_system?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8 jdbc.dataSource.driverClassName:com.mysql.jdbc.Driver jdbc.dataSource.username:root jdbc.dataSource.password:123456 # Mybatis Generator configuration # classPath:maven repository path,下載到倉庫里,根據倉庫路徑修改 jdbc.mybatisGenerator.classPath=E:/orange/Documents/IdeaProjects/repository/mysql/mysql-connector-java/5.1.35/mysql-connector-java-5.1.35.jar # javaModelGenerator model.path=src/main/resources/test model.package=orange1438.entity # javaClientGenerator mapper.path=src/main/resources/test mapper.package=orange1438.mappers # sqlMapGenerator mapper.xml.path=src/main/resources/test mapper.xml.package=orange1438.mapper # service——If configuration service.path=src/main/resources/test service.package=orange1438.service service.package.impl=orange1438.service.impl
2.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"> <!-- 參考官方文檔 http://www.mybatis.org/generator/configreference/xmlconfig.html http://generator.sturgeon.mopaas.com/index.html http://www.jianshu.com/p/e09d2370b796 http://mbg.cndocs.tk/ --> <generatorConfiguration> <!-- 引入配置文件 --> <properties resource="test/generatorConfig.properties"/> <!-- 指定數據連接驅動jar地址 --> <classPathEntry location="${jdbc.mybatisGenerator.classPath}"/> <!-- 一個數據庫一個context --> <context id="testTables" targetRuntime="MyBatis3"> <!-- 自動識別數據庫關鍵字,默認false,如果設置為true,根據SqlReservedWords中定義的關鍵字列表; 一般保留默認值,遇到數據庫關鍵字(Java關鍵字),使用columnOverride覆蓋 --> <property name="autoDelimitKeywords" value="false"/> <!-- 生成的Java文件的編碼 --> <property name="javaFileEncoding" value="UTF-8"/> <!-- 格式化java代碼 --> <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/> <!-- 格式化XML代碼 --> <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/> <!--開啟抑制類型的警告信息--> <property name="suppressTypeWarnings" value="true"/> <!-- 插件 :其他插件參考http://www.jianshu.com/p/1b826d43dbaf--> <!--插件 :用來給Java模型生成equals和hashcode方法--> <!--<plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"/>--> <!--插件 :用來為生成的Java模型類添加序列化接口--> <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/> <!--插件 :生成的Java模型創建一個toString方法--> <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/> <plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin"> <property name="searchString" value="Example$"/> <property name="replaceString" value="Criteria"/> </plugin> <!-- 統一Mapper 接口 --> <plugin type="org.mybatis.generator.plugins.MapperPlugin"> <property name="interfaceName" value="IMapper"/> <!-- 是否刪除Mapper類里的方法,默認刪除--> <property name="deleteMethod" value="true"/> </plugin> <!-- service層插件 --> <plugin type="org.mybatis.generator.plugins.MybatisServicePlugin"> <property name="targetPackage" value="${service.package}"/> <property name="implementationPackage" value="${service.package.impl}"/> <property name="targetProject" value="${service.path}"/> <property name="enableInsert" value="true"/> <property name="enableUpdateByExampleSelective" value="true"/> <property name="enableInsertSelective" value="true"/> <property name="enableUpdateByPrimaryKey" value="true"/> <property name="enableDeleteByPrimaryKey" value="true"/> <property name="enableDeleteByExample" value="true"/> <property name="enableUpdateByPrimaryKeySelective" value="true"/> <property name="enableUpdateByExample" value="true"/> </plugin> <!-- 注釋 --> <commentGenerator> <!-- 是否去除自動生成的注釋 true:是 : false:否 --> <property name="suppressAllComments" value="false"/> <!-- 是否給實體類生成的備注的注釋 true:是 : 默認為false:否 --> <property name="addRemarkComments" value="true"/> <!-- 是否去掉注釋代時間戳 true:是 : false:否,默認yyyy-MM-dd HH:mm:ss(1.3.5-chinese-annotation修改版)--> <property name="suppressDate" value="false"/> <property name="dateFormat" value="yyyy/MM/dd HH:mm"/> <!-- 自己添加的參數屬性:數據表字段的get、set方法是否添加final關鍵字,默認為true --> <property name="addMethodFinal" value="true"/> <property name="author" value="orange1438"/> </commentGenerator> <!--數據庫連接的信息:驅動類、連接地址、用戶名、密碼 --> <jdbcConnection driverClass="${jdbc.dataSource.driverClassName}" connectionURL="${jdbc.dataSource.url}" userId="${jdbc.dataSource.username}" password="${jdbc.dataSource.password}"> </jdbcConnection> <!-- 類型轉換 --> <javaTypeResolver> <!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析為 Integer,為 true時把JDBC DECIMAL 和 NUMERIC 類型解析為java.math.BigDecimal --> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- 生成實體類的位置 --> <javaModelGenerator targetPackage="${model.package}" targetProject="${model.path}"> <!-- for MyBatis3/MyBatis3Simple 自動為每一個生成的類創建一個構造方法,構造方法包含了所有的field;而不是使用setter; --> <property name="constructorBased" value="false"/> <!-- 是否在當前路徑下新加一層schema, eg:false路徑com.orange1438.entity, true:com.orange1438.entity.[schemaName] --> <property name="enableSubPackages" value="true"/> <!-- 是否針對string類型的字段在set/get的時候進行trim調用:清理前后的空格 --> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- 生成mapper xml文件 --> <sqlMapGenerator targetPackage="${mapper.xml.package}" targetProject="${mapper.xml.path}"> <!-- 解釋同上:生成實體類的位置 --> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!-- 對於mybatis來說,即生成Mapper接口,注意,如果沒有配置該元素,那么默認不會生成Mapper接口 targetPackage/targetProject:同javaModelGenerator type:選擇怎么生成mapper接口(在MyBatis3/MyBatis3Simple下): 1,ANNOTATEDMAPPER:會生成使用Mapper接口+Annotation的方式創建(SQL生成在annotation中),不會生成對應的XML; 2,MIXEDMAPPER:使用混合配置,會生成Mapper接口,並適當添加合適的Annotation,但是XML會生成在XML中; 3,XMLMAPPER:會生成Mapper接口,接口完全依賴XML; 注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER --> <!-- 生成mapper接口生成的位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="${mapper.package}" targetProject="${mapper.path}"> <!-- 解釋同上:生成實體類的位置 --> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!-- mvn mybatis-generator:generate --> <!-- 指定生成的數據庫表 --> <!-- domainObjectName:指定生成的實體類的文件名 --> <!--<table tableName="sys_user" domainObjectName="User"/>--> <table tableName="test" domainObjectName="Test"/> <!-- 其他需求:有些表的字段需要指定java類型 --> <!--<table schema="management_system" tableName="s_user"--> <!--domainObjectName="UserEntity" enableCountByExample="false"--> <!--enableDeleteByExample="false" enableSelectByExample="false"--> <!--enableUpdateByExample="false">--> <!--<!– schema即為數據庫名 tableName為對應的數據庫表 domainObjectName是要生成的實體類 enable*ByExample--> <!--是否生成 example類 –>--> <!--<!– 忽略列,不生成bean 字段 –>--> <!--<ignoreColumn column="FRED" />--> <!--<!– 指定列的java數據類型 –>--> <!--<columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />--> <!--</table>--> </context> </generatorConfiguration>