0%

StatementHandler数据库交互

StatementHandler接口是mybatis的核心接口之一,StatementHandler接口中功能很多,进行预编译并且调用ParameterHandler的setParameters()方法设置参数,创建Statement对象,通过ParameterHandler为SQL语句绑定实参,执行select、insert、update、delete等多种类型的SQL语句,批量执行SQL语句,通过ResultSetHandler将结果集映射成结果对象。

StatementHandler流程

  • 创建: 由Configuration方法中newStatementHandler()方法生成的,生成的是RoutingStatementHandler
  • 选择: RoutingStatementHandler的通过适配器模式找到对应(根据上下文)的StatementHandler执行的,并且有SimpleStatementHandler、PrepareStatementHandler、CallableStatementHandler
  • Executor会调用StatementHandler的prepare方法创建Statement,调用parameterize方法通过ParameterHandler设置参数,完成预编译(只有Statement为PreparedStatement时才会进行预编译)
  • 最后调用ResultSetHandler封装结果集
阅读全文 »

执行器Executor

Executor定义了数据库操作的基本方法,SqlSession接口中的功能都是基于Executor接口实现的,真正执行java和数据库交互的类,负责维护一级缓存和二级缓存,并提供事务管理的相关操作,会将数据库相关操作委托给StatementHandler完成

1
2
3
4
5
public enum ExecutorType {
SIMPLE, // 对应SimpleExecutor 简易执行器,默认,每执行一次update或select,就开启一个Statement对象,用完立刻关闭
REUSE, // 对应ReuseExecutor,重用预处理语句,执行update或select,以sql作为key查找Statement对象,存在就使用,不存在就创建,用完后,不关闭Statement对象,而是放置于map中
BATCH //对应BatchExecutor,重用语句和批量更新,完成批处理
}
阅读全文 »

ThreadLocal线程本地存储

当访问共享数据时,通常需要使用同步来控制并发程序的访问。那么有没有别的方法来解决呢?当然有,那就是让共享数据不共享了,ThreadLocal就实现了该操作。该类提供了线程局部变量,为每一个线程创建一个单独的变量副本,使得每个线程都可以独立的改变自己所拥有的变量副本,而不会影响其他线程所对应的副本,消除了竞争条件。

阅读全文 »

web服务器与应用服务器

Web服务器

是一个处理web请求的计算机系统,常见作用是托管web网站,主要功能是存储、处理、传送web页面到客户端。客户端与服务端之间的通信协议为HTTP,传送的页面多数情况下是HTML,同时包含图片、CSS以及JavaScript脚本

阅读全文 »

别名设置

在写SQL语句或者在写结果集时,会遇到表名、列名、类的全名太长的情况,Mybatis专门提供了一个标签来设置别名<typeAliases>

阅读全文 »