Spring+Mybatis整合核心知识点
1、Spring如何与Mybatis整合?
(1)配置数据源
(2配置SqlSessionFactory
(3)配置Dao
(4)配置Service
代码案例:
- 配置DataSources(数据源,连接池)
<!--所需依赖:1、driverClassName 2、url 3、username 4、password-->
<bean class="DruidDataSource" id="dataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
<property name="url" value="略"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
- 配置SqlSessionFactory
<!--1、依赖数据源 2、依赖于mapper文件(是路径用/)-->
<bean class="SqlSessionFactoryBeanName" id="sqlSessionFactory">
<property name="dataSource" rel="dataSource"></property>
<property name="mapperLocations" value="com/tjcu/mapper/*Mapper.xml"></property>
</bean>
- 配置管理dao层(mappeScannerConfigurer:映射扫描仪配置)
<!--1、dao的包 2、依赖于sqlSessionFactory mapperScannerConfigurer配置的时候默认实体类别名:首字母小写 -->
<bean class="mapperScannerConfigurer">
<property name="sqlSessionFactory" rel="sqlSessionFactory"></property>
<property name="basePackage" value="com.tjcu.dao">
</bean>
- 配置管理Service层
<!--依赖 1、dao层-->
<bean class="com.tjcu.service.UserServiceImpl" id=userService>
<propertry name="userDao" rel="userDao"></property>
</bean>
2、如何在Spring中进行事务控制?
(1)配置事务管理器(DataSourceTransactionManager)
(2)配置事务通知+事务属性+事务隔离级别
(3)配置切入点
(4)组装切面
代码案例:
- 配置事务管理器
<!--依赖于:1、事务源-->
<bean class="dataSourceTransactionManager" id="transactionManager">
<property name="dataSource" rel="dataSource"></property>
</bean>
- 配置事务通知+事务属性
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="insert*" propagration="REQUIRED" read-only="true"></tx:method>
<tx:method name="update" propagration="REQUIRTED" read-only="true"></tx:method>
<tx:method name="select*" propagration="SUPPORTS"></tx:method>
</tx:attributes>
</tx:advice>>
- 配置切入点
<aop:configur>
<aop:pointcut id="pointcut" value="execution(* com.tjcu.*ServiceImpl.*(..))"><aop:pointcut>
</aop:configur>
- 组装切面
<aop:configur>
<aop:advisor advice-rel="txAdvice" pointcut-rel="pointcut"></aop:advisor>
</aop:configur>
- spring整合Mybatis标准开发步骤(DAO层+Service层)
3、常见的数据库隔离级别有哪些 以及 分别解决什么问题?
(1)数据库事务隔离级别:
解决事务并发时存在 如:藏独,不可重复读,幻读的情况
(2)隔离级别
-
read_UnCommitted:已未提交事务:出现脏读,一个客户端添加某个数据,还没提交,另外的客户端就可以读到未提交的事务,会脏读
-
read_committed:读已提交,Oracle的默认事务隔离级别,解决脏读问题,一个客户端添加某个数据,还没提交,另外的客户端不能读到未提交的事务
-
repeatable:可重复读,解决事务的脏读和不可重复读问题,mysql默认的事务隔离级别
-
serializable:序列化读
(3)幻影读
幻影读:一个事务添加数据,另一事务对表中的数据进行多次查询,但查询的结果不一致。
4、Spring中的事务传播性解决什么问题 及 常见取值的区别是什么?
(1)概念
事务的传播性,解决因事务嵌套 而导致事务没法控制的问题。
(2)常用取值及区别
- REQUIRED
含义:如果外部没有事务,则开启新的事务;如果外部存在事务,则融合到外部的事务中。
开发中的使用:添加、修改、删除 时使用。
- SUPPORTS
含义:如果外部没有事务,则不开启事务;如果外部存在事务,则融合到外部的事务中。
开发中的使用:查询 时使用。