MyBaties源码解析

       以为查看源代码确实是一个学习的一种方法 由于不少时候别人把最核心的代码给咱们都封装好了 咱们直接能够来拿使用 不少时候本身也会问 为何经过这个方法就能够获得我以为就是一颗好奇心吧 我算了算 就这三个部分也花了几个小时的时间去琢磨 可是感受值了,我以为对mybaties的原理更加清晰了 java

       学了mybaties也有一段时间了 今天抽空来聊聊mybaties是如何来操做数据库的 它为何可以方便咱们不用再去关注如何建立链接编写预编译语句 它又是如何实现的呢?咱们都知道 要操做数据库数据库 必须先要有数据源 执行语句 还要有操做mysql

1.数据源 是用来链接数据库的 他是如何获取到数据库的链接的呢 咱们知道mybatais有一个核心配置文件mybatis-config.xml 而这个文件里面 里面有不少数据库链接信息sql

接下里咱们来看一下源码是如何获取到数据源的数据库

    org.apache.ibatis.session.SqlSessionFactoryBuilder.build(InputStream)apache

       org.apache.ibatis.session.SqlSessionFactoryBuilder.build(InputStream, String, Properties)安全

            org.apache.ibatis.builder.xml.XMLConfigBuilder.XMLConfigBuilder(InputStream, String, Properties)session

                 org.apache.ibatis.builder.xml.XMLConfigBuilder.parse()mybatis

                      org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XNode)app

   最后咱们能够经过parseConfiguration(XNode)这个方法就能够获得 链接数据源的信息           学习

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration  3  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  4  "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 
 6 <configuration>
 7     <!-- 配置环境信息,即数据源信息 -->
 8     <environments default="d1">
 9         <environment id="d1">
10             <!-- 配置事务管理器 -->
11             <transactionManager type="JDBC" />
12             <!-- 配置数据源以及数据库链接信息 -->
13             <dataSource type="POOLED">
14                 <property name="driver" value="com.mysql.jdbc.Driver" />
15                 <property name="url"
16  value="jdbc:mysql://localhost:3306/fresh?characterEncoding=UTF-8" />
17                 <property name="username" value="root" />
18                 <property name="password" value="root" />
19             </dataSource>
20         </environment>
21     </environments>
22     <!-- 关联隐射文件 -->
23     <mappers>
24         <mapper resource="com/newroad/dao/StudentMapper.xml" />
25     </mappers>
26 </configuration> 
27   

 

     

2.执行语句 首先来了解如下这四种语句 那么他们又是如何执行的呢

      org.apache.ibatis.session.SqlSession. (Class<T>)

           org.apache.ibatis.session.Configuration.getMapper(Class<T>, SqlSession) 

                     org.apache.ibatis.binding.MapperRegistry.getMapper(Class<T>, SqlSession)

                           org.apache.ibatis.binding.MapperProxyFactory.newInstance(SqlSession)

                                org.apache.ibatis.binding.MapperProxy.MapperProxy(SqlSession, Class, Map)

                                        java.lang.reflect.Method.invoke(Object, Object...)

                                              org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(Method)

                                                    org.apache.ibatis.binding.MapperMethod.execute(SqlSession, Object[])

                                                              org.apache.ibatis.session.SqlSession.selectOne(String, Object)
                                                 
                         
DDL DML DQL DCL
数据定义语言 数据操纵语言 数据查询语言 数据控制语言,定义访问权限、取消访问权限,安全设置
create、drop、alter insert、update、delete select grant

3.操做  

        org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSession()

           org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSessionFromDataSource(ExecutorType, TransactionIsolationLevel, boolean)     
                  org.apache.ibatis.session.Configuration.newExecutor(Transaction, ExecutorType)
                     org.apache.ibatis.executor.SimpleExecutor
                         org.apache.ibatis.executor.BaseExecutor.query(MappedStatement, Object, RowBounds, ResultHandler, CacheKey, BoundSql)
                              org.apache.ibatis.mapping.SqlSource.getBoundSql(Object)
                                  org.apache.ibatis.executor.SimpleExecutor.doQuery(MappedStatement, Object, RowBounds, ResultHandler, BoundSql)
                                          org.apache.ibatis.executor.statement.StatementHandler
                                             org.apache.ibatis.executor.SimpleExecutor.prepareStatement(StatementHandler, Log)

     

相关文章
相关标签/搜索