不要使用mybatisplus,大公司用mybatisplus吗
不要使用mybatisplus,大公司用mybatisplus吗详细介绍
本文目录一览:
- 1、
- 2、
MyBatis-Plus 使用这么方便,底层是如何处理的呢?
MyBatis-Plus是一个基于MyBatis的增强工具,它不仅继承了MyBatis的强大功能,还增加了一系列实用功能,旨在简化开发过程并提高开发效率。
MyBatis-Plus在原有MyBatis框架的基础上增加了如乐观锁插件、字段自动填充功能、分页插件、条件构造器以及SQL注入器等实用功能。这使得开发者能够无需编写任何XML文件,直接通过继承BaseMapper接口的类对象完成对数据库的映射操作。
其核心工作流程如下所述:
1. **自动配置与组件注入**
* MyBatis-Plus通过MybatisPlusAutoConfiguration自动配置类提供sqlSessionFactory()方法,为Spring创建sqlSession的工厂类对象。这个方法不仅注入了MyBatis本身的组件,还注入了MyBatis-Plus特有的主键生成器、SQL注入器等关键组件。
2. **SqlSessionFactory的创建与懒加载**
* MybatisSqlSessionFactoryBean执行懒加载策略,最终通过其getObject()方法获取到SqlSessionFactory工厂类对象。这个过程中涉及到了buildSqlSessionFactory()方法的调用,它负责构建SqlSessionFactory。
3. **解析配置文件与Mapper映射**
* MyBatisXMLConfigBuilder的parse()方法负责解析配置文件,最终调用到mapperElement()方法,完成Mapper的解析工作并将其添加到MybatisConfiguration配置类中。
* MybatisMapperAnnotationBuilder的parse()方法则开始完成Mapper接口中的方法与SQL语句的映射工作。这其中,parseStatement()方法负责解析@Select、@Update等注解中的SQL语句,而SQL注入器则负责完成Mapper方法与SQL语句的转化。
4. **通用方法与SQL语句准备**
* AbstractSqlInjector的inspectInject()方法负责准备BaseMapper接口中通用方法对应的SQL语句。这主要通过AbstractMethod的inject()方法实现,进一步调用其子类的injectMappedStatement()方法。例如,SelectOne的SQL语句核心在于SqlMethod枚举类,它缓存了可以动态拼接的SQL语句脚本。
5. **Mapper接口的扫描与注册**
* 通过@MapperScan注解引入MapperScannerRegistrar类,该类实现了ImportBeanDefinitionRegistrar接口并重写registerBeanDefinitions()方法,完成Mapper的扫描注册。
* MapperScannerConfigurer是Mapper接口的扫描配置类,它在容器启动过程中被回调,通过ClassPathMapperScanner的scan()方法完成Mapper的扫描与注册。
6. **动态代理与SQL执行**
* 容器中的Mapper实例实际上是通过MapperFactoryBean获取的。@Autowired自动注入Mapper时,会触发sqlSessionTemplate的getMapper()方法,最终调用到MybatisMapperRegistry的getMapper()方法,进入动态代理获取MapperProxy实例的流程。
* 调用Mapper接口的方法时,会触发代理对象的invoke()方法。此时,根据被调用的方法生成MybatisMapperMethod对象,通过execute()方法去真正地执行SQL语句,完成数据库操作。
总结起来,MyBatis-Plus通过一系列自动配置、解析、扫描、注册以及动态代理的流程,简化了数据库操作的开发过程,提高了开发效率。
大公司用mybatisplus吗
选择使用Hibernate或MyBatis等框架,并非依赖于公司的规模大小。这并不是一个规定或约定俗成的标准,没有规定什么样的公司必须使用哪种技术。因此,无论公司规模大小,都可以根据项目需求和团队技术能力来选择适合的持久层框架。