MBG有一个配置文件generatorConfig.xml。在里面设置连接数据库配置、javaModel、sqlMap、javaClient,table
<?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> <!-- 引入配置文件,可以通过${sqljdbcPath}取值 --> <properties url="file:///D:/workspaces/mybatisGen/bin/generatorConfig.properties"/> <!-- classPathEntry用于设置数据库的JDBC驱动的jar包地址,location可以等于只包含了数据库驱动的jar或zip路经,也可以是一个包含驱动的目录 --> <classPathEntry location="c:/ojdbc14.jar" /> <!-- targetRuntime:代码生成目标,默认是MyBatis3,可以是Ibatis2Java2或者Ibatis2Java5。生成对象兼容MyBatis版本3.0和更高版本,和JSE 5.0和更高版本 --> <!-- defaultModelType:用来定义生成模型类型策略。1.conditional 默认策略,为每个表生成一个Model class;2.flat:将所有的表中生成一个Model class,即这个类将保存所有表中字段;3.hierarchical :如果表有一个主键,该模型将生成一个主键类,另一个类,用于容纳任何BLOB列在表中,和另一个类,用于容纳其余的字段。这个是一个适当的继承类之间的关系 --> <context id="DB2Tables" targetRuntime="MyBatis3" defaultModelType="conditional"> <commentGenerator> <!-- 是否去除自动生成的注释,默认false,true:去除;false:不去除 --> <property name="suppressAllComments" value="true" /> <!-- 指定在生成的注释是否将包括时间戳,默认是false --> <property name="suppressDate" value="true" /> </commentGenerator> <!-- 数据库连接的信息:驱动类、连接地址、用户名、密码 --> <jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:ZFGJJ" userId="hr" password="hr"> </jdbcConnection> <!-- 解决数字转换问题 --> <javaTypeResolver> <!-- 只有一个属于forceBigDecimals,默认false。如果字段精确超过0,生成BigDecimal 如果字段精确是0,总长度10-18生成Long; 如果字段精确是0,总长5-9生成Integer; 如果字段精确是0,总长小于5生成Short; 如果forceBigDecimals为true,统一生成BigDecimal --> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- Model生成配置 targetPackage:生成包路径,自动生成目录。targetProject:项目路经,可以绝对路径或者相对路径。 --> <javaModelGenerator targetPackage="test.model" targetProject="D:\Workspace\mylearn\mybatis\"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="true" /> <!-- 从数据库返回的值被清理前后的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- sqlMap配置 --> <sqlMapGenerator targetPackage="test.sqlmap" targetProject="D:\Workspace\mylearn\mybatis\"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!-- DAO接口的生成 --> <javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="D:\Workspace\mylearn\mybatis\"> <property name="enableSubPackages" value="true" /> </javaClientGenerator> <!-- tableName:用于自动生成代码的数据库表;domainObjectName:对应于数据库表的javaBean类名,如果未指定自动基于表名生成 --> <!-- table其他属性:enableCountByExample="false";enableUpdateByExample="false";enableDeleteByExample="false";enableSelectByExample="false";selectByExampleQueryId="false";schema即为数据库名, tableName为对应的数据库表, domainObjectName是要生成的实体类 --> <table schema="hr" tableName="countries" domainObjectName="Customer"> <!-- 忽略字段 --> <ignoreColumn column="columnName" /> <!-- 无论字段是什么类型,生成的类属性都是varchar --> <columnOverride column="columnName" jdbcType="VARCHAR" /> <!-- 修改数据库列名映射的javabean属性名 --> <columnOverride column="oldColumnName" property="propertyName" /> <!-- 主键生成 如果用了这个 generatedKey ,MBG将在sqlmpper.xml里生成一个 selectKey元素在用在<insert>元素里 。 --> <generatedKey column="columnName" sqlStatement="JDBC" identity="true" /> <generatedKey column="ID" sqlStatement="MySql" identity="true" /> <!-- javabean继承的父类 --> <property name="rootClass" value="com.xxx.commons.entity.IdEntity"/> <property name="useActualColumnNames" value="true"/> </table> </context> </generatorConfiguration>
<javaModelGenerator>元素用于定义Java模型生成的属性
支持的属性:
constructorBased:默认值是false
此属性用于选择是否MyBatis生成器将生成一个类的构造函数,它接受一个值类中的每个字段。同时,SQL结果地图将建成投入使用构造函数而不是“setter”为每个字段。这个属性是只适用于MyBatis3和将被忽略了iBATIS2。这个属性可以被相应的属性在< table >元素。
immutable:默认为false
不可变,此属性用于选择是否MyBatis生成器将产生不可变模型类——这意味着类不会有“setter”方法和构造函数会接受类中每个字段的值。
trimStrings:默认值是false。
此属性用于选择是否MyBatis生成器添加代码来修剪的白色空间从字符字段从数据库返回的。这可以是很有用的,如果您的数据库将数据存储在字符字段而不是VARCHAR字段。当真正的,MyBatis生成器将插入代码来削减字符字段。
<javaClientGenerator>元素是用来定义Java客户机代码生成器的属性
Java客户机生成器用来建立Java接口和类,以便可以方便地使用生成的Java模型和XML映射文件。
对于iBATIS2目标环境,这些生成的对象采用的形式DAO接口和实现类。
对于MyBatis,生成的对象采用的形式mapper接口。
type属性:
如果targetRuntime为MyBatis3
XMLMAPPER:生成的对象将Java接口MyBatis 3。xmapper基础设施接口将会依赖生成的XML映射器文件。一般都是使用这个XMLMAPPER
<table>元素用于选择数据库中的一个表。选择的表将导致生成以下对象为每个表
tableName:必须配置 ,指定表的名称
domainObjectName:生成javabean对象的基本名称。如果未指定,MBG将自动基于表名生成。这个名字(无论是在这里指定,或自动生成)将被用来作为域类名和DAO类的名字。
enableInsert:是否生成插入语句。默认是true
enableSelectByPrimaryKey:是否通过主键生成选择语句。不管是否有这种设置,如果该表没有一个主键将不会生成。
enableUpdateByPrimaryKey:是否通过主键生成更新语句。如果该表没有主键,不管是否设置该属性,语句将不会生成。
enableDeleteByPrimaryKey:是否通过主键生成删除语句。如果该表没有主键,不管这种设置该属性,语句将不会生成。
enableDeleteByExample:是否通过example对象生成删除语句。这个声明使得许多不同的动态删除在运行时生成。
enableCountByExample:是否通过example对象生成计算行数语句。该语句将返回一个表中的行数相匹配的example。
enableUpdateByExample:是否通过example对象生成更新语句。该语句将更新一个表中相匹配的记录。
selectByPrimaryKeyQueryId:这个值将被添加到选择列表中选择通过主键的声明在本表格:“' <值>作为QUERYID”。这可以用于识别查询在DBA在运行时跟踪工具。如果你使用这样的价值,你应该指定一个唯一的id为每个不同的查询生成MBG。
selectByExampleQueryId:这个值将被添加到选择列表中选择通过例子的声明在本表格:“' <值>作为QUERYID”。这可以用于识别查询在DBA在运行时跟踪工具。如果你使用这样的价值,你应该指定一个唯一的id为每个不同的查询生成MBG。
enableSelectByExample:是否应该生成通过example的选择语句。这个声明使得许多不同的动态查询是在运行时生成。
MBG工具有5种方式运行,1、命令行方式,2、ant方式,3、Maven方式,4、基于xml配置的java方式,5、基于java配置的java方式。
1、运行cmd->java - jar jar包的文件路径 -configfile generator.xml的文件路径 -overwrite 命令。
如下: