双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

要求不用foreach进行插入,做一个适用所有mapper的Batch Insert

菜鸟上路u 菜鸟上路u 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
Service里面mapper的batch是list类型
@Service(value = "testJobService")
public class TestJobService {
@Autowired
private DAreaMapper dAreaMapper;

public void test1() {
List<DArea> list = new ArrayList<DArea>();
for(int i = 0; i < 10000; i++) {
DArea area = new DArea();
area.setId(i);
area.setName("aa"+i);
area.setParentAreaId(i-1);
area.setLatitude((double)1);
area.setLongitude((double)1);
list.add(area);
}
long startTime = System.currentTimeMillis();
dAreaMapper.batch(list);
long endTime = System.currentTimeMillis();
System.out.println(endTime - startTime);
}
}

做了一个aop进行拦截,将List转变成为List中的泛型进行插入
@Aspect
@Component
public class BatchInsertAspect {

@Autowired
SqlSessionFactory sqlSessionFactory;

@Pointcut("execution(public * com.kg.quartz.mapper.*.*.batch*(..))")
/*@Pointcut("execution(public * com.kg.quartz.controller.HelloController.add*(..))")*/
public void addAdvice(){}

@Bean(name = "baseSqlSessionFactory")
@Primary
@Around("addAdvice()")
public void Interceptor(ProceedingJoinPoint pjp){
System.out.println("---------------加载aop");
SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH);
try {
Signature signature = pjp.getSignature();
Object obj = pjp.getTarget();
MethodSignature methodSignature = (MethodSignature)signature;
Method targetMethod = methodSignature.getMethod();
Object[] args = pjp.getArgs();
int number = 0;
for(Object arg : args) {
String typeName = arg.getClass().getTypeName();
if(typeName.equals("java.util.ArrayList")) {
List genericList = (ArrayList)arg;
for(int i = 0; i < genericList.size(); i++) {
targetMethod.invoke(obj, genericList.get(i));
}
}
if(number%1000 == 0) {
session.commit();
}
}
} catch (Exception e) {
e.printStackTrace();
//没有提交的数据可以回滚
session.rollback();
} finally {
session.close();
}
}
}

但在这个时候有一个问题,mapper层必须要这样写
public void batch(@Param(value="dArea") DArea dArea);
但这个和service层就不匹配了,要如何解决这个问题呢?
...全文

相关推荐

评论
收藏 已收藏
分享
返回顶部
菜鸟上路u
Web 开发 81,108 成员 341,721 内容