Mybatis-Spring整合
1.1、回忆
- 编写实体类
- 编写接口
- 编写核心配置文件
- 编写Mapper.xml
- 测试
导入相关jar包
- junit
- mybatis
- mysql数据库
- 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&useUnicode=true&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>