MyBatis代码生成器——MyBatis Generator
MyBatis Generator能够根据配置生成不同类型的代码,代码包含了数据库表对应的实体类、mapper接口类、mapperXML文件和Example对象等。这些代码中几乎包含了全部的表单操作方法,可以极大程度上方便我们使用MyBatis。
说实话,刚刚接触MyBatis时,我不知道有这玩意这么好使,pojo和mapper.xml文件都是自己敲的,算是练练手吧。所以,这是什么?自动生成pojo和mapper.xml文件,提高开发效率,作为一个优秀的程序员,“懒”是很重要的优点。当然,自动生成的都是固定的,对于CRUD操作自然是省事,但是对于一些特殊的业务和表操作,还是需要写的。
话不多说,上配置文件
xml version="1.0" encoding="UTF-8"?> generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">id="testTables" defaultModelType="flat" targetRuntime="MyBatis3Simple"> name="suppressAllComments" value="true"/> driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="root" password="root"> name="forceBigDecimals" value="false"/> targetPackage="com.seu.fn.pojo" targetProject=".\src"> name="enableSubPackages" value="false"/> name="trimStrings" value="true"/> targetPackage="com.seu.fn.mapper" targetProject=".\src"> name="enableSubPackages" value="false"/> type="XMLMAPPER" targetPackage="com.seu.fn.mapper" targetProject=".\src"> name="enableSubPackages" value="false"/> schema="" tableName="class_and_grade">
schema="" tableName="students">
schema="" tableName="score_tb">
这里使用一些常用操作进行测试,下面将会叙述每个标签的功能和用法,包括例子中没有提及的标签。generatorConfiguration标签下包含三个子标签properties、classPathEntry和context标签,前两个标签在上面的例子中已经说明,下面重点看一下context标签。
context标签只有一个必选属性id,用来唯一确定。此外还有几个可选属性值:
l defaultModelType:重要,定义了如何生成实体类,可选值有:
Ø conditional:默认,和下面hierarchical类似,如果一个表的主键只有一个字段,那么不会为该字段生成单独的实体类,而是合并到基本实体类中。
Ø flat:该模型只为每张表生成一个实体类。包含表中所有字段。这种模型最简单推荐使用。
Ø hierarchical:如果有主键,那么会产生一个单独的主键实体类,会为BLOB字段单独生成一个实体类,剩下字段生成一个实体类。
l targetRuntime:此属性用于指定生成的代码的运行时环境,可选属性值:
Ø MyBatis3:默认,会生成与Example相关的方法。
Ø MyBatis3Simple:不会生成Example相关的方法。
l introspectedColumnImplement:指定扩展org.mybatis.generator.api.IntrospectedColumn类的实现类。
子标签有严格的配置顺序,包括:
property(0个或多个)
plugin(0个或多个)
commentGenerator(0个或多个)
jdbcConnection(1个)
javaTypeResolver(0个或1个)
javaModelGenerator(1个)
sqlMapGenerator(0个或1个)
javaClientGenerator(0个或1个)
table(1个或多个)
property中包含以下属性:
autoDelimitKeywords,自动给关键字添加分隔符
beginningDelimiter,配置前置分隔符属性
endingDelimiter,配置后置分隔符属性
javaFileEncoding:要使用的Java文件的编码,GBK或UTF-8
用来定义一个插件,扩展或修改生成的代码,按配置顺序执行。主要包括缓存插件、序列化插件、ToString插件等。因为使用情况并不多,关于这些插件的介绍可以查看官方文档www.mybatis.org/generator/reference/plugins.html。
用来配置如何生成注释信息。通过property属性进行配置,可选值有:
suppressAllComments:阻止生成注释,默认false
suppressDate:阻止生成注释包含时间戳,默认false
addRemarkComments:注释是否添加数据表的备注信息,默认false
一般情况下自动生成的注释信息没有任何价值。
用于指定自动生成要连接的数据库信息,必选唯一。如果JDBC驱动不在classpath下,需要通过classPathEntry便签引入jar包。
必选两个属性:
driverClass:访问数据库的JDBC驱动完全限定类名,如com.mysql.jdbc.Driver。
connectionURL:访问数据库的JDBC连接URL。
userId,password分别为用户名和密码,需要时填写。
同时还可以配置多个property子标签。
用来指定JDBC类型和Java类型如何转换。
可选属性type,一般使用默认不配置。
还可配置property子标签,可配置属性为forceBigDecimals,是否将DECIMAL和NUMERIC类型的JDBC字段转换为Java的BigDecimal,默认false,一般使用默认。
必须配置一个且仅一个,用来控制生成的实体类。
只有两个必选属性:
targetPackage:生成实体类存放的包名。
targetProject:指定目标项目路径,绝对或相对。
子标签property属性:
constructorBased:只对MyBatis3有效,为true使用构造方法入参,false使用setter方式,默认false。
enableSubPackages:如果为true,会根据catalog和schema来生成子包。
immutable:实体类属性是否可变。
rootClass:设置所有实体类的基类。
trimString:判断是否对数据库查询结果进行trim操作,默认false。
用于配置SQL映射生成器(Mapper.xml文件)的属性。
两个必选属性:
targetPackage:生成SQL映射文件存放的包名。
targetProject:指定目标项目路径,绝对或相对。
子标签property属性:
enableSubPackages:如果为true,会根据catalog和schema来生成子包。
用于配置Java客户端生成器(Mapper接口)的属性。
三个必选属性:
type:用于选择客户端带(Mapper接口)生成器,用户可自定义实现。该属性提供了以下预设的代码生成器,首先根据context的targetRuntime分成两类:
l MyBatis3:
ANNOTATEDMAPPER:基于注解的mapper接口,没有xml文件
MIXEDMAPPER:XML和注解的混合形式
XMLMAPPER:所有方法都在xml中,接口调用依赖xml文件(推荐使用)
l MyBatis3Simple
ANNOTATEDMAPPER:基于注解的mapper接口,没有xml文件
XMLMAPPER所有方法都在xml中,接口调用依赖xml文件(推荐使用)
targetPackage:生成mapper接口存放的包名。
targetProject:指定目标项目路径,绝对或相对。
配置需要生成最终代码的表。
必选属性:
tableName,指定要生成的表名,可用通配符表示多个表。还有其他多个属性,这里不在一一列出。
根据上面配置的generatorConfig.xml文件,编写如下代码:
public class GeneratorSqlmap {
public void generator() throws Exception {
List
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);
}
public static void main(String[] args) {
try {
GeneratorSqlmapgeneratorSqlmap = new GeneratorSqlmap();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行后在src下会生成对应的pojo和mapper文件,省时高效。可用根据需要进行修改配置文件。