Mybatis 连接mysql数据库底层运行的原理分析
作者:TNT_D
这篇文章主要介绍了Mybatis 连接mysql数据库底层运行的原理分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
工作中一直在用spring+springmvc+mybatis,只是知道它是用于持久层框架,但是一直不知道原理是什么,通过网上视频解释,自己做一个笔记,方便以后查阅。
什么是mybatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
首先拆解mybatis架构
我将mybatis主要拆分成三个部分
- 数据源:如何获取mysql的数据库地址。
- 执行语句:如何将我们在mybatis配置文件中生成的sql语句映射到mysql中。
- 操作者:连接mysql数据库,执行sql语句,得到sql语句的查询结果。好比打开mysql图形化工具,Navicat for MySQL,首先连接到需要的数据库,编写sql语句,执行语句,并得到结果。
在mybatis官网上找的入门代码
// 获取数据源 String resource = "org/mybatis/example/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 获取执行语句 DataSource dataSource = BlogDataSourceFactory.getBlogDataSource(); TransactionFactory transactionFactory = new JdbcTransactionFactory(); Environment environment = new Environment("development", transactionFactory, dataSource); Configuration configuration = new Configuration(environment); configuration.addMapper(BlogMapper.class); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration); // 执行sql并得到返回结果 SqlSession session = sqlSessionFactory.openSession(); try { Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101); } finally { session.close(); }
第一点、数据源的获取
第二点、获取执行语句
在获取sql语句的时候,最主要的类的就是mapperstatement。
第三点、操作数据源
在操作数据库的时候,其实底层封装还是java.sql中的JDBC操作,核心类还是会用到mapperstatement。
mybatis加载mapper文件有4中方式,分别是:
<!-- 使用相对于类路径的资源引用 --> <mappers> <mapper resource="org/mybatis/builder/AuthorMapper.xml"/> <mapper resource="org/mybatis/builder/BlogMapper.xml"/> <mapper resource="org/mybatis/builder/PostMapper.xml"/> </mappers>
<!-- 使用完全限定资源定位符(URL) --> <mappers> <mapper url="file:///var/mappers/AuthorMapper.xml"/> <mapper url="file:///var/mappers/BlogMapper.xml"/> <mapper url="file:///var/mappers/PostMapper.xml"/> </mappers>
<!-- 使用映射器接口实现类的完全限定类名 --> <mappers> <mapper class="org.mybatis.builder.AuthorMapper"/> <mapper class="org.mybatis.builder.BlogMapper"/> <mapper class="org.mybatis.builder.PostMapper"/> </mappers>
<!-- 将包内的映射器接口实现全部注册为映射器 --> <mappers> <package name="org.mybatis.builder"/> </mappers>
其中优先级最高的是package方式。
mybatis的执行器有3中,默认的是simple。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。