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

来源:互联网 发布:nginx 代理iis 编辑:程序博客网 时间:2024/05/16 10:32

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



创建一个简单的maven项目  在src/main/java包下  创建一个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 >      <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"xmltype="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需要的插件

<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>          </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类型的长度不同生成不同的数据类型

 

number长度Java类型1~4Short5~9Integer10~18Long18+BigDecimal

这样就写了一个类型转换器,需要继承JavaTypeResolver接口

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


<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"xmltype="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"xmltype="XMLMAPPER"-->    <javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="cn.et.dao"  targetProject="src/main/java">      <property name="enableSubPackages" value="true" />    </javaClientGenerator>

运行命令     mybatis-generator:generate



原创粉丝点击