MyBatis Generator 代码自动生成器使用

作者:じ☆ve宝贝

发布时间:2016-09-29T16:32:04

1.准备jar包

https://github.com/mybatis/generator/releases

2.连接数据库的jar包

mysql-connector-java-5.1.6-bin.jar

3.编辑generatorConfig.xml

<?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>

	<classPathEntry location="mysql-connector-java-5.1.12-bin.jar" />

	<context id="studyjava" targetRuntime="MyBatis3">
	
		<!-- xml文件是否在原有基础上合并,默认是false -->
		<property name="mergeable" value="false"></property>
		
		<plugin type="org.mybatis.generator.plugins.MysqlPagePlugin" />
		
		<!-- generate entity时,生成hashcode和equals方法 -->
		<plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin" />
		
		<!-- generate entity时,生成serialVersionUID -->
		<plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
	    
	    <!-- 这个插件只会增加字符串字段映射到一个JDBC字符的方法 -->
	    <plugin type="org.mybatis.generator.plugins.CaseInsensitiveLikePlugin" />
        
        <!-- genenat entity时,生成toString -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
		
		<!-- 抑制生成代码的注释 -->
		<commentGenerator>
			<property name="suppressAllComments" value="true" />
		</commentGenerator>

		<jdbcConnection driverClass="com.mysql.jdbc.Driver"
			connectionURL="jdbc:mysql://192.168.10.20:3306/studyjava" userId="root"
			password="root">
		</jdbcConnection>

		<javaModelGenerator targetPackage="cn.studyjava.model"
			targetProject="../../project" >
			<!-- 去除model中String的空格 -->
			 <property name="trimStrings" value="true" />
		</javaModelGenerator>

		<sqlMapGenerator targetPackage="cn.studyjava.mapper"
			targetProject="../../project" />

		<javaClientGenerator type="XMLMAPPER"
			targetPackage="cn.studyjava.mapper" targetProject="../../project" />

		<table schema="" tableName="wm_admin">
			<property name="useActualColumnNames" value="true" />
		</table>
		
		<!-- 返回主键id -->
		<!--  
		<table schema="" tableName="cia_app_charge">
			<property name="useActualColumnNames" value="true" />
			<generatedKey column="id" sqlStatement="MySql" identity="true" />
		</table>
		-->
	</context>
</generatorConfiguration>

4.ant执行脚本build.xml

<project default="genfiles" basedir=".">
	<property name="generated.source.dir" value="${basedir}" />

	<target name="genfiles" description="Generate the files">
		<taskdef name="mbgenerator" classname="org.mybatis.generator.ant.GeneratorAntTask" classpath="mybatis-generator-core-1.3.2.jar" />
		<mbgenerator overwrite="true" configfile="generatorConfig.xml" verbose="false">
			<propertyset>
				<propertyref name="generated.source.dir" />
			</propertyset>
		</mbgenerator>
	</target>
</project>

到此为止,大功告成!!!

生成的Example类使用说明

Example类指定如何构建一个动态的where子句. 表中的每个non-BLOB列可以被包括在where子句中. 例子是展示此类用法的最好方式.

Example类可以用来生成一个几乎无限的where子句.

Example类包含一个内部静态类 Criteria 包含一个用 anded 组合在where子句中的条件列表. Example类包含一个 List 属性,所有内部类Criteria中的子句会用 ored组合在一起. 使用不同属性的 Criteria 类允许您生成无限类型的where子句.

创建 Criteria 对象 可以使用Example类中的 createCriteria() 或者 or() . 如果 Criteria 对象是用 createCriteria() 创建的,它会自动为 List 属性添加一个 Criteria 对象 - 这使得它更容易写一个简单的where子句, 如果您不需要 or 或者其他几个子句组合的话. 用 or(Criteria criteria) 方法创建 Criteria 对象, 方法里的 criteria 对象会被添加进 Criteria 对象的列表中.

重要 我们推荐您只使用 or() 方法创建 Criteria 对象. 我们相信这种方法使代码更有可读性.

简单查询

这个例子展示了如何用生成后的Example类去生成一个简单的where子句:

  TestTableExample example = new TestTableExample();

  example.createCriteria().andField1EqualTo(5);

作为另一种选择, 下面的方式也是可以的:

  TestTableExample example = new TestTableExample();

  example.or().andField1EqualTo(5);

在上面的例子中, 动态生成的where子句是:

  where field1 = 5

###复杂查询 下面的例子展示了如何用生成后的Example类去生成一个复杂的where子句 (用到了 JSE 5.0 的泛型):

  TestTableExample example = new TestTableExample();

  example.or()
    .andField1EqualTo(5)
    .andField2IsNull();

  example.or()
    .andField3NotEqualTo(9)
    .andField4IsNotNull();

  List<Integer> field5Values = new ArrayList<Integer>();
  field5Values.add(8);
  field5Values.add(11);
  field5Values.add(14);
  field5Values.add(22);

  example.or()
    .andField5In(field5Values);

  example.or()
    .andField6Between(3, 7);

在上面的例子中, 动态生成的where子句是:

  where (field1 = 5 and field2 is null)
     or (field3 <> 9 and field4 is not null)
     or (field5 in (8, 11, 14, 22))
     or (field6 between 3 and 7)

将会返回满足这些条件的记录结果.

###去重复查询 您可以在所有的Example类中调用 setDistinct(true) 方法进行强制去重复查询.

###Criteria类 Criteria 内部类的每个属性都包含 andXXX 方法,以及如下的标准的SQL查询方法:

IS NULL - 指相关的列必须为NULL IS NOT NULL - 指相关的列必须不为NULL = (equal) - 指相关的列必须等于方法参数中的值 <> (not equal) - 指相关的列必须不等于方法参数中的值 > (greater than) - 指相关的列必须大于方法参数中的值 >= (greater than or equal) - 指相关的列必须大于等于方法参数中的值 < (less than) - 指相关的列必须小于于方法参数中的值 <= (less than or equal) - 指相关的列必须小于等于方法参数中的值 LIKE - 指相关的列必须 "like" 方法参数中的值. 这个方法不用必须加入 '%', 您必须设置方法参数中的值. NOT LIKE - 指相关的列必须 "not like" 方法参数中的值. 这个方法不用必须加入 '%', 您必须设置方法参数中的值. BETWEEN - 指相关的列必须在 "between" 方法参数中的两个值之间. NOT BETWEEN - 指相关的列必须不在 "not between" 方法参数中的两个值之间. IN - 指相关的列必须在传入的方法参数的list中. NOT IN - 指相关的列必须不在传入的方法参数的list中.