1、jdbc事务管理的代码
String jdbcUrl = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
try (Connection connection = DriverManager.getConnection(jdbcUrl, username, password)) {
// 1、关闭自动提交,开启事务,如果设为true,关闭事务管理
connection.setAutoCommit(false);
// 2、执行一系列数据库操作
// 3、提交事务
connection.commit();
} catch (SQLException e) {
e.printStackTrace();
// 4、发生异常,回滚事务
connection.rollback();
}
// 5、关闭连接
if(connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
2、MyBatis 事务管理代码
这里配置文件如下:
<configuration>
<environments default="development">
<!--一个环境对应一个数据库(数据源)对应一个SqlSessionFactory对象-->
<!--一个SqlSessionFactory对象可以建立多个会话对象SqlSession,也就是建立多个连接对象-->
<environment id="development">
<!--事务管理方式有2种:如果采用JDBC,则使用JDBC底层事务管理;要么用其他框架的事务管理,为"MANAGED"-->
<transactionManager type="JDBC"/>
<!--数据源: 为程序提供Connection对象,数据源要实现DataSource接口-->
<!--采取连接池的方式-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="****"/>
<property name="poolMaximumActiveConnections" value="3"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="carMapper.xml"/> <!--自动从根路径下查找配置文件--> <!--一个表一个mapper-->
<mapper resource="studentMapper.xml"/>
</mappers>
</configuration>
mybatis事务管理代码:
SqlSession sqlSession = null;
try {
// 1.创建SqlSession对象,执行后获得连接池的连接对象,默认false
// 默认就是 相当于JDBC 中setAutoCommit(false) 开启事务管理
sqlSession = SqlSessionUtil.openSession();
// 2.数据库操作
int count = sqlSession.insert("insertCar",map);
// 3.提交事务
sqlSession.commit();
} catch (Exception e) {
// 4.回滚事务
if (sqlSession != null) {
sqlSession.rollback();
}
e.printStackTrace();
} finally {
// 5.关闭事务
if (sqlSession != null) {
sqlSession.close();
}
}
具体对照关系,写在了代码里面,MyBatis采用JDBC事务管理方式时,实际上底层封装JDBC事务管理机制。