整合笔记和声明式事务

it2026-02-15  7

Mybatis-Spring整合

1.1、回忆

编写实体类编写接口编写核心配置文件编写Mapper.xml测试

导入相关jar包

junitmybatismysql数据库spring相关的aop织入mybatis-spring【new】 <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!-- Spring--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.0.RELEASE</version> </dependency> <!-- AOP织入--> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.6</version> </dependency> <!-- Mybatis-Spring--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.2</version> </dependency> </dependencies>

1.2 Mybatis-Spring

编写数据源配置

<!-- 连接池--> <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/hello?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="2019"/> </bean>

sqlSessionoFactory

<!-- sqlSessionFactory--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="datasource" /> <property name="typeAliases" value="com.bdqn.pojo.School"/> <property name="mapperLocations" value="com/bdqn/mapper/*.xml"/> </bean>

sqlSessionTemplate

<!-- 绑定sqlSession--> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory"/> </bean>

需要个接口加实现类

public class SchoolMapperimpl implements SchoolMapper { private SqlSessionTemplate sqlSessionTemplate; public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) { this.sqlSessionTemplate = sqlSessionTemplate; } public List<School> getSchool() { SchoolMapper mapper = sqlSessionTemplate.getMapper(SchoolMapper.class); return mapper.getSchool(); } }

将自己写的实现类,注入到Spring中,

<bean id="schoolMapper" class="com.bdqn.mapper.impl.SchoolMapperimpl"> <property name="sqlSessionTemplate" ref="sqlSession"/> </bean>

测试使用

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); SchoolMapper schoolMapperimpl = context.getBean("schoolMapper", SchoolMapper.class); List<School> school = schoolMapperimpl.getSchool(); for (School school1 : school) { System.out.println(school1); }

1.3 声明式事务

1. 回顾事务

把一组事务当成一个业务来做,要么都成功,要么都失败事务在项目开发中,十分重要,涉及到数据的一致性问题,不能马虎!确保完整性和一致性;

2. ACID原则

原子性:确保都成功,或都失败一致性:资源或状态,保持一致隔离性:多个业务可能操作同一个资源,防止数据损坏。确保完整性和一致性持久性:事务一旦提交,无论系统发生什么问题,结果都不会被影响,被持久化的写道存储器中

3. Spring中的事务管理

声明式事务:AOP编程式事务:需要在代码中,进行事务的管理

思考:

​ 为什么需要事务?

如果不配置事务,可能存在数据提交不一致的情况下,如果我们不在Spring中去配置声明式事务,我们就需要在代码中手动配置事务事务在项目答开发中十分重要,涉及到数据的一致性和完整性问题,不容马虎!

声明事务:

<!-- 结合AOP实现事务的织入--> <!-- 配置事务的类--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!-- 给哪些方法配置事务--> <!-- 配置事务的传播特性--> <tx:attributes> <tx:method name="*" propagation="REQUIRED"/> </tx:attributes> </tx:advice>

切入事务:

<!-- 配置事务切入--> <aop:config> <!-- 切入点--> <aop:pointcut id="txPointcut" expression="execution(* com.bdqn.mapper.*.*(..))"/> <!-- 切入--> <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/> </aop:config>
最新回复(0)