jdbc的sql执行默认是自动提交事务
默认时自动提交,当我手动提交时会报错,不过数据仍是会插入到数据库中,由于执行完executeupdate后数据库会自动commitsql
开启手动提交
手动提交则须要手动调用commit才能提交事务数据库
mybatis未开启自动提交事务
手动提交两次,固然数据库是提交一条才能看到一条,另外能够看到connect是使用的同一个session
从源码中能够看到每次执行insert最后调用如下的方法mybatis
从prepareStatement能够看到性能
看到最后能够获得,即若是有的话就会用原来的链接,另外看过源码的同窗应该知道,sqlsession建立出来时transaction就会被建立,而connect是由transaction管理的,因此只要用同一个sqlsession,那么connection使用的也是同一个3d
最后验证当mybatis使用自动提交事务时
能够看到即便使用自动提交事务,connection也是同一个,并会由于自动提交而从新获取connectionblog
最后能够看到,mybatis防止在开启自动提交事务时手动调用commit方法作了判断,防止手动提交会抛出异常事务
总结源码
为了提升数据库执行的性能,咱们不须要执行一条sql就去建立或者获取一个connection,而是能够重复使用,就像最开始jdbc那里同样,一个connection能够开启多个statement来执行屡次,事务也能够分开提交也能够一次提交,且事务的提交不会关闭connection。it