generator自动生成ibatis代码

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 命令。

如下: 

 

java -jar E:\Websoft\mybaits\mybatis-generator-core-1.3.2\lib\mybatis-generator-core-1.3.2.jar -configfile E:\WebWorkSpace\workspace_js\downAttachdemo\src\com\mochasoft\down\generator.xml -overwrite  
 成功时输出:MyBatis Generator finished successfully.

 

2、 Java生成

 

  List<String> warnings = new ArrayList<String>();  
  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);  
 3、ant

 

  1. <?xml version="1.0"?>  
  2.   
  3. <project default="genfiles" basedir=".">  
  4.     <path id="build">  
  5.         <fileset dir="${basedir}\web\WEB-INF\lib">  
  6.             <include name="*.jar" />  
  7.         </fileset>  
  8.     </path>  
  9.   
  10.     <property name="generated.source.dir" value="${basedir}" />  
  11.   
  12.     <target name="genfiles" description="Generate the files">  
  13.         <taskdef name="mbgenerator" classname="org.mybatis.generator.ant.GeneratorAntTask">  
  14.             <classpath refid="build" />  
  15.         </taskdef>  
  16.         <!--configfile:填你MBG文件名  -->  
  17.         <mbgenerator overwrite="true" configfile="generatorConfig.xml" verbose="false">  
  18.             <propertyset>  
  19.                 <propertyref name="generated.source.dir" />  
  20.             </propertyset>  
  21.         </mbgenerator>  
  22.     </target>  
  23. </project>  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章