网上很多类似方法,但是都解决不了事物问题,下面是用事物模板来控制的
[color=red]首先上java方法:[/color]
public void batchInsert(final List<Object> dataList) {
final SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH,false);
transactionTemplate.execute(new TransactionCallback<String>() {
@Override
public String doInTransaction(TransactionStatus status) {
try {
for (Object value : dataList) {
session.insert("com.pinganfu.mpmt.common.dal.dao.MpmtPayTransDetailDao.insertData",value);//这里传的是包含namespace的sqlId
}
session.commit();
}finally{
session.clearCache();
session.close();
}
return null;
}
});
}
[color=red]xml中的配置:[/color]
<bean id="mpmtPaymentBatchDao" class="com.pinganfu.mpmt.common.dal.dao.impl.MpmtPaymentBatchDaoImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="transactionTemplate" ref="transactionTemplate"/>
</bean>
[color=red]这样的话,技能保证事务性,又能实现批量插入,根据本人的测试,list大小2000效率最高[/color]
原创,非抄袭 :D,转载请注明出处
[color=red]首先上java方法:[/color]
public void batchInsert(final List<Object> dataList) {
final SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH,false);
transactionTemplate.execute(new TransactionCallback<String>() {
@Override
public String doInTransaction(TransactionStatus status) {
try {
for (Object value : dataList) {
session.insert("com.pinganfu.mpmt.common.dal.dao.MpmtPayTransDetailDao.insertData",value);//这里传的是包含namespace的sqlId
}
session.commit();
}finally{
session.clearCache();
session.close();
}
return null;
}
});
}
[color=red]xml中的配置:[/color]
<bean id="mpmtPaymentBatchDao" class="com.pinganfu.mpmt.common.dal.dao.impl.MpmtPaymentBatchDaoImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="transactionTemplate" ref="transactionTemplate"/>
</bean>
[color=red]这样的话,技能保证事务性,又能实现批量插入,根据本人的测试,list大小2000效率最高[/color]
原创,非抄袭 :D,转载请注明出处