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

菜鸟上路u 2019-05-08 01:56:07
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层就不匹配了,要如何解决这个问题呢?
...全文
103 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧