作者:zebiao,我这里只是记录下
总结一下数据库中插入更新的方法:如果找到重复数据则执行更新,如果没找到重复数据则执行插入,DBClient有三个方法:
1、单条 :insertOnDuplicateKey
int insertOnDuplicateKey(Object bean, String insertFields, String afterUpdate, Object... updateParameters)
参数:
- bean:数据记录对应的备案对象
- insertFields:插入的字段,如果为全部字段则输入*
- afterUpdate:update的字段,如“integralIn=?”,如果有多个字段要更新,中间用逗号隔开
- updateParameters : 参数,匹配afterUpdate中的?
2、批量:batchOnDuplicateKeyUpdate
int[] batchOnDuplicateKeyUpdate(String insertFields, String afterUpdate, List<?> list, List<Object[]> argsList) ;
参数:
- insertFields:插入的字段,如果为全部字段则输入*
- afterUpdate:update的字段,如“integralIn=?”,如果有多个字段要更新,中间用逗号隔开
- list:装载对于bean的list argsList:
- 对应参数数据,
List<Object[]>
,将每条对应的数据的参数存入Object[]中
3、批量:batchOnDuplicateKey
int[] batchOnDuplicateKey(String keys, String fields, List<?> list) ;
参数:
- keys:唯一索引字段,如果唯一所以是一个组合,则传入该组合
- fields:插入或更新的字段,其中不能包括key,否则会报错,提示key对应字段已经使用了两次
- list:存放bean的list
总结:
如果涉及更新的字段较多,推荐使用batchOnDuplicateKey方法,如果涉及的更新字段较少的话可以使用insertOnDuplicateKey和batchOnDuplicateKeyUpdate
示例:需求为插入不重复记录,唯一索引为day字段,
(1)对于insertOnDuplicateKey,调用方法
statDBClient.insertOnDuplicateKey(integralDailyStat, "*", "integralIn=?,integralOut=?,count=?,personTimes=?,day=?,channelPC=?,channelWap=?,channelWechat=?,integralOut_lottery=?",
integralDailyStat.getIntegralIn(), integralDailyStat.getIntegralOut(), integralDailyStat.getCount(), integralDailyStat.getPersonTimes(), day, integralDailyStat.getChannelPC(), integralDailyStat.getChannelWap(), integralDailyStat.getChannelWechat(), integralDailyStat.getIntegralOutLottery());
(2)对于batchOnDuplicateKey的调用方法
statDBClient.batchOnDuplicateKey("day", "integralIn,integralOut,count,personTimes,channelPC,channelWap,channelWechat,integralOutLottery", list);
batchOnDuplicateKey简洁了很多