深入浅出MyBatis: MyBatis与春天集成及实用场景

  
  

本系列是“深入浅出MyBatis:技术原理与实践“书籍的总结笔记。

     

本篇是“深入浅出MyBatis”系列的最后一篇,主要介绍与春天的集成,以及工作中的一些实用场景。

  

介绍之前,先整体总结下该系列的内容和写作思路。

  

MyBatis是一个框架,封装了数据库相关的操作,给我们开发人员带来了极大地便利,相对于冬眠,有很大的灵活性和扩展性,在高并发高性能应用中,这点很重要。

  

首先介绍了JDBC的规范,了解我们最原始最熟悉的操作数据库的方式,MyBatis就是在此基础上进行封装和抽象。

  

然后,介绍了MyBatis的特性和核心组件,对其有个整体了解。

  

之后,详解介绍了MyBatis的配置,映射器,它们是平时使用,接触最多的,可以很好的使用MyBatis进行开发了。

  

最后,回顾了反射和动态代理基础,深入分析了MyBatis的解析和运行原理,插件及开发过程,一方面对MyBatis的核心组件有更深入的了解,一方面可以更好进行插件的开发,对sql进行统一处理。

  

实际使用中,往往会和春天集成一起使用,可以减少我们的工作量,通过本篇的介绍,你会了解到:

  
      <李>春季的基础知识:国际奥委会,AOP,事务管理,李   <李> MyBatis-Spring应用:配置和集成李   <李>实用场景介绍李   
  Spring的IOC和AOP
  

了解春天的基础,有助于理解集成配置,春天技术主要由国际奥委会和AOP两个基础功能构成。

  国际奥委会<编辑>   

奥委会称为控制反转,可以这样理解:以前我们获取一个类的对象,都是去新的一个,必须确定实现类是哪个,有了国际奥委会,所有配置为弹簧管理的对象都由弹簧管理,包括对象的创建和生命周期,这样,去获取类的对象时,不需要显示指定,由春天去决定返回哪个对象。

  

这样,对象的创建,控制权由业务代码转向给了春天,称为控制反转。

  AOP <编辑>   

AOP称为面向切面编程,所谓切面,是说在正常逻辑中插入一些逻辑处理代码,比如插入日志记录,事务管理等代码,其中,日志记录和事务管理就是切面.Spring AOP可以在不修改原有方法逻辑的情况下,通过简单配置,对受影响的类方法统一插入切面处理代码。

  

Spring AOP是通过动态代理实现的,当春天的服务包含接口描述时,采用JDK动态代理,否则采用CGLIB代理。

  

最后,简单说明下AOP相关的概念,便于理解它的配置:

  
      <李>切入点:春天生成代理对象后,当调用服务方法时,会调用InvitationHandler的调用方法,需要拦截哪些方法,进行特殊处理呢,这就是切入点,弹簧可以通过正则进行配置;李   <李>切面:上面已经介绍了,日志记录,事务管理等需要处理的逻辑对象,就是切面;李   <李>连接点:它是在程序运行中根据不同的通知来实现的程序段,通知包括,前置通知,后置通知,异常后通知,正常返回后通知,环绕通知;李   
  
春天事务管理h5> 在编写业务代码时,一个业务方法可能涉及多张表或多条sql语句,同一条表数据可能会被同时访问,数据库的事务控制很重要,通过Spring AOP和春天事务管理,可以大量减少我们的代码,对各种场景的事务管理也很方便。

  <编辑>事务隔离级别   
      <李>读未提交:可能出现脏读问题,一个事务读取另一个事务未提交的数据,李   <李>读已提交:可能出现不可重复读问题,针对同一条记录,同一个事务前后可能读取不同的数据,李   <李>可重复读:可能出现幻读问题,针对删除和插入记录,同一个查询条件,同一个事务返回的记录数可能不同,李   <李>序列化:所有操作会按顺序执行;李   
  

MySql默认隔离级别为可重复读。

  <编辑>传播行为   

传播行为,是指方法之间的调用,事务如何传递,在春天中定义了7种传播行为,可根据不同场景进行配置,不一一介绍了,举几个说明下:

  
      <李> PROPAGATION_REQUIRED:如果存在一个事务,则使用当前事务,否则开启一个事务,李   <李> PROPAGATION_SUPPORTS:如果存在一个事务,则支持当前事务,否则以非事务执行;李   <李> PROPAGATION_REQUIRES_NEW:总是开启一个新的事务,即使有一个事务存在,李   <李> PROPAGATION_NOT_SUPPORTED:总是以非事务执行,挂起已存在的事物;李   
  

春默认的传播行为为PROPAGATION_REQUIRED。

深入浅出MyBatis: MyBatis与春天集成及实用场景