spring 数据库连接疑惑

[code="java"]
ServiceA{
batchInsert(){
for(int i=0;i<100;i++){
aDAO.insert();
}
}
}
[/code]

用到的框架是spring + ibatis,事务控制采用了spring的声明式事务控制
问题:
在ServiceA中,batchInsert方法循环执行了100次插入数据库操作,数据库连接是怎么控制的? 是每调用一次aDAO.insert()就开闭一次,还是在调用batchInsert()的时候就打开连接,打开事务,在batchInsert()方法执行结束时关闭事务,关闭连接。
[b]问题补充:[/b]
这里问的是Connection问题,就是循环执行100次 aDAO.insert()时,数据库连接是怎样的
是连接开闭了100次,
还是只开闭了1次

只有一次连接,但是是做了100次的插入后提交事务(与批处理不同,批处理是一次插入100条).

看你的声明式事务是怎么声明的,拦截的那个方法..
如果拦截是这个类的batchInsert方法的话,它会在这个方法的调用之前开启事务..然后在完成执行完成之后在提交事务..
如果拦截的是aDAO.insert()这个方法的时话,,就是在insert之前开启事务....insert完成之后提交事务

只开了1次事务,如果你的100次中的任何一次有异常的话 整个100次都会rollback

数据库连接没有关闭过 你配置了连接池

Connection是被代理的了 也就是你获得的Con已经是被拦截的了

它的con.close方法并不是关闭连接 而是再次释放给你使用的连接池

aDAO.insert()

如果是批量提交的话

你100次的插入 实际上是个批处理 只和数据库交互了一次 如果有异常则回滚

数据库连接重来就没有返还给数据库过

除非你设置的idel,session_time到时间连接池才会重新去数据库获取新的连接