mybatis的工作原理
1.通过输入流读取并加载myabtis全局配置文件和mapper映射文件,生成configuration对象和一个个MapperStatement对象。
2.SqlsessionFactoryBuilder通过configuration生成sqsessionFactory,用于开启sqlsession会话。
3.sqlsession完成与数据库的交互。
a.用户程序调用myabtis的api(即mapper层的方法)
b.sqlsession通过调用api的statement id找到对应的mapperdstatement对象。
c.executor将mapperdstatement进行解析,使用ParameterHandler填充参数;使用StatementHandler绑定参数和sql;
d.获取数据库连接,执行sql,使用ResultSetHandler处理返回结果集。
f.关闭sqlsession会话。
${}和#{}的区别
${}是properties文件中的变量占位符,属于静态文本替换。
#{}是sql的参数占位符,mybatis会将#{}替换成?号,在sql执行前使用preparedStatement,调用参数的设置方法,防止sql注入。
sqlsession的四大对象
Executor:真正执行Java和数据库交互的东西,在Mybatis中存在三种执行器:
- SimpleExecutor:简易执行器,默认的执行器。
- ReuseExecutor:一种执行器重用预处理语句
- BatchExecutor:这个执行器会批量执行所有更新语句。
用来调度StatementHandler、ParameterHandler、ResultHandler来执行对应的SQL。
StatementHandler:使用数据库的Statement执行操作,是四大对象的核心。
ParameterHandler:参数处理对象,用于对SQL参数的处理。
ResultSetHandler:结果处理对象,进行最后数据集ResultSet的封装返回处理的。