一. 基本概念
- 事务回滚:如果在一个事务中某个SQL执行事务,希望回到事务的原点,保证数据库数据的完整性。
- 在MyBatis中默认是关闭了JDBC的自动提交功能。
(1)每一个SqlSession默认都是不自动提交事务;
(2)session.commit()提交事务;
(3)openSession(true)。自动提交。setAutoCommit(true). - MyBatis底层是对JDBC的封装。
(1)JDBC中excuteUpdate()执行新增,删除,修改的SQL。返回值是int,表示受影响的行数。
(2)MyBatis中<insert><delete><update>标签没有resultType属性,其返回值都是int。 - 在openSession()时,Mybatis会在创建SqlSession的同时创建一个Transaction(事务对象),autoCommit都为True。如果出现异常,使用session.rollback()回滚事务。
二. 新增
- 在PeopleMapper.xml中使用
<insert>标签
<insert id="ins" parameterType="people">
insert into people values(default,#{name},#{age})
</insert>
- 测试类
try {
int index = session.insert("com.ouc.mapper.PeopleMapper.ins", people);
if(index>0){
System.out.println("成功");
}else{
System.out.println("失败");
}
} catch (Exception e1) {
session.rollback();
}
session.commit();
二. 修改
- 在PeopleMapper.xml中使用
<update>标签
<update id="upd" parameterType="people">
update people set name=#{name} where id = #{id}
</update>
- 测试类
try {
int index = session.update("com.ouc.mapper.PeopleMapper.upd", people);
if(index>0){
System.out.println("成功");
}else{
System.out.println("失败");
}
} catch (Exception e1) {
session.rollback();
}
session.commit();
三. 删除
- 在PeopleMapper.xml中使用
<delete>标签
<delete id="del" parameterType="int">
delete from people where id = #{0}
</delete>
- 测试类
try {
int index = session.delete("com.ouc.mapper.PeopleMapper.del", 3);
if(index>0){
System.out.println("成功");
}else{
System.out.println("失败");
}
} catch (Exception e1) {
session.rollback();
}
session.commit();