1.合并更多数据
// 关联另外的NeoMap跟putAll一样
public NeoMap append(NeoMap neoMap) {}
// 增加数据,跟put一样,只是返回值是NeoMap,便于链式操作
public NeoMap append(String key, Object value) {}
// 跟putAll差不多,不过这里新增了命名转换器,用于key的转换
public NeoMap putAll(NeoMap sourceMap, NamingChg namingChg) {}
2.NeoMap获取固定列
// 这是一个NeoMap只保留指定的列,并生成一个新的NeoMap
public NeoMap assign(Columns columns) {}
3.NeoMap列添加前缀
有些时候我们需要给NaoMap中的列添加一些前缀
// 给所有的key添加前缀,比如给所有的列添加"x_"
public NeoMap setKeyPre(String preFix) {}
4.NeoMap列转换
key进行转换
// 对NeoMap中的key进行转换,keys:oldKey-newKey-oldKey-newKey-...
public NeoMap keyConvert(String... keys) {}
5.判空
判空这里可以对NeoMap判空也可以对集合判空
// 集合判空
public static boolean isEmpty(Collection<NeoMap> neoMaps) {
return neoMaps == null || neoMaps.isEmpty() || neoMaps.stream().allMatch(Map::isEmpty);
}
// NeoMap判空
public static boolean isEmpty(NeoMap neoMap) {
return neoMap == null || neoMap.isEmpty();
}
6.获取不同的列值类型
由于NeoMap的value是Object类型,因此获取值之后还是要进行转换,这里借鉴之前的Orm框架,根据类型获取不同类型的值
// 根据指定的类型获取对应的数据
public <T> T get(Class<T> tClass, String key){}
// 获取空则有默认值,下面所有的类型都有两个函数,这里的这个默认值后面不再写了
public <T> T get(Class<T> tClass, String key, T defaultValue){}
public Character getCharacter(String key){}
public String getStr(String key){}
public Boolean getBoolean(String key) {}
public Byte getByte(String key){}
public Short getShort(String key){}
public Integer getInteger(String key){}
public Long getLong(String key){}
public Double getDouble(String key){}
public Float getFloat(String key){}
// 获取集合对象,注意:对于原先对象为非tClass的List,如果可以转为tClass,那么这里也是支持的,下面有解释
public <T> List<T> getList(Class<T> tClass, String key){}
// 获取集合Set对象,同上
public <T> Set<T> getSet(Class<T> tClass, String key){}
// 将值获取为NeoMap,对于value为普通对象的也可以用该方法,会自动的转换为NeoMap
public NeoMap getNeoMap(String key){}
对于上面的获取,其中需要注意的是,对于有Class tClass参数的函数,其中tClass可以不是原先存储的类型,只要原类型可以转换为的类型即可,如下例子
/**
* 其中原存储类型是String,但是按照Integer类型获取依然可以获取到
*/
@Test
public void getClassTest1(){
NeoMap neoMap = NeoMap.of("a", "1", "b", "2");
Integer result = neoMap.get(Integer.class, "a");
Assert.assertTrue(result.equals(1));
}
/**
* getNeoMap除了返回值可以为NeoMap之外,还可以是普通对象
*/
@Test
public void getNeoMapTest2(){
DemoEntity demoEntity = new DemoEntity().setName("name").setId(12L).setUserName("user");
NeoMap data = NeoMap.of("a", NeoMap.of("name", "name", "id", 12L, "userName", "user"));
Assert.assertTrue(demoEntity.equals(data.get(DemoEntity.class, "a")));
}
/**
* getNeoMap除了返回值可以为实体对象外,还可以是NeoMap
*/
@Test
public void getNeoMapTest3(){
DemoEntity demoEntity = new DemoEntity().setName("name").setId(12L).setUserName("user");
NeoMap data = NeoMap.of("a", demoEntity);
NeoMap result = NeoMap.of("name", "name", "id", 12L, "userName", "user");
Assert.assertTrue(result.equals(data.get(NeoMap.class, "a")));
}
/**
* 对于枚举类型,原值为String也可以获取到枚举类型
*/
@Test
public void getEnumTest2(){
NeoMap neoMap = NeoMap.of("enum", "A1");
Assert.assertEquals(EnumEntity.A1, neoMap.get(EnumEntity.class, "enum"));
}
其中其他的几个跟Class有关的函数也是一样的,也是可以转换为对应的兼容类型的,比如:
getList, getSet,getNeoMap
兼容类型:
7.多表的列使用
在下面介绍的join中有种场景是多表关联,而多表关联,则需要用到多个表的搜索条件,那么多表的搜索条件应该如何使用,如果按照上面的通常情况下,那么就可能会像这样使用。
NeoMap.of("table1.`name`", "a", "table1.`age`", 123, "table2.`group`", "g1", "table3.`name`", "k");
我们可以看到,在列和表更多的时候,写起来特别麻烦,而且里面很多key的字段有些都是相同的,那么因此就做了如下的设计,下面的效果与上面的完全一致
NeoMap.table(table1).cs("name", "a", "age", 123)
.and(table2).cs("group", "g1")
.and(table3).cs("name", "k");
新增了静态函数和几个非静态函数,全部都支持链式写法
public static NeoMap table(String tableName){}
public NeoMap cs(Object... kvs) {}
public NeoMap and(String tableName){}