独立的jar工程
xml标签解析
main函数配置
建议创建独立的jar项目,只需要使用maven创建空骨架项目,原因:
添加依赖:
<dependency>
<groupId>org.mybatis.generatorgroupId>
<artifactId>mybatis-generator-coreartifactId>
<version>1.3.0version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.46version>
dependency>
在resources目录下创建(xxx).xml文件,如:mybatis-generator.xml。如何生成Interface、xml、model全部在该xml文件中配置。
1.最新的DTD:
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
2.标签配置以及意义
2.1
2.2.
resource
属性引用classpath
中指定位置的properties文件,默认在当前目录下查找,也可指定相对目录(示例中是相对位置)
url
属性引用文件系统的配置;比如:file:///C:/myfolder/generatorConfig.properties注意:resource与url只能指定一个
2.3.
location
属性 jar/zip的全路径2.4.至少有一个
(比如多个数据库连接,可有多个)。
id
当前context的唯一标识属性;存在多个context,如果有异常信息时,会根据该id区分defaultModelType
属性配置生成domain类的形式;有三
种选择:flat
:一个table只生成一个domain类,所有类型的字段都包含在该类中hierarchical
: 该类型会将text/blob类型的字段单独生成一个类,主键单独一个类,其余字段一个类,这些类之间保持继承关系;conditional
: 默认的类型,跟hierarchical
差不多。text/blob大字段会生成一个domain类,但是其他分离出来的字段,如果只包含一个字段,比如只有主键字段,这种模式会合并这两个类。即不会生成只有一个键的domain类。targetRuntime
属性用于配置使用MyBatis3.0或者3.4,再或者iBatis2.0版本,以及是否使用Java8Interface新特性,及是否生成xml文件,有五
中选择:MyBatis3
:默认值,使用MyBatis3.0+,尽可能的生成动态sql以及"by exanple" 方法MyBatis3Simple
:兼容Mybatis3.0+,只是生成基本的CURD方法,by example
相关方法及动态sql不会生成;MyBatis3DynamicSql
:向上兼容MyBatis3.4+,会使用Java8接口的新特性;但xml
文件不再生成及忽略FLAT
(defaultModelType
),特殊的Text/Blob字段不再单独生成包括方法;Ibatis2Java2
:Ibatis2Java5
:这两种使用iBATIS2.0+,但不包括3.0,使用的较少,了解不多;introspectedColumnImpl
: 该属性指定自定义继承org.mybatis.generator.api.IntrospectedColumn
实现类的全路径;(该类记录了数据库表的原始数据,后期会有专门文章介绍)1.
name
和value
属性;注意大小写
(别自己挖坑)2. org.mybatis.generator.api.Plugin
或者继承org.mybatis.generator.api.PluginAdapter
插件类的全路径;可配置多个
type
属性配置全路径;(比如:myBaits默认提供的插件:org.mybatis.generator.plugins.EqualsHashCodePlugin)plugin 标签中还可以配置 标签,该标签配置的参数可以在类中获取到。在自定义plugin时,有时会根据不同开发者配置动态的内容,可使用此特性
3.org.mybatis.generator.internal.DefaultCommentGenerator
可实现自定义注释(后期会有详细文章介绍)
suppressDate
:按照原生注释是否生成日期; 4.
5.Model
及Query By Example
类;(会受defaultModelType
策略的影响)
targetPackage
:存放model类的包路径,比如:com.test.mybatis.generator.model,间隔符号可以用都点;如果该路径错误或者不存在,MyBatis会创建或者将错就错,任然会在当前工程生成;targetProject
:当前工程所在的具体目录,比如:D:/java/project/mybatis/src/main/java
,MyBatis会拼接targetPackage,形成完成的存放当前model的路径;如果配置的具体路径不存在,MyBaits不会自动创建,只会什么也不做,结果是什么也生成不出来;Property
支持的constructorBased
:是否生成构造函数,默认值falseenableSubPackages
:是否已当前tabale为基础生成文件存放该model;默认值false;trimStrings
:是否自动生成trimString相应的代码;rootClass
:这个最有用,将表中共有的字段抽取到父类中,在生成后Model自动继承该类,并在子类中不生成响应的字段;前提是:父子类中字段类型、名称必须相同,否则会在子类重新生成;(table中可以不用配置重复的字段)6.
targetPackage
和targetProject
与model配置方法一致;支持的enableSubPackages
;7.
type
相比之前两个多了类型;根据targetRuntime
配置的不同都有对应不同的侧类;主要有:基于完全基于注解型(ANNOTATEDMAPPER
)、完全基于xml型(XMLMAPPER
)、混合型(MIXEDMAPPER
);其他两个属性targetProject
和 targetPackage
与Model一致;8.: 过五关斩六将终于要看到胜利的曙光了,最重要也是最不能马虎的地方;table信息的转换配置;相关属性和标签如下:
tableName
:数据库中对应的表名称domainObjectName
:对应model的类名,同时也是 xxxExample、interface、xml的名称;一般是表名的驼峰命名(个人最讨厌表一个名,转换过来又一个名称)mapperName
:指定Interface、xml文件的前缀名称,如果不配置取model作为前缀(可有可无)alias
:为表取别名,如果设置,会在查询语句的字段设置成alias_actualColumnName
;modelType
:覆盖defaultModelType
;enablexxx
:是否启用某些方法;默认为全部开启子标签如下:
:0个或者最多1个;如果配置,会在column
指定表中的主键;sqlStatement
:使用的那种数据库,对应mybatis如何配置获取最新的主键;type
:pre或者post,指定放置
:字段对应model的属性的名称;column
:表字段;property
:对应属性字段;javaType
:指定生成时属性的类型;jdbcType
:指定数据库字段的类型;该标签还可以增加子标签trimString
:是否在生成的sql语句增加空格的去除;
:需要忽略的字段;(这个没有用过);
:对应某些表的所有字段有统一开头,可以使用此字段统一切换成对应的类型;searchString
:就是定义开头(比如:searchString="^test_",以test开头的);replaceString
:被代替的字段,或者空字符串,或者指定的样式;以上标签是有顺序的,按照上面的顺序即可;否则启动会报错
以上就是经常用到并且很重要的标签,以及属性;熟能生巧,可以多尝试配置一下,找到适合自己项目的配置;
main函数主要是从classPath中加载上面配置的XML文件;并打印一些日志;具体的代码如下:
public static void main(String[] args) {
List warnings = new ArrayList();
try {
//重新生成时 代码是否被覆盖
boolean overwrite = true;
//加载MyBatis的xml配置文件
File file = new File(StartExecute.class.getClassLoader().getResource("myabtis-generator.xml").getFile());
ConfigurationParser parser = new ConfigurationParser(warnings);
Configuration configuration = parser.parseConfiguration(file);
DefaultShellCallback defaultShellCallback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(configuration, defaultShellCallback, warnings);
myBatisGenerator.generate(null);
} catch (IOException | SQLException | InterruptedException | InvalidConfigurationException | XMLParserException e) {
LOGGER.info("出现的异常信息是{"+e.getMessage()+"}");
}
warnings.forEach(item ->System.out.println());
System.out.println("生成完毕");
}
最后附上我自己的xml配置文件:
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="mybatis3" targetRuntime="MyBatis3" defaultModelType="flat" introspectedColumnImpl="">
<plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"/>
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<commentGenerator type="com.rwx.mybatis.component.config.CustomerCommentGenerator">
<property name="suppressAllComments" value="false"/>
commentGenerator>
<jdbcConnection
driverClass="${driver}"
connectionURL="${url}"
userId="${username}"
password="${password}"/>
<javaModelGenerator targetPackage="com.test.mybatis.generator.model"
targetProject="E:\Project\mybatisgenertor\src\main\java">
<property name="constructorBased" value="true"/>
<property name="trimStrings" value="true"/>
javaModelGenerator>
<sqlMapGenerator targetPackage="com.test.mybatis.generator.dao.mapper"
targetProject="E:\Project\mybatisgenertor\src\main\java">
<property name="enableSubPackage" value="true"/>
sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER" targetPackage="com.test.mybatis.generator.dao"
targetProject="E:\Project\mybatisgenertor\src\main\java"/>
<table tableName="test" domainObjectName="Test">
<generatedKey column="id" sqlStatement="SELECT(REPLACE(UUID(),'-',''))" type="pre"/>
<columnOverride column="id" property="id"/>
<columnOverride column="contract_code" property="contractCode"/>
<columnOverride column="money" property="money"/>
<columnOverride column="payment_type" property="paymentType" javaType="Integer"/>
<columnOverride column="total_periods" property="totalPeriods"/>
<columnOverride column="delete_flag" property="deleteFlag" javaType="Integer"/>
table>
context>
generatorConfiguration>