Mybatis Generator
最近DBA不允许使用Mybatis注解和tk进行数据库操作,要求使用XML的方式以便统一管理SQL语句。这可简直是要为难我胖虎啊,如果表字段少还好说,如果字段多我岂不是要累死?思索了一翻,不如使用Mybatis Generator逆向生成curd的xml, mapper接口和实体类,哈哈,这样还不是美滋滋。
下面记录一下使用MBG需要注意的地方,
先贴一个完整的例子
<?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>
<!-- context 中的属性要按规定的顺序排列,否则会报错-->
<!-- MyBatis3Simple 不会生成Example相关的信息 如果是Mybatis3就会生成-->
<context id="test" targetRuntime="MyBatis3Simple">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="false" />
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis"
userId="root" password="root">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<javaModelGenerator targetPackage="me.gacl.domain"
targetProject="src/main/java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<sqlMapGenerator targetPackage="mapping"
targetProject="src/main/resource">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER" targetPackage="mapper" targetProject="src/main/java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<table tableName="person" schema=""
enableCountByExample="false"
enableDeleteByExample="false" enableUpdateByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false">
<generatedKey column="id" sqlStatement="MYSQL" identity="true" />
</table>
</context>
</generatorConfiguration>
- 如果不希望生成和Example查询有关的内容,则可以按照如下方法进行配置。
<context id=” Mysql” targetRuntime=”MyBatis3Simple” defaultModelType=”flat ” >
- 如果使用的是targetRuntime=Mybatis3,但仍不想生成Example相关的东西,则可以在table子标签的属性值添加如下属性
<table tableName="person" schema=""
enableCountByExample="false"
enableDeleteByExample="false" enableUpdateByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false">
<generatedKey column="id" sqlStatement="MYSQL" identity="true" />
</table>
targetRuntime | 生成的代码编译版本 |
---|---|
Mybatis3 | JAVA5,Mybatis 3.0 |
MyBatis3Simple | JAVA5,Mybatis 3.0 |
MyBatis3DynamicSql | JAVA8,Mybatis 3.4.2 |
- context中的子标签有严格的配置顺序,不按顺序写子标签会报错
执行
要让Mybatis执行生成代码和sql配置有五种方式
- 命令行
- Ant插件
- Maven插件
- Java代码
- Eclipse插件
我使用的是Java代码的方式,其他四种我还没有试过
public class GeneratorTool {
public static void main(String[] args) throws Exception {
List<String> warnings = new ArrayList<>();
boolean overwrite = true;
File configFile = new File(GeneratorTool.class.getResource("/generatortest.xml").getPath());
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);
}
}