mybatis-sqlSession

一、组件

1、SqlSessionFactoryBuilder: 根据配置信息或者代码生成 SqlSessionFactory;

2、SqlSessionFactory: 生成 sqlSession 会话,单例模式;   

3、SqlSession: 既可以发送sql去执行并返回结果,也可以获取Mapper的接口;

是一个接口类:相当于JDBC一个connection对象,每次执行sql,都会新建一个SqlSession对应的实例,一个sqlSession(实现类)对应一个数据库连接,执行完sql,释放sqlSession;

    实现:

      (1)DefaultSqlSession:

      (2)SqlSessionManger:

   用途:

      (1)获取映射器:让映射器通过命名空间和方法名称找到对应的sql,发送给数据库执行后返回结果;

      (2)直接通过命名空间信息去执行sql返回结果,只是iBatis版本留下的方式。

4、SQL Mapper:他是由一个Java 接口和XML 文件(或注解)构成,只需要给出SQL和映射规则,它负责发送SQL 去执行,并返回结果;

    是一个接口,没有任何实现类,它的作用是发送SQL,然后返回我们需要的结果,或者执行SQL从而修改数据库的数据,因此他应该在一个sqlSession事务方法内,是一个方法级别的东西,他就如同JDBC 中一条SQL语句的执行,它最大范围和sqlSession是相同的,所以在一个sqlSession方法中使用完之后,然后废弃掉。

二、Mybatis 的解析和运行原理

1、设计的技术难点:

    (1)反射技术

    (2)动态代理:

        JDK 动态代理(依赖接口): Mapper 中用到;

        CGLIB(弥补JDK缺陷):延迟加载的时候用到;

2、构建SqlSessionFactory

  (1)构建Configuration

           1)读入配置文件;

           2)初始化基础配置;

           3)提供单例;

           4)执行一些重要的对象方法;

  (2)映射器的内部组成

            1)MappedStatement:

            2)SqlSource:它是提供BoundSql的地方;

            3)  BoundSql: 建立sql和参数的地方;三个属性:SQL、parameterObject、ParameterMappings 

(3)sqlSession运行过程

           1)映射器的动态代理

           2)sqlSession下的四大对象

               ① Executor:调度下面这三种对象的执行;

                        三种:

                                SIMPLE:简易执行器;

                                REUSE:重用预处理语句;

                                BATCH:针对批量专用的执行器;

               ② StatementHandler:数据库会话器,处理数据库会话;

                        分三种:

                               SimpleStatementHandler:

                               PrepareStatementHandler:

                               CallableStatementHandler:    

                           SQL 执行过程:Executor 会先调用 StatementHandler的prepare() 方法预编译SQL语句(防止sql注入),同事设置一些基本运行的参数,然后用parameterize() 方法启用ParameterHandler 设置参数,完成预编译,跟着就是执行sql,最后如果需要查询就用ResultSetHandler封装结果返回给调用者;

               ③ ParameterHandler:参数处理器;

               ④ ResultHandler:结果处理器

 

转载于:https://my.oschina.net/u/4032854/blog/3027030

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值