• 售前

  • 售后

热门帖子
入门百科

Guava-Collections-Table

[复制链接]
升密示 显示全部楼层 发表于 2022-1-13 09:15:41 |阅读模式 打印 上一主题 下一主题
简介

        在公司开发项目过程中,遇到了这样一个需求:不同的中间件(redis,mysql,kafka...)有不同的字段,存储在不同的表中,需要向数据库表中添加对应信息.用到了Guava中的Table以及@insertProvide,根据相关内容写了如下Demo
Table详细介绍

  1.     @Test
  2.     public void testHashTable(){
  3.         //创建一个三维的table
  4.         Table<String,String,String> table = HashBasedTable.create();
  5.         //Table<R,C,V>
  6.         table.put("MYSQL","MYSQL需要插入的字段","MYSQL插入的值");
  7.         table.put("REDIS","REDIS需要插入的字段","REDIS插入的值");
  8.         table.put("KAFKA","KAFKA需要插入的字段","KAFKA插入的值");
  9.         //打印出的格式{R={C=V}}
  10.         System.out.println(table);
  11.         //通过table.row(R)可以获得:{C=V}
  12.         Map<String,String> maps1 = table.row("MYSQL");
  13.         System.out.println(maps1);
  14.         //table.column():里面只能填列的C,可以得到其他两个值(R=V)
  15.         Map<String,String> maps2 = table.column("插入的值");
  16.         System.out.println(maps2);
  17.         //通过table.columnKeySet():可以得到所有的C的集合
  18.         Set<String> keySets =  table.columnKeySet();
  19.         System.out.println(keySets);
  20.         //通过table.containsColumn():判断是否包含列的C
  21.         System.out.println(table.containsColumn("KAFKA"));
  22.         //通过table.containsRow():判断是否包含R
  23.         System.out.println(table.containsRow("KAFKA"));
  24.         table.containsValue("插入的值");
  25.         //通过table.contains():判断是否包含R和C
  26.         System.out.println(table.contains("MYSQL", "需要插入的字段"));
  27.         //得到的格式:[(R,C)=V,(R,C)=V,(R,C)=V]
  28.         //Cell<R,C,V>:可以直接得到对应的R,C,V
  29.         Set<Table.Cell<String,String,String>> sets =  table.cellSet();
  30.         for (Table.Cell<String, String, String> set : sets) {
  31.             //set是一个Cell<String, String, String>实例
  32.             System.out.println(set.getRowKey());
  33.             System.out.println(set.getColumnKey());
  34.             System.out.println(set.getValue());
  35.         }
  36.         //得到一个map<string,map<string,string>>集合:{C={R=V}}
  37.         System.out.println(table.columnMap());
  38.         //得到一个map<string,map<string,string>>集合:{R={C=V}}
  39.         System.out.println(table.rowMap());
  40.         //得到V集合
  41.         System.out.println(table.values());
  42.     }
复制代码
应用场景

  1. public class MiddlewareDaoSQL{
  2. static final Table<String,String,String> TABLE;
  3. //静态代码块:一次加载
  4. static{
  5.         String MYSQL = "ID,NAME,VERSION,URL,USERNAME,PASSWORD";
  6.         String KAFKA = "ID,NAME,VERSION,URL,USERNAME,PASSWORD,CLUSTERNAME,ADDRESS";
  7.        
  8.         String MYSQL_VALUE = "#{middle.id},#{middle.name},#{middle.version},#{middle.url},#{middle.userName},#{middle.passWord}";
  9.         String KAFKA_VALUE = "#{middle.id},#{middle.name},#{middle.version},#{middle.url},#{middle.userName},#{middle.passWord},#{middle.clusterName},#{middle.address}";
  10.         TABLE = HashBasedTable.create();
  11.         TABLE.put("MYSQL",MYSQL,MYSQL_VALUE);
  12.         TABLE.put("KAFKA",KAFKA,KAFKA_VALUE);
  13.         }
  14.    
  15.         public String insertMiddle(Map<String,Object> map){
  16.                 String tableName = MapUtils.getStringValue(map,"tableName");
  17.             String middle = MapUtils.getStringValue(map,"middle");
  18.                 SQL sql = new SQL();
  19.                 sql.INSERT_INTO(tableName);
  20.                 if(TABLE.containsRow(tableName)){
  21.                         Map<String,String> maps = TABLE.rowMap.get(tableName);
  22.                         for( Map.Entry<String,String> entry : maps.entrySet()){
  23.                                 sql.INTO_COLUMNS(entry.getKey());
  24.                                 sql.INTO_VALUES(entry.getValue());
  25.                        
  26.                         }
  27.                 }
  28.                 return sql.toString();
  29.         }
  30. }
复制代码


来源:https://blog.caogenba.net/qq_44447372/article/details/122457815
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作