重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本系列是「深入浅出MyBatis:技术原理与实践」书籍的总结笔记。
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、成都微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了海棠免费建站欢迎大家使用!
本篇是「深入浅出MyBatis」系列的最后一篇,主要介绍与Spring的集成,以及工作中的一些实用场景。
介绍之前,先整体总结下该系列的内容和写作思路。
MyBatis是一个框架,封装了数据库相关的操作,给我们开发人员带来了极大地便利,相对于Hibernate,有很大的灵活性和扩展性,在高并发高性能应用中,这点很重要。
首先介绍了JDBC的规范,了解我们最原始最熟悉的操作数据库的方式,MyBatis就是在此基础上进行封装和抽象。
然后,介绍了MyBatis的特性和核心组件,对其有个整体了解。
之后,详解介绍了MyBatis的配置、映射器,它们是平时使用、接触最多的,可以很好的使用MyBatis进行开发了。
最后,回顾了反射和动态代理基础,深入分析了MyBatis的解析和运行原理,插件及开发过程,一方面对MyBatis的核心组件有更深入的了解,一方面可以更好进行插件的开发,对sql进行统一处理。
实际使用中,往往会和Spring集成一起使用,可以减少我们的工作量,通过本篇的介绍,你会了解到:
了解Spring的基础,有助于理解集成配置,Spring技术主要由IOC和AOP两个基础功能构成。
IOC称为控制反转,可以这样理解:以前我们获取一个类的对象,都是去new一个,必须确定实现类是哪个,有了IOC,所有配置为Spring管理的对象都由Spring管理,包括对象的创建和生命周期,这样,去获取类的对象时,不需要显示指定,由Spring去决定返回哪个对象。
这样,对象的创建,控制权由业务代码转向给了Spring,称为控制反转。
AOP称为面向切面编程,所谓切面,是说在正常逻辑中插入一些逻辑处理代码,比如插入日志记录、事务管理等代码,其中,日志记录和事务管理就是切面。Spring AOP可以在不修改原有方法逻辑的情况下,通过简单配置,对受影响的类方法统一插入切面处理代码。
Spring AOP是通过动态代理实现的,当Spring的服务包含接口描述时,采用JDK动态代理,否则采用CGLIB代理。
最后,简单说明下AOP相关的概念,便于理解它的配置:
在编写业务代码时,一个业务方法可能涉及多张表或多条sql语句,同一条表数据可能会被同时访问,数据库的事务控制很重要,通过Spring AOP和Spring 事务管理,可以大量减少我们的代码,对各种场景的事务管理也很方便。
MySql默认隔离级别为可重复读。
传播行为,是指方法之间的调用,事务如何传递,在Spring中定义了7种传播行为,可根据不同场景进行配置,不一一介绍了,举几个说明下:
Spring默认的传播行为为PROPAGATION_REQUIRED。
了解了Spring的IOC,进行集成配置就比较简单了,另外,除了业务SQL的编写,事务是很重要的一部分,Spring AOP和事务管理帮我们解决了。
MyBatis提供了和Spring无缝对接的功能,主要通过mybatis-spring-x.x.x.jar实现,下面说下集成配置的过程:
使用c3p0的实现,只要实现javax.sql.DataSource接口都可以。
它是生成SqlSession的,组件提供了org.mybatis.spring.SqlSessionFactoryBean类给我们去配置。
配置文件mybatis-config.xml前面文章介绍了,就不再次写了。
使用Spring AOP管理事务。
实际工作中,可能有很多使用场景,下面会简单介绍些这些场景,说明实现思路。
对于文件,在数据库中,一般通过BLOB字段存储,MyBatis提供了BlobTypeHandler进行类型映射,可以把byte[]类型和BLOB类型自动转换。
但更多的时候,我们会把文件专门存放在一个文件服务器中,数据库存储文件路径即可。
批量更新有助于提高数据库性能,可以修改defaultExecutorType,设置为BATCH,这样一个事务如果有多条sql,只有在commit后才会发送SQL到数据库。
但要注意,如果程序上下文中,依赖插入的数据主键,可以通过调用sqlSession的flushStatements方法主动将当前缓存的sql发送给数据库执行。
MyBatis支持存储过程,对其进行了封装,具体配置过程在此不做详细介绍了。
如果系统数据库比较大,可通过分表减少单表的压力,MyBatis允许把表名作为参数传递到SQL中,很容易实现。
MyBatis具有分页功能,通过RowBounds实现,但它有个问题,会在一条SQL中查询所有的结果,再根据从第几条到第几条取数据返回。可以通过编写一个插件,重写SQL进行分页,进行统一处理。
之前文章介绍过,通过自定义typeHandler可以很容易的实现。
后续开始阅读「RabbitMQ实战:高效部署分布式消息队列」,并进行总结和分享。
欢迎扫描下方二维码,关注我的个人微信公众号 ~
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。