情景如下,这两天在做一个分布式的项目,使用了Alibaba的dubbo作为通信工具,zookeeper作为register,由于dubbo是基于socket协议的,所以在进行pojo传输的时候报了异常,因为pojo没有实现序列化接口,就无法进行基于二进制的序列化传输。报错如下。
但是很麻烦的一件事是如果逆向工程生成的pojo全部自己实现序列化会很麻烦,所以看了一下mybatis的插件,发现有一个可以自动给所有pojo实现序列化接口(example除外)。
具体代码如下:
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE generatorConfiguration
3 PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
4 "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
5
6 <generatorConfiguration>
7 <context id="testTables" targetRuntime="MyBatis3">
8
9 <!-- 配置pojo的序列化 -->
10 <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
11
12 <commentGenerator>
13 <!-- 是否去除自动生成的注释 true:是 : false:否 -->
14 <property name="suppressAllComments" value="true" />
15 </commentGenerator>
16 <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
17 <jdbcConnection driverClass="com.mysql.jdbc.Driver"
18 connectionURL="jdbc:mysql://localhost:3306/xxxxxxx" userId=" "
19 password=" ">
20 </jdbcConnection>
21 <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL
22 和 NUMERIC 类型解析为java.math.BigDecimal -->
23 <javaTypeResolver>
24 <property name="forceBigDecimals" value="false" />
25 </javaTypeResolver>
26
27 <!-- targetProject:生成PO类的位置 -->
28 <javaModelGenerator
29 targetPackage="cn.xxxxxxx.pojo" targetProject=".\src">
30 <!-- enableSubPackages:是否让schema作为包的后缀 -->
31 <property name="enableSubPackages" value="false" />
32 <!-- 从数据库返回的值被清理前后的空格 -->
33 <property name="trimStrings" value="true" />
34 </javaModelGenerator>
35 <!-- targetProject:mapper映射文件生成的位置 -->
36 <sqlMapGenerator targetPackage="cn.xxxxxxx.mapper"
37 targetProject=".\src">
38 <!-- enableSubPackages:是否让schema作为包的后缀 -->
39 <property name="enableSubPackages" value="false" />
40 </sqlMapGenerator>
41 <!-- targetPackage:mapper接口生成的位置 -->
42 <javaClientGenerator type="XMLMAPPER"
43 targetPackage="cn.xxxxxxx.mapper" targetProject=".\src">
44 <!-- enableSubPackages:是否让schema作为包的后缀 -->
45 <property name="enableSubPackages" value="false" />
46 </javaClientGenerator>
47 <!-- 指定数据库表 -->
48 <table schema="" tableName=" "></table>
49 <table schema="" tableName=" "></table>
50 <table schema="" tableName=" "></table>
51 <table schema="" tableName=" "></table>
52 <table schema="" tableName=" "></table>
53 <table schema="" tableName=" "></table>
54 <table schema="" tableName=" "></table>
55 <table schema="" tableName=" "></table>
56 <table schema="" tableName=" "></table>
57 <table schema="" tableName=" "></table>
58 <table schema="" tableName=" "></table>
59
60 </context>
61 </generatorConfiguration>
java代码如下:
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;
public class GeneratorSqlmap {
public void generator() throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
// 指定 逆向工程配置文件
File configFile = new File("generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
}
public static void main(String[] args) throws Exception {
try {
GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
需要的jar如下:点击下载