mybatis-generator代码生成(支持自定义类型转换)

MyBatis Generator自定义类型转换代码生成
本文介绍了如何在Mybatis Generator中实现自定义类型转换,特别是将Mysql的tinyint类型转换为Java中的Integer类型。通过创建一个继承自JavaTypeResolverDefaultImpl的类并重写构造器,然后在配置文件中指定自定义类型解析器,可以实现所需转换。
前面我写过一个通过插件方式生成Dao接口代码(参考链接地址:https://blog.youkuaiyun.com/lichuangcsdn/article/details/80873229),但没找到自定义类型转换的方法,比如
默认是将Mysql中tinyint类型转换为java中的Byte字段,但通常我们需求一般是将tinyint转换为java中的Integer类型,所以需要自己写个类型转换组件了。
主要思路:
一、是重写一个类,继承org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl这个类,在构造器中添加如下代码
super.typeMap.put(-6, new JavaTypeResolverDefaultImpl.JdbcTypeInformation("TINYINT", new FullyQualifiedJavaType(Integer.class.getName())));
二、然后在XML配置文件中加入如下配置
<javaTypeResolver type="com.example.plugin.MyJavaTypeResolver">
    <property name="forceBigDecimals" value="false"></property>
</javaTypeResolver>
完整代码如下:
1、首先在IDEA中创建好一个 maven工程,pom.xml如下

<?xml version="1.0" encoding="UTF-8"?>
<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>com.example</groupId>
   <artifactId>myproject</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>myproject</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.5.9.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
   </properties>

   <dependencies>
      <dependency>
         <groupId>org.mybatis.spring.boot</groupId>
         <artifactId>mybatis-spring-boot-starter</artifactId>
         <version>1.3.1</version>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>

      <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
      </dependency>
      <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>druid</artifactId>
         <version>1.0.18</version>
      </dependency>
      <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
      <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>fastjson</artifactId>
         <version>1.2.46</version>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-configuration-processor</artifactId>
         <optional>true</optional>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-redis</artifactId>
      </dependency>

      <dependency>

         <groupId>org.mybatis.generator</groupId>

         <artifactId>mybatis-generator-core</artifactId>

         <version>1.3.5</version>

      </dependency>

      <dependency>
         <groupId>org.mybatis</groupId>
         <artifactId>mybatis</artifactId>
         <version>3.4.4</version>
      </dependency>

   </dependencies>

</project>
2、在resource目录下新建generatorConfig.properties和generatorConfig.xml
2.1、其中generatorConfig.properties的内容如下:
jdbc.driverLocation=/Users/lichuang/.m2/repository/mysql/mysql-connector-java/5.1.44/mysql-connector-java-5.1.44.jar
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://192.168.22.10:3306/test-demo?useUnicode=true&characterEncoding=utf8&useSSL=false
jdbc.userId=root
jdbc.password=123456
2.2、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>
    <properties resource="generatorConfig.properties"></properties>

    <classPathEntry location="${jdbc.driverLocation}"></classPathEntry>

    <context id="default" targetRuntime="MyBatis3">

        <commentGenerator>
            <property name="suppressDate" value="true"></property>
            <property name="suppressAllComments" value="true"></property>
        </commentGenerator>

        <jdbcConnection
                driverClass="${jdbc.driverClass}"
                connectionURL="${jdbc.connectionURL}"
                userId="${jdbc.userId}"
                password="${jdbc.password}">
        </jdbcConnection>

        <javaTypeResolver type="com.example.plugin.MyJavaTypeResolver">
            <property name="forceBigDecimals" value="false"></property>
        </javaTypeResolver>

        <javaModelGenerator targetPackage="com.example.entity" targetProject="src/main/java">
            <property name="enableSubPackages" value="false"></property>
            <property name="constructorBased" value="true"></property>
            <property name="trimStrings" value="true"></property>
            <property name="immutable" value="false"></property>
        </javaModelGenerator>

        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
            <property name="enableSubPackages" value="false"></property>
        </sqlMapGenerator>

        <!-- type取值 ANNOTATEDMAPPER:表示通过注解方式,无XML生成;XMLMAPPER:表示通过XML方式-->
        <javaClientGenerator targetPackage="com.example.dao" targetProject="src/main/java" type="XMLMAPPER">
            <property name="enableSubPackages" value="true"></property>
        </javaClientGenerator>

        <table tableName="wifi_marketing_manage" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
            <property name="constructorBased" value="false"/>
            <!--<generatedKey column="shop_id" sqlStatement="MySql" identity="true"></generatedKey>-->
        </table>
    </context>
</generatorConfiguration>
3、第2步中自定义转换类MyJavaTypeResolver

import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl;

/**
 * @author lichuang
 * @since 2018-06-12
 *
 * Mybatis生成代码类型自定义转换
 */
public class MyJavaTypeResolver extends JavaTypeResolverDefaultImpl {

    /**
     * 将tinyint转换为Integer,这里是关键所在
     */
    public MyJavaTypeResolver() {
        super();
        super.typeMap.put(-6, new JavaTypeResolverDefaultImpl.JdbcTypeInformation("TINYINT", new FullyQualifiedJavaType(Integer.class.getName())));
    }
}
4、在写个启动类(包含main方法的)
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class MybatisGenerateApp {

    public static void main(String[] args) {
        List<String> warnings = new ArrayList<>();
        try {
            String configFilePath = System.getProperty("user.dir")
                    .concat("/src/main/resources/generatorConfig.xml");
            System.out.println("加载配置文件===" + configFilePath);
            boolean overwrite = true;
            File configFile = new File(configFilePath);
            ConfigurationParser cp = new ConfigurationParser(warnings);
            Configuration config = cp.parseConfiguration(configFile);
            DefaultShellCallback callback = new DefaultShellCallback(overwrite);
            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
                    callback, warnings);
            //ProgressCallback progressCallback = new VerboseProgressCallback();
            myBatisGenerator.generate(null);
            //myBatisGenerator.generate(progressCallback);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        for (String warning : warnings) {
            System.out.println(warning);
        }
    }
}
5、运行程序即可。
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值