
在公司开发项目过程中,遇到了这样一个需求:不同的中间件(redis,mysql,kafka...)有不同的字段,存储在不同的表中,需要向数据库表中添加对应信息.用到了Guava中的Table以及@insertProvide,根据相关内容写了如下Demo
Table详细介绍 @Test
public void testHashTable(){
//创建一个三维的table
Table table = HashbasedTable.create();
//Table
table.put("MYSQL","MYSQL需要插入的字段","MYSQL插入的值");
table.put("REDIS","REDIS需要插入的字段","REDIS插入的值");
table.put("KAFKA","KAFKA需要插入的字段","KAFKA插入的值");
//打印出的格式{R={C=V}}
System.out.println(table);
//通过table.row(R)可以获得:{C=V}
Map maps1 = table.row("MYSQL");
System.out.println(maps1);
//table.column():里面只能填列的C,可以得到其他两个值(R=V)
Map maps2 = table.column("插入的值");
System.out.println(maps2);
//通过table.columnKeySet():可以得到所有的C的集合
Set keySets = table.columnKeySet();
System.out.println(keySets);
//通过table.containsColumn():判断是否包含列的C
System.out.println(table.containsColumn("KAFKA"));
//通过table.containsRow():判断是否包含R
System.out.println(table.containsRow("KAFKA"));
table.containsValue("插入的值");
//通过table.contains():判断是否包含R和C
System.out.println(table.contains("MYSQL", "需要插入的字段"));
//得到的格式:[(R,C)=V,(R,C)=V,(R,C)=V]
//Cell:可以直接得到对应的R,C,V
Set> sets = table.cellSet();
for (Table.Cell set : sets) {
//set是一个Cell实例
System.out.println(set.getRowKey());
System.out.println(set.getColumnKey());
System.out.println(set.getValue());
}
//得到一个map>集合:{C={R=V}}
System.out.println(table.columnMap());
//得到一个map>集合:{R={C=V}}
System.out.println(table.rowMap());
//得到V集合
System.out.println(table.values());
}
应用场景
public class MiddlewareDaoSQL{
static final Table TABLE;
//静态代码块:一次加载
static{
String MYSQL = "ID,NAME,VERSION,URL,USERNAME,PASSWORD";
String KAFKA = "ID,NAME,VERSION,URL,USERNAME,PASSWORD,CLUSTERNAME,ADDRESS";
String MYSQL_VALUE = "#{middle.id},#{middle.name},#{middle.version},#{middle.url},#{middle.userName},#{middle.passWord}";
String KAFKA_VALUE = "#{middle.id},#{middle.name},#{middle.version},#{middle.url},#{middle.userName},#{middle.passWord},#{middle.clusterName},#{middle.address}";
TABLE = HashbasedTable.create();
TABLE.put("MYSQL",MYSQL,MYSQL_VALUE);
TABLE.put("KAFKA",KAFKA,KAFKA_VALUE);
}
public String insertMiddle(Map map){
String tableName = MapUtils.getStringValue(map,"tableName");
String middle = MapUtils.getStringValue(map,"middle");
SQL sql = new SQL();
sql.INSERT_INTO(tableName);
if(TABLE.containsRow(tableName)){
Map maps = TABLE.rowMap.get(tableName);
for( Map.Entry entry : maps.entrySet()){
sql.INTO_COLUMNS(entry.getKey());
sql.INTO_VALUES(entry.getValue());
}
}
return sql.toString();
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)