前面我写过一个通过插件方式生成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、运行程序即可。
MyBatis Generator自定义类型转换代码生成
本文介绍了如何在Mybatis Generator中实现自定义类型转换,特别是将Mysql的tinyint类型转换为Java中的Integer类型。通过创建一个继承自JavaTypeResolverDefaultImpl的类并重写构造器,然后在配置文件中指定自定义类型解析器,可以实现所需转换。
1793





