深入理解Mybatis
什么是Mybatis?
MyBatis呢,是Java领域中的一款持久化框架,它的主要功能是,让我们能够轻松地在Java对象和数据库之间建立联系。通过这种联系,开发者可以很方便地存储、检索和操作数据。MyBatis与其他ORM框架相比,有一些独有的特点。
首先,MyBatis强调对SQL的可控性。在使用的时候,可以直接编写SQL语句,提供更精准地优化查询。还可以充分利用数据库的特性,处理各种复杂的业务逻辑。在某些情况下,这能够带来更好的性能。
但是,MyBatis不会白动地将对象和数据库表进行完全的映射,这跟具他ORM框架的做法不同。在使用MyBatis时,你要手动编写映射配置,把Java对象的属性与数据库表的列进行关联。虽然说这种方式需要更多的操作,但也正是这种方式让映射过程更加可控,尤其适用于处理复杂的数据结构。
相对于其他ORM框架,MyBatis更加灵活。它允许开发者直接操控SQL语句,并于动控制时象与数据库表之间的映射关系。这使得MyBatis在需要精细控制数据库操作以及处理复杂映射关系场景中更加具有优势。而其他一些ORM框架则更适合简化开发流程,减少样板代码的编写。
优缺点分析:
优点:
1.将数据库的操作逻辑和业务操作解耦合,使得开发人员可以专心业务逻辑的处理。
2.开发人员只写Sql就可以访问数据库,不需要关心各种数据库连接等额外的操作。各种Connection和Statement都交给了Mybatis来管理。
3.可以将数据库表的字段按照业务规则直接映射到D0层,不用再像JDBC一样需要业务代码来转换除此之外,还有其他优点:
4.支持多种数据源,如POOLED,UNPOOLED,INDI,同时,还可以整合其他数据库连接池如HikariCpDruid,C3p0等。
5.支持动态SQL,大大减少了代码的开发量,如if/foreach等常用的动态标签
6.支持事务性的一级缓存,二级缓存和自定义缓存,其中,一级缓存是以session为生命周期,默认开启二级。
7.缓存则是根据配置的算法来计算过期时间(FFO,LRU等),二级缓存如果操作不当容易产生脏数据,不建议使用。
缺点:
虽然 MyBatis很强大,但编写SQL语句可能会相对繁琐,特别是当涉及多个字段或多个关联表时。这就要求开发人员在SQL编写方面有一定的功底。另一个缺点是,由于SQL语句依赖于特定的数据库,如果想要更换数据库,移植性就会受到影响。这意味着不能轻易地更改数据库,可能需要进行一些适应性的修改。
SpringJPA和Mybatis区别:
Spring Data JPA=自动化ORM+面向对象查询通过实体类映射数据库,自动生成SQL,简化开发,适合快速开发和简单/中等复杂业务。
优点:开发快,维护简单,支持复杂关联查询(JPQL、Criteria)
缺点:对复杂SQL控制较弱,性能有时不够精细。
MyBatis=手写SQL+灵活控制,需要自己编写SQL和映射文件,灵活性高,适合复杂SQL和性能优化要求高的场景。
优点:SQL灵活,性能可控,支持复杂查询。
缺点:代码量较多,开发维护成本高。
Mybatis核心组件:
MyBatis是一个优秀的持久层框架,它简化了企业应用中数据库操作的代码。MyBatis 的核心组件主要包括以下几个部分:
1. SqlSessionFactoryBuilder:这是创建 SqlSessionFactory 的构建器。它使用配置文件或配置类来创建 SqlSessionFactoary.SqlSessionFactoryBuilder 本身是一个工具类,通常在应用程序启动时使用一次,之后就可以丢弃。
2. SqlSessionFactory:一旦创建,SqlSessionFactory 就可以被多个线程安全地重用。它是用来创建 SqlSession 对象的工厂。SqlS
