Mybatis 连接mysql数据库底层运行原理

港控/mmm° 2022-03-10 16:58 296阅读 0赞

工作中一直在用spring+springmvc+mybatis,只是知道它是用于持久层框架,但是一直不知道原理是什么,通过网上视频解释,自己做一个笔记,方便以后查阅。

什么是mybatis:

MyBatis 是一款优秀的持久层框架它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录

  • 首先拆解mybatis架构:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1ROVF9E_size_16_color_FFFFFF_t_70

我将mybatis主要拆分成三个部分:

  1. 数据源:如何获取mysql的数据库地址。
  2. 执行语句:如何将我们在mybatis配置文件中生成的sql语句映射到mysql中。
  3. 操作者:连接mysql数据库,执行sql语句,得到sql语句的查询结果。好比打开mysql图形化工具,Navicat for MySQL,首先连接到需要的数据库,编写sql语句,执行语句,并得到结果。

在mybatis官网上找的入门代码:

  1. // 获取数据源
  2. String resource = "org/mybatis/example/mybatis-config.xml";
  3. InputStream inputStream = Resources.getResourceAsStream(resource);
  4. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  5. // 获取执行语句
  6. DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
  7. TransactionFactory transactionFactory = new JdbcTransactionFactory();
  8. Environment environment = new Environment("development", transactionFactory, dataSource);
  9. Configuration configuration = new Configuration(environment);
  10. configuration.addMapper(BlogMapper.class);
  11. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
  12. // 执行sql并得到返回结果
  13. SqlSession session = sqlSessionFactory.openSession();
  14. try {
  15. Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
  16. } finally {
  17. session.close();
  18. }
  • 第一点、数据源的获取

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1ROVF9E_size_16_color_FFFFFF_t_70 1

  • 第二点、获取执行语句

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1ROVF9E_size_16_color_FFFFFF_t_70 2

在获取sql语句的时候,最主要的类的就是mapperstatement。

  • 第三点、操作数据源

在操作数据库的时候,其实底层封装还是java.sql中的JDBC操作,核心类还是会用到mapperstatement。

  • mybatis加载mapper文件有4中方式,分别是:
  1. <!-- 使用相对于类路径的资源引用 -->
  2. <mappers>
  3. <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  4. <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
  5. <mapper resource="org/mybatis/builder/PostMapper.xml"/>
  6. </mappers>
  7. <!-- 使用完全限定资源定位符(URL) -->
  8. <mappers>
  9. <mapper url="file:///var/mappers/AuthorMapper.xml"/>
  10. <mapper url="file:///var/mappers/BlogMapper.xml"/>
  11. <mapper url="file:///var/mappers/PostMapper.xml"/>
  12. </mappers>
  13. <!-- 使用映射器接口实现类的完全限定类名 -->
  14. <mappers>
  15. <mapper class="org.mybatis.builder.AuthorMapper"/>
  16. <mapper class="org.mybatis.builder.BlogMapper"/>
  17. <mapper class="org.mybatis.builder.PostMapper"/>
  18. </mappers>
  19. <!-- 将包内的映射器接口实现全部注册为映射器 -->
  20. <mappers>
  21. <package name="org.mybatis.builder"/>
  22. </mappers>

其中优先级最高的是package方式。

  • mybatis的执行器有3中,默认的是simple。

发表评论

表情:
评论列表 (有 0 条评论,296人围观)

还没有评论,来说两句吧...

相关阅读

    相关 数据库底层原理

    看到一篇很不错的数据库文章,拿过来分享一下: 一提到关系型数据库,我禁不住想:有些东西被忽视了。关系型数据库无处不在,而且种类繁多,从小巧实用的 SQLite 到强大的 Te

    相关 Mybatis底层实现原理

    Mybatis底层原理 终于发现,原来Mybatis的底层原理是涉及到动态代理的,想想我们是如何使用Mybatis的?有一个接口类,有一个xml类型的Mapper,将xm