Java 对接第三方接口常用的工具类和开发效率工具

🦆博主介绍:小黄鸭技术

🌈擅长领域:Java、实用工具、运维

👀 系列专栏:📢Java之路 

📧如果文章写作时有错误的地方,请各位大佬指正,一起进步!!!

🧡欢迎大家点赞➕收藏⭐➕评论💬支持博主🤞  


参数拼接

JSON转实体类

先安装插件

Json转换

实体类转建表语句工具

​编辑 maven依赖

添加字段的含义

生成建表语句

根据表生成Mybatis-Plus Dao层文件

MyBatisX插件

生成mapper和XML文件


参数拼接

将参数以 字段名=参数&字段名=参数 的方式拼接

例如:

name=duck&sex=1&age=18

    public static String getParam(Map<String, String> map) throws Exception {
        StringBuilder param = new StringBuilder();
        for (Map.Entry<String, String> entry : map.entrySet()) {
            param.append(entry.getKey()).append("=").append(URLEncoder.encode(String.valueOf(entry.getValue()), "UTF-8")).append("&");
        }
        param = new StringBuilder(param.substring(0, param.length() - 1));
        return param.toString();
    }

JSON转实体类

一般我们对接完接口时会返回我们JSON结构的数据,我们需要根据返回的JSON字符串来生成对应的实体类,一般我会用IDEA 的插件 GsonFormat-Plus 来快速生成接收实体类。

先安装插件

Json转换


实体类转建表语句工具

 maven依赖

<dependency>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-annotations</artifactId>
    <version>1.6.2</version>
</dependency>

主要用于利用Swagger的注解来标注字段的含义,通过解析注解来生成建表语句的相关备注。

添加字段的含义

生成建表语句

package com.duck.api;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.lang.reflect.Field;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;


public class CreateSqlByClass {
    private static final Class<?> CLS = User.class;
    private static final String LINE = "\r\n";
    private static Map<String, String> map = new LinkedHashMap<String, String>();

    public static void main(String[] args) throws Exception {
        // 获取建表 SQL
        createSQL();
    }

    /**
     * 获取建表SQL(执行后控制台会自动输出建表语句SQL)
     */
    private static void createSQL() throws Exception {
        StringBuilder sb = new StringBuilder();
        sb.append("CREATE TABLE `").append(getSqlAttrName(CLS.getSimpleName())).append("` (").append(LINE);
        sb.append("  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',").append(LINE);
        sb.append("  `create_time` datetime DEFAULT NULL COMMENT '创建时间',").append(LINE);
        sb.append("  `update_time` datetime DEFAULT NULL COMMENT '创建时间',").append(LINE);
        sb.append("  `deleted` tinyint DEFAULT 0 COMMENT '是否已删除:0-未删除,1-已删除',").append(LINE);
        sb.append("  `version` tinyint DEFAULT 0 COMMENT '版本号',").append(LINE);

        // 获取其他参数
        Field[] fields = CLS.getDeclaredFields();
        for (Field field : fields) {
            String type = field.getType().getSimpleName();
            String key = getSqlAttrName(field.getName());
            String comment = getComment(field, false);
            switch (type) {
                case "String":
                    sb.append("  `").append(key).append("` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ").append(comment).append(",")
                            .append(LINE);
                    break;
                case "int":
                case "Integer":
                    comment = getComment(field, true);
                    if (isStatusAndType(field.getName())) {
                        sb.append("  `").append(key).append("` tinyint(2) DEFAULT 0 COMMENT ").append(comment).append(",")
                                .append(LINE);
                    } else {
                        sb.append("  `").append(key).append("` int(11) DEFAULT 0 COMMENT ").append(comment).append(",")
                                .append(LINE);
                    }
                    break;
                case "long":
                case "Long":
                    comment = getComment(field, true);
                    sb.append("  `").append(key).append("` bigint(20) DEFAULT 0 COMMENT ").append(comment).append(",")
                            .append(LINE);
                    break;
                case "Date":
                    sb.append("  `").append(key).append("` datetime DEFAULT NULL COMMENT ").append(comment).append(",")
                            .append(LINE);
                    break;
                case "List":
                    sb.append("  `").append(key).append("` json DEFAULT NULL COMMENT ").append(comment).append(",")
                            .append(LINE);
                    break;
                case "BigDecimal":
                    sb.append("  `").append(key).append("` decimal(16,4) DEFAULT NULL COMMENT ").append(comment).append(",")
                            .append(LINE);
                    break;
                default:
                    throw new Exception("未知属性类型:" + type);
            }
        }
        sb.append("  PRIMARY KEY (`id`)").append(LINE);
        sb.append(") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT'").append(getApiModelName())
                .append("表';").append(LINE);
        System.out.println("-- 创建表SQL");
        System.out.println(sb.toString());
    }

    /**
     * 大小写转换成_拼接
     * **/
    private static String getSqlAttrName(String attr) {
        char[] array = attr.toCharArray();
        StringBuilder sb = new StringBuilder();
        int idx = 0;
        for (char c : array) {
            if (c >= 'a' && c <= 'z') {
                sb.append(c);
            } else {
                if (idx > 0) {
                    sb.append("_");
                }
                sb.append(String.valueOf(c).toLowerCase());
            }
            idx++;
        }
        return sb.toString();
    }

    /**
     * 获取类的名称注解
     * */
    private static String getApiModelName() {
        ApiModel model = CLS.getAnnotation(ApiModel.class);
        if (Objects.isNull(model)) {
            return "";
        }
        return model.value();
    }

    private static String getComment(Field field, boolean isNumber) {
        String sqlFiledName = getSqlAttrName(field.getName());
        ApiModelProperty property = field.getAnnotation(ApiModelProperty.class);
        if (Objects.isNull(property)) {
            if (isNumber) {
                map.put(sqlFiledName, "0");
            } else {
                map.put(sqlFiledName, "NULL");
            }
            return "''";
        }
        // 是否有默认值
        String expmale = property.example();
        if (isNumber) {
            map.put(sqlFiledName, expmale);
        } else {
            map.put(sqlFiledName, "'" + expmale + "'");
        }
        return "'" + property.value() + "'";
    }

    private static boolean isStatusAndType(String s) {
        s = s.toLowerCase();
        return s.endsWith("status") || s.endsWith("type");
    }
}

根据表生成Mybatis-Plus Dao层文件

MyBatisX插件

设置数据库信息

如果不显示表,就打开 架构/schemas 中勾选要在idea中展示的表。

生成的文件如下

🧡欢迎大家点赞➕收藏⭐➕评论💬支持博主🤞   

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄鸭技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值