企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
Spring和MyBatis整合,Spring的作用 1. Mapper接口的实现类交给Spring的IOC容器管理,包括给Service依赖注入Mapper实现类 class MyService { @Autowired Mapper mapper1; } 2. 管理Service层的事务处理。 class MyService { @Autowired mapper mapper1; public void test() { mapper1.aa() mapper2.bb(); } } 配置applicationContext.xml MyBatis交给Spring管理 ~~~ <bean id="ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root" /> <property name="password" value="root" /> </bean> <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 加载mybatis的主配置文件 --> <property name="configLocation" value="classpath:SqlMapConfig.xml"/> <!-- 注入数据源 --> <property name="dataSource" ref="ds" /> </bean> ~~~ Service和Mapper扫描 ~~~ <context:component-scan base-package="com.neuedu.model.service"></context:component-scan> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 指定扫描的包名 如果扫描多个包,每个包中间使用半角逗号分隔 --> <property name="basePackage" value="com.neuedu.model.dao"/> <!-- 自动创建session(connection)去数据库交互 --> <property name="sqlSessionFactoryBeanName" value="sessionFactory"/> </bean> ~~~ 配置事务管理 ~~~ <!-- 声明事务管理器 --> <bean id="txm" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="ds"></property> </bean> <!-- 配置事务通知 --> <tx:advice id="txAdvice" transaction-manager="txm"> <!-- 配置事务的传播特性 --> <!-- 配置事务传播特性 REQUIRED 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。常用于DML语句的操作 SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。 常用于DQL语句的操作 MANDATORY 支持当前事务,如果当前没有事务,就抛出异常。 REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。 NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。 NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与REQUIRED类似的操作。 --> <!-- 持久层,业务层的方法命名遵循规范 规定: 以save insert update delete为起始名的方法,执行事务 强制执行事务 以find select get validate为起始名的方法,不执行事务 不强制执行事务 规范大于规则:不准起其他的名字 --> <tx:attributes> <tx:method name="save*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="delete*" propagation="REQUIRED"/> <tx:method name="select*" propagation="SUPPORTS" read-only="true"/> </tx:attributes> </tx:advice> <!-- 通过aop切面来控制事务 --> <aop:config> <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.neuedu.model.service.*.*(..))"/> </aop:config> ~~~ 事务管理方法二 ~~~ <!-- 配置事务管理器--> <p:bean id=" txm " class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <p:property name="dataSource" ref="dataSource"></p:property> </p:bean> <!-- 开启注解事务 --> <tx:annotation-driven transaction-manager=" txm"/> ~~~ 练习: EMP, lizhi 编写一个Service方法,模拟一个员工离职了。