• Mybatis逆向工程的pojo实现序列化接口的代码


    这两天在学习一个分布式的项目--淘淘商城,使用了Alibaba的dubbo作为通信工具,zookeeper作为register,由于dubbo是基于socket协议的,所以在进行pojo传输的时候报了异常,因为pojo没有实现序列化接口,就无法进行基于二进制的序列化传输。报错如下:

      

    但是很麻烦的一件事是如果逆向工程生成的pojo全部自己实现序列化会很麻烦,所以看了一下mybatis的插件,发现有一个可以自动给所有pojo实现序列化接口和序列化版本id(example除外)。

    如果生成的pojo能够有toString()的重写会给开发、调试带来很大的方便,所以我们也将生成的pojo重写toString()方法。

    方法如下:

    逆向工程配置文件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>
        <context id="testTables" targetRuntime="MyBatis3">
            <!-- 配置生成pojo的序列化的插件,mybatis支持很多插件,这些插件都在 org.mybatis.generator.plugins包下  -->
            <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />

            <!-- 配置生成pojo的toString()方法的插件,mybatis支持很多插件,这些插件都在 org.mybatis.generator.plugins包下 -->
            <plugin type="org.mybatis.generator.plugins.ToStringPlugin" />

            <commentGenerator>
                <!-- 是否去除自动生成的注释 true:是 : false:否 -->
                <property name="suppressAllComments" value="true" />
            </commentGenerator>
            <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/taotao" userId="root" password="root">

            </jdbcConnection>
            <!-- 默认false时,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer
                  当为 true时,把JDBC DECIMAL 和  NUMERIC 类型解析为java.math.BigDecimal -->

            <javaTypeResolver>
                <property name="forceBigDecimals" value="false" />
            </javaTypeResolver>

            <!-- targetProject:生成PO类的位置 -->
            <javaModelGenerator targetPackage="com.taotao.pojo" targetProject=".src">
                <!-- enableSubPackages:是否让schema作为包的后缀 -->
                <property name="enableSubPackages" value="false" />
                <!-- 从数据库返回的值被清理前后的空格 -->
                <property name="trimStrings" value="true" />
            </javaModelGenerator>
            <!-- targetProject:mapper映射文件生成的位置 -->
            <sqlMapGenerator targetPackage="com.taotao.mapper" targetProject=".src">
                <!-- enableSubPackages:是否让schema作为包的后缀 -->
                <property name="enableSubPackages" value="false" />
            </sqlMapGenerator>
            <!-- targetPackage:mapper接口生成的位置 -->
            <javaClientGenerator type="XMLMAPPER" targetPackage="com.taotao.mapper" targetProject=".src">
                <!-- enableSubPackages:是否让schema作为包的后缀 -->
                <property name="enableSubPackages" value="false" />
            </javaClientGenerator>
            <!-- 指定数据库表 -->
            <table schema="" tableName="tb_content"></table>
            <table schema="" tableName="tb_content_category"></table>
            <table schema="" tableName="tb_item"></table>
            <table schema="" tableName="tb_item_cat"></table>
            <table schema="" tableName="tb_item_desc"></table>
            <table schema="" tableName="tb_item_param"></table>
            <table schema="" tableName="tb_item_param_item"></table>
            <table schema="" tableName="tb_order"></table>
            <table schema="" tableName="tb_order_item"></table>
            <table schema="" tableName="tb_order_shipping"></table>
            <table schema="" tableName="tb_user"></table>
        </context>
    </generatorConfiguration>

    java代码如下:

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

    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;

    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();
            }

        }

    }

    生成的pojo类如下:(仅以TBItem为例)

    package com.taotao.pojo;

    import java.io.Serializable;
    import java.util.Date;

    public class TbItem implements Serializable {
        private Long id;

        private String title;

        private String sellPoint;

        private Long price;

        private Integer num;

        private String barcode;

        private String image;

        private Long cid;

        private Byte status;

        private Date created;

        private Date updated;

        private static final long serialVersionUID = 1L;

        public Long getId() {
            return id;
        }

        public void setId(Long id) {
            this.id = id;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title == null ? null : title.trim();
        }

        public String getSellPoint() {
            return sellPoint;
        }

        public void setSellPoint(String sellPoint) {
            this.sellPoint = sellPoint == null ? null : sellPoint.trim();
        }

        public Long getPrice() {
            return price;
        }

        public void setPrice(Long price) {
            this.price = price;
        }

        public Integer getNum() {
            return num;
        }

        public void setNum(Integer num) {
            this.num = num;
        }

        public String getBarcode() {
            return barcode;
        }

        public void setBarcode(String barcode) {
            this.barcode = barcode == null ? null : barcode.trim();
        }

        public String getImage() {
            return image;
        }

        public void setImage(String image) {
            this.image = image == null ? null : image.trim();
        }

        public Long getCid() {
            return cid;
        }

        public void setCid(Long cid) {
            this.cid = cid;
        }

        public Byte getStatus() {
            return status;
        }

        public void setStatus(Byte status) {
            this.status = status;
        }

        public Date getCreated() {
            return created;
        }

        public void setCreated(Date created) {
            this.created = created;
        }

        public Date getUpdated() {
            return updated;
        }

        public void setUpdated(Date updated) {
            this.updated = updated;
        }

        @Override
        public String toString() {
            StringBuilder sb = new StringBuilder();
            sb.append(getClass().getSimpleName());
            sb.append(" [");
            sb.append("Hash = ").append(hashCode());
            sb.append(", id=").append(id);
            sb.append(", title=").append(title);
            sb.append(", sellPoint=").append(sellPoint);
            sb.append(", price=").append(price);
            sb.append(", num=").append(num);
            sb.append(", barcode=").append(barcode);
            sb.append(", image=").append(image);
            sb.append(", cid=").append(cid);
            sb.append(", status=").append(status);
            sb.append(", created=").append(created);
            sb.append(", updated=").append(updated);
            sb.append(", serialVersionUID=").append(serialVersionUID);
            sb.append("]");
            return sb.toString();
        }
    }

    所需要的jar包如下:

      

    所需要的数据库表如下:

      

    参考链接:

      http://www.cnblogs.com/TimeIsChoice/p/8807548.html

      https://blog.csdn.net/qq_22627687/article/details/82833927

  • 相关阅读:
    Oracle存储过程(Stored Procedure)使用自定义类实体参数
    RTF格式富文本图片文本导出到Excel
    将EXCEL表格文字图片信息转成RTF格式写入数据库BLOB字段
    C# 阿拉伯数字转换为中文数字/中文数字转换为阿拉伯数字
    JavaScript操作select下拉框
    JavaScript操作浏览器一直往下滚动
    Microsoft Office 2003 Web Components 自动计数/自动求和
    SQLite递归
    WPF获取验证码倒计时
    System.UnauthorizedAccessException: 对路径“***”的访问被拒绝。
  • 原文地址:https://www.cnblogs.com/chenmingjun/p/9934842.html
Copyright © 2020-2023  润新知