mysql binlog mq_canal实时同步mysql binlog到rabbitmq

本文介绍了一个名为MysqlDmlFieldData的类,用于解析 Canal-RabbitMQ 消息并将之转换为 Mysql 的 INSERT和UPDATE DML SQL。它提供了从JSON字符串解析、获取表名、类型、数据等关键信息的方法。
摘要由CSDN通过智能技术生成

import lombok.AllArgsConstructor;

import lombok.extern.slf4j.Slf4j;

import net.dreamlu.mica.core.utils.$;

import org.apache.commons.lang.StringUtils;

import java.util.LinkedHashMap;

import java.util.Map;

import java.util.Set;/**

* canal rabbitmq 消息解析成dml

*

* @author : Lee

* @date : 2021-01-04*/@Slf4j

@AllArgsConstructorpublic class MysqlDmlFieldData extends LinkedHashMap{private MysqlDmlFieldData(Mapdata) {

super();

super.putAll(data);

}public staticMysqlDmlFieldData fromJsonString(String json) {return new MysqlDmlFieldData($.readJsonAsMap(json, String.class, Object.class));

}publicString getTable() {return super.containsKey("table") ? (String) super.get("table") : StringUtils.EMPTY;

}publicString getType() {return super.containsKey("type") ? (String) super.get("type") : StringUtils.EMPTY;

}publicString getDmlSql() {

String type= this.getType();switch(type) {case "INSERT":returngetInsertSql();case "UPDATE":returngetUpdateSql();default:

log.warn("不支持该DML操作type:", type);

}return "";

}publicString getInsertSql() {

String insertSql= "insert into" + getTable() +insColAndVal();returninsertSql;

}publicString getUpdateSql() {

String updateSql= "update" + getTable() + "set" +updColAndVal();returnupdateSql;

}public MapgetData() {

String json= $.toJson(super.get("data"));return $.readJsonAsList(json, Map.class).get(0);

}publicString updColAndVal() {

String updColAndVal= "";

Map dataMap = this.getData();for(String key : dataMap.keySet()) {if($.equalsSafe(key, getPkNames())) {continue;

}

updColAndVal+= key + "='" + dataMap.get(key) + "',";

}

updColAndVal= StringUtils.substringBeforeLast(updColAndVal, ",");

updColAndVal+= "where" + getPkNames() + "='" + dataMap.get(getPkNames()) + "'";returnupdColAndVal;

}publicString insColAndVal() {

Map sqlType = this.getData();

Set set =sqlType.keySet();

String columns= StringUtils.join(set.iterator(), ",");

String values= StringUtils.join(sqlType.values(), "','");return "(" + columns + ") values ('" + values + "')";

}publicString getPkNames() {

String json= $.toJson(super.get("pkNames"));

$.readJsonAsList(json, String.class);return $.readJsonAsList(json, String.class).get(0);

}publicString getMysqlType() {return super.containsKey("mysqlType") ? (String) super.get("mysqlType") : StringUtils.EMPTY;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值