声明式事务
声明
本文为其他博主原创文章整合,仅用作个人学习,特此声明
参考文章链接
(3条消息) B站 - 狂神 - Spring5课堂笔记_夜里的雨的博客-CSDN博客_狂神spring5笔记
ACID参考文章:
13、声明式事务
- 把一组业务当成一个业务来做;要么都成功,要么都失败!
- 事务在项目开发中,十分的重要,涉及到数据的一致性问题
- 确保完整性和一致性
事务的ACID原则:
1、原子性
2、隔离性
3、一致性
4、持久性
ACID参考文章:
Spring中的事务管理
- 声明式事务:AOP
- 编程式事务:需要在代码中,进行事务管理
声明式事务
先导入jar包
org.springframework
spring-webmvc
5.2.7.RELEASE
org.aspectj
aspectjweaver
1.9.4
org.springframework
spring-jdbc
5.2.7.RELEASE
org.mybatis
mybatis
3.5.2
org.mybatis
mybatis-spring
2.0.4
mysql
mysql-connector-java
8.0.12
org.projectlombok
lombok
1.18.12
src/main/java
**/*.properties
**/*.xml
false
src/main/resources
**/*.properties
**/*.xml
false
代码步骤:
pojo实体类 User
package pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
private String name;
private String pwd;
}
mapper目录下的 UserMapper、UserMapperImpl、UserMapper.xml
接口UserMapper
package mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import pojo.User;
public interface UserMapper {
public List getUser();
public int insertUser(User user);
public int delUser(@Param("id") int id);
}
UserMapperImpl
package mapper;
import pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import java.util.List;
public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper {
public List getUser() {
User user = new User(5,"你好","ok");
insertUser(user);
delUser(5);
SqlSession sqlSession = getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
return mapper.getUser();
//或者return getSqlSession().getMapper(UserMapper.class).getUser();
}
//插入
public int insertUser(User user) {
return getSqlSession().getMapper(UserMapper.class).insertUser(user);
}
//删除
public int delUser(int id) {
return getSqlSession().getMapper(UserMapper.class).delUser(id);
}
}
UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
insert into mybatis.mybatis (id,name,pwd) values (#{id},#{name},#{pwd})
deleteAAAAA from mybatis.mybatis where id = #{id}
resource目录下的 mybatis-config.xml、spring-dao.xml、applicationContext.xml
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
spring-dao.xml(已导入约束)
<?xml version="1.0" encoding="UTF-8"?>
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
测试类
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import mapper.UserMapper;import pojo.User;
public class MyTest7 {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper userMapper = (UserMapper) context.getBean("userMapper");
for (User user : userMapper.getUser()) {
System.out.println(user);
}
}
}
思考:
为什么需要事务?
- 如果不配置事务,可能存在数据提交不一致的情况下;
- 如果不在spring中去配置声明式事务,我们就需要在代码中手动配置事务!
- 事务在项目的开发中非常重要,涉及到数据的一致性和完整性问题!