7 Spring集成Mybatis
通过ios技术,将mybatis和Spring集成在一起,
ioc能创建对象,可以把mybatis框架中的对象就给spring统一创建,开发人员从spring中获取对象
开发人员就不用同时面对两个或多个框架了,就面对一个spring
实现步骤
1.新建maven项目
2.加入maven依赖
1.spring依赖
2.mybatis依赖
3.mysql驱动
4.spring的事务的依赖
5.mybatis和spring集成的依赖(mybatis官方提供过的,用来创建mybatis中的SqlSessionFactory,dao对象的)
6.jdbc的依赖(不加容易出错)
3.创建实体类
4.创建dao接口和mapper对象
5.创建mybatis主配置文件
6.创建Service的配置文件:声明mybatis的对象交给spring创建
7.创建spring的配置文件:声明mybatis的对象交给spring创建
1.数据源
2.SqlsessionFactory
3.dao对象
4.声明自定义的service
8.创建测试类,获取Service对象,通过service调用dao完成数据库的访问
spring框架中提供事务处理方案
1.适合中小项目使用的,注解方案
使用@Transactional的步骤(加在共有方法上)
1.需要声明事务管理器对象
<bean id="xx" class="DataSourceTransactionManagerj">
2.开启事务注解驱动,告诉Spring框架,我要使用注解的方式管理事务
spring使用aop机制,创建@Transactional所在的类代理对象,给方法加入事务的功能。
spring给业务方法加入事务
@Around(“需要增加的事务功能的业务方法名称 ”)
Object myAround(){
//开启事务
try{
buy(1001,10);
spring的事务管理.commit();
}catch(Exception e){
spring的事务管理.rollback();
}
}
3.在你的方法的上面加入@Trancational
@Transactional(
//以下全都是默认值,可不写
propagation = Propagation.REQUIRED,
isolation = Isolation.DEFAULT,
readOnly = false,
rollbackFor = {
NullPointerException.class, NotEnughExecption.class
}
)
默认的类型
//
propagation = Propagation.REQUIRED,
//
isolation = Isolation.DEFAULT,
//只读
readOnly = false,
//异常数组
rollbackFor = {
// NullPointerException.class, NotEnughExecption.class
}
其中rollbackFor:表示发生指定的异常一定回滚
处理逻辑是:
1)spring框架会首先检查方法抛出的异常是不是在rollbackFor列表中
如果在rollbackFor列表中,不管是什么类型,一定回滚
2)如果抛出的异常不在列表中,spring会判断异常是不是runtimeException
如果是一定回滚
2.适合大型项目,有很多类,方法,需要大量配置事物的,使用aspectJ框架,在spring的配置文件中声明类,
方法需要的业。这种业务方式方法的事务配置完全分离。且都是在配置文件中实现的
1.如果使用aspectJ框架,首先要添加aspectJ依赖
2.需要声明事务管理器对象(只要做事务,必须要有事务管理器)
<bean id="xx" class="DataSourceTransactionManagerj">
3.声明方法需要的事务类型(配置方法的事务属性【隔离界别,传播行为,超时】
<!-- 第二种方式使用aspectJ开启事务 -->
<tx:advice id = "myAdvice" transaction-manager="transationManager">
<!-- tx:attributes :配置事务属性 -->
<tx:attributes>
<tx:method name="buy" propagation="REQUIRED" isolation="DEFAULT"
rollback-for="java.lang.NullPointerException,com.my.execpt.NotEnughExecption"/>
<!-- name属性中可以使用*通配符 -->
</tx:attributes>
</tx:advice>
4.配置aop,指定哪些类要创建代理
<!-- 配置aop -->
<aop:config>
<!-- 配置切入点表达式:指定包中 id:切入点的id,唯一值 expression:切入点表达式,指定那些类需要事务-->
<aop:pointcut id="servicept" expression="execution(* *..service..*.*(..))"/>
<aop:advisor advice-ref="myAdvice" pointcut-ref="servicept" />
</aop:config>
在wab中添加监听器,防止spring容器的配位文件每次都创建一个新的
1.增加依赖
<groupid>org.springframework</groupid>
<artifactId>spring-web</artfactId>
<version>5.2.5.RELEASE</version>
2.注册监听器ContextLoaderListener(在web.xml中添加)
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
3.修改默认路径(在web.xml中添加)
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</context-param>