什么是Mybatis
Mybatis是基于JDBC封装的ORM框架,那么JDBC的功能在Mybatis上一定都有所对照,所以JDBC是学习Mybatis的前置知识
JDBC流程回顾
/** 第一步: 获取连接 */
//1.
Connection connection = DriverManager
.getConnection(JDBC.URL, JDBC.USERNAME, JDBC.PASSWORD);
/** 第二步: 预编译SQL */
//2.1创建statement
// Statement statement = connection.createStatement();
//2.2 创建预编译的statement
PreparedStatement statement = connection.prepareStatement("select * from users where id = ?");
//2.3 创建可调用存储过程的statement
// CallableStatement statement = connection.prepareCall("select * from users where id = ?");
//第三步:如果是PreparedStatement或CallableStatement,可能需要设置参数
statement.setLong(1,10);
/** 第四步: 执行查询 */
ResultSet resultSet = statement.executeQuery();
//statement可以重复使用
resultSet = statement.executeQuery();
/** 第五步: 读取结果 */
while(resultSet.next()){
System.out.println(resultSet.getString("name"));
}
JDBC执行流程总结
获得连接 =》创建statement(三种实现)=》设置SQL参数 =》执行SQL =》读取结果
还需要提一下的是,JDBC是支持批量的,下面是批量代码的简单示例:
String sql = "INSERT INTO `users` (`name`,age) VALUES (?,?);";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, "张三");
preparedStatement.setString(2, "19");
preparedStatement.addBatch();
preparedStatement.setString(1, "李四");
preparedStatement.setString(2, "20");
preparedStatement.addBatch();
// 批处理 一次提交到数据库执行
preparedStatement.executeBatch();
preparedStatement.close();
Mybatis核心组件
Mybatis核心组件详解
SqlSession 会话
使用了门面模式,会话可以让我们更方便的执行语句,而不用关心会话究竟使用哪一种Executor执行器执行
Executor 执行器
提供基本api,封装共性操作,如缓存、事务、关闭执行器、批处理刷新。
下面介绍下Executor的三个实现类,并跟JDBC对照理解
SimpleExecutor:简单执行器,这是mybatis的默认执行器
ReueseExecutor:重用执行器,简单执行器每次都会创建一个JDBC的Statement,而重用执行器会在相同的sql时不再创建新的Statement,达到重用JDBC的Statement效果,对于性能提升有一定帮助
BatchExecutor:批处理执行器,封装JDBC的批量操作
StatementHandler SQL处理器
基于JDBC的api创建JDBC Statement实例,每执行一条SQL就会创建一个SQL处理器,然后使用ParameterHandler设置参数,执行SQL,使用ResultSetHandler封装返回结果为java bean。
下面介绍下StatementHandler的三个实现类,并跟JDBC对照理解
SimpleStatementHandler:简单SQL处理器,对应JDBC的Statement
PreparedStatementHandler:预编译SQL处理器,对应JDBC的PreparedStatement
CallableStatamentHandler:存储过程SQL处理器,对应JDBC的CallableStatament
总结
JDBC可以通过Connection得到Statement、PreparedStatement、CallableStatement3种实例,那么Mybatis就有SimpleStatementHandler、PreparedStatementHandler、CallableStatamentHandler 3个SQL处理器与之对应。
JDBC的Statement支持批量,且Statement可以重复使用,那么Mybatis就有BatchExecutor、ReueseExecutor 2个执行器与之对应。还有1个默认执行器SimpleExecutor
JDBC的Statement可以设置SQL参数,那么Mybatis就有ParameterHandler与之对应,调用JDBC完成参数设置
JDBC的ResultSet可以读取SQL执行结果,但是自己读取结果比较麻烦,那么Mybatis就有ResultSetHandler与之对应,完成ResultSet到java bean的处理
看了这篇文章,相信你已经对Mybatis的核心组件有了一个宏观的认识,但还没接触到Mybatis最漂亮的一个设计【二级缓存】,之后我会抽时间将其整理成文,敬请期待