Mybits+Oracle+List集合(封装Map)批量存储
1、处理数据(返回的数据是文本,无JSON及加密封装),要存储的是文本数据,有回车切分的一行行数据(读大文本数据存储亦如此)
订单号,类型,原始,折扣金金额,优惠金额,币种,交易时间,......
8671592 ,1,1,0,1 ,0,CNY,2017-09
6935632 ,1,1,0,1 ,0,CNY,2017-09
4633946 ,1,1,0,1 ,0,CNY,2017-09
9672181 ,1,1,0,1 ,0,CNY,2017-09
.....
大量这样的数据,需要存储到数据库。
2、处理数据(格式化,使数据符合一定格式)
1、
//用回车键切分返回文本,变成一行一行的数组
String result1[]=Str.split("\\r?\\n");
2、用List封装Map
List<Map<String,String>> list =new ArrayList<Map<String,String>>();
//取每条数据信息,存入数据库
for (int i = 1; i < result1.length; i++) {
Map m1=new HashMap();
list=java.util.Arrays.asList(result1[i]);
//去每一行的每个数据
String arrayList[] = result1[i].split(",");
for (int j = 0; j < arrayList.length; j++) {
m1.put("paramater"+j, arrayList[j].trim());
}
转成一个map:
{paramater6=CNY, paramater3=0, paramater4=1, paramater1=1, paramater2=1, paramater0=8671592}
//可以取得一个map的所有的value
/*list1=java.util.Arrays.asList(m1.values().toString());*/
//把Map放到List集合中
list.add(m1);
}
3、//此时的List中的数据形式
list封装map:
[{paramater7=2017-09-07 09:39:14, paramater12=55, paramater8=55, paramater2=1, paramater0=44},
{paramater9=880002686, paramater12=55, paramater4=1, paramater1=1, paramater2=1, paramater0=44},
.....
]
4、//开始准备存储数据
try {
cacheUtilService.save(list);
} catch (Exception e) {
3、mybatis-spring批量操作
@Override
public void save(List list) throws Exception {
serviceI.batchSave("MenberMapper.insertlist", list);
}
mybatis-spring-1.2.2.jar提供批量操作
//批量服务
@Resource(name = "sqlSessionTemplate")
private SqlSessionTemplate sqlSessionTemplate;
/**
* 批量新增
* @param str
* @param obj
*/
public Object batchSave(String str, List objs )throws Exception{
return sqlSessionTemplate.insert(str, objs);
}
4、mybatis中xml的sql,数据库字段的定义一定要与提供字符串的顺序一致
<insert id="insertlist" parameterType="java.util.List">
insert into hyb_core.table(
orderno,
tradetype,
originalmoney
....
)
(
<foreach collection="list" item="item" index="index"
separator="union all">
select
#{item.paramater0,jdbcType=VARCHAR},
#{item.paramater1,jdbcType=VARCHAR},
#{item.paramater2,jdbcType=VARCHAR},
......
} from dual
</foreach>
)
</insert>
5、数据存放list中,前一条总是被后一条覆盖的问题
在这里把放到list的Map,如果把Map m1=new HashMap();放到for外面,只实例化一次,操作Map的引用只有唯一一个地址,后面的数据每次访问都会覆盖前面的值。
for (int i = 1; i < result1.length; i++) {
Map m1=new HashMap();
}
在list.add(m1);操作的始终是唯一的map引用,所以list里面的值,无论多少都是最后一条数据。
每天努力一点,每天都在进步。