MBG(Mybatis generator)自动生成sql语句

学习官网 http://www.mybatis.org/generator/


含有分页的插件html

建立一个简单的maven项目  在src/main/java包下  建立一个mbg.xml文件java

<?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>
	<!-- 驱动包(数据库的jar包) -->
  <classPathEntry location="D:\mysql-connector-java-5.1.26-bin.jar" />

	<!--  targetRuntime开发环境使用的mybatis的版本 -->
  <context id="DB2Tables" targetRuntime="MyBatis3">
  	<!-- 链接数据库的四要素 -->
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
        connectionURL="jdbc:mysql://localhost:3306/test"
        userId="root"
        password="123456">
    </jdbcConnection>
   <!-- 分页插件 -->
  <plugin type="org.mybatis.generator.plugins.RowBoundsPlugin"></plugin>
    <javaTypeResolver >
      <property name="forceBigDecimals" value="false" />
    </javaTypeResolver>

	<!-- 实体类 bean  带有get和set方法的bean -->
    <javaModelGenerator targetPackage="cn.et.entity" targetProject="src/main/java">
      <property name="enableSubPackages" value="true" />
      <property name="trimStrings" value="true" />
    </javaModelGenerator>
	
	<!-- sql语句相关的xml或者注解的生成包路径 -->
    <sqlMapGenerator targetPackage="cn.et.resource"  targetProject="src/main/java">
      <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>
	
	<!-- 生成的接口所在的位置 
		注解
		type="ANNOTATEDMAPPER"
		xml
		type="XMLMAPPER"
	-->
    <javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="cn.et.dao"  targetProject="src/main/java">
      <property name="enableSubPackages" value="true" />
    </javaClientGenerator>
	
	<!-- 数据库名 -->
    <table tableName="food">
    </table>

  </context>
</generatorConfiguration>


在pom.xml中配置  运行maven须要的插件mysql

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>GBM</groupId>
  <artifactId>GBM</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>GBM</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

	<!-- 运行maven须要的插件 -->
	<build>
		<plugins>
			<plugin> 
	      	  <groupId>org.mybatis.generator</groupId>
	      	  <artifactId>mybatis-generator-maven-plugin</artifactId>
	          <version>1.3.5</version>
	          <configuration>
	          	<configurationFile>src/main/java/mbg.xml</configurationFile>//指定mbg.xml在项目中的路径
	          </configuration>
			</plugin>
		</plugins>
	</build>


  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>





若是是Oracle数据库则须要进行类型转换

Oracle数据库,用mybatis-gen.xml 自动生成Java对象的时候,会根据number类型的长度不一样生成不一样的数据类型sql

 

number长度 Java类型
1~4 Short
5~9 Integer
10~18 Long
18+ BigDecimal

这样就写了一个类型转换器,须要继承JavaTypeResolver接口数据库

而后在mybaties配置文件generatorConfig.xml中类型转换配置位置添加上即apache


<javaTypeResolver type="com.generator.MyJavaTypeResolver">  
    <property name="forceBigDecimals" value="false" />                                             
</javaTypeResolver>
mbg.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> <!-- 驱动包(数据库的jar包) --> <classPathEntry location="D:\mysql-connector-java-5.1.26-bin.jar" /> <!-- targetRuntime开发环境使用的mybatis的版本 --> <context id="DB2Tables" targetRuntime="MyBatis3"> <!-- 链接数据库的四要素 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="root" password="123456"> </jdbcConnection> <javaTypeResolver type="com.generator.MyJavaTypeResolver"> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- 实体类 bean 带有get和set方法的bean --> <javaModelGenerator targetPackage="cn.et.entity" targetProject="src/main/java"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- sql语句相关的xml或者注解的生成包路径 --> <sqlMapGenerator targetPackage="cn.et.resource" targetProject="src/main/java"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!-- 生成的接口所在的位置 注解 type="ANNOTATEDMAPPER" xml type="XMLMAPPER" --> <javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="cn.et.dao" targetProject="src/main/java"> <property name="enableSubPackages" value="true" /> </javaClientGenerator> <!-- 数据库名 --> <table tableName="food"> </table> </context> </generatorConfiguration>

类型转换器MyJavaTypeResolver主要代码

public FullyQualifiedJavaType calculateJavaType(  
            IntrospectedColumn introspectedColumn) {  
        // TODO Auto-generated method stub  
         FullyQualifiedJavaType answer;  
            JdbcTypeInformation jdbcTypeInformation = typeMap  
                    .get(introspectedColumn.getJdbcType());  
  
            if (jdbcTypeInformation == null) {  
                switch (introspectedColumn.getJdbcType()) {  
                case Types.DECIMAL:  
                case Types.NUMERIC:  
                    if(introspectedColumn.getScale() > 0)  
                    {//若是包含小数点则转换成float  
                        answer = new FullyQualifiedJavaType(Float.class.getName());  
                    }else{  
                        if ( introspectedColumn.getLength() > 18  
                                || forceBigDecimals) {  
                            answer = new FullyQualifiedJavaType(BigDecimal.class  
                                    .getName());  
                        } else if (introspectedColumn.getLength() > 9) {  
                            answer = new FullyQualifiedJavaType(Long.class.getName());  
                        } else if (introspectedColumn.getLength() > 4) {  
                            answer = new FullyQualifiedJavaType(Integer.class.getName());  
                        } else {  
                            answer = new FullyQualifiedJavaType(Short.class.getName());  
                        }  
                    }  
                    break;  
  
                default:  
                    answer = null;  
                    break;  
                }  
            } else {  
                answer = jdbcTypeInformation.getFullyQualifiedJavaType();  
            }  
  
            return answer;  
    }
以上是生成注解的案例   如要生成xml  上面的mbg.xml有说明  只要改动便可  还要生成一个源文件包 src/main/resources






<!-- 生成的接口所在的位置 
		注解
		type="ANNOTATEDMAPPER"
		xml
		type="XMLMAPPER"
	-->
    <javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="cn.et.dao"  targetProject="src/main/java">
      <property name="enableSubPackages" value="true" />
    </javaClientGenerator>

运行命令     mybatis-generator:generate