Mybatis的执行流程:Mybatis的执行流程_蒙娜丽莎的Java的博客-CSDN博客_mybatis执行计划
1. 创建
构建SqlSessionFactory
public static SqlSessionManager newInstance(Reader reader, String environment) {
//加载配置 构建对象
return new SqlSessionManager(new SqlSessionFactoryBuilder().build(reader, environment, null));
}
private SqlSessionManager(SqlSessionFactory sqlSessionFactory) {
反射调用SqlSession
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
final SqlSession sqlSession = SqlSessionManager.this.localSqlSession.get();
if (sqlSession != null) {
try {
return method.invoke(sqlSession, args);
} catch (Throwable t) {
throw ExceptionUtil.unwrapThrowable(t);
}
} else {
final SqlSession autoSqlSession = openSession();
try {
final Object result = method.invoke(autoSqlSession, args);
autoSqlSession.commit();
return result;
//当执行sqlsession方法时 动态执行invoke 调用
动态Sql执行流程
Myabtis-动态sql解析流程_法毅的博客的博客-CSDN博客_动态解析sql
1. 首先根据动态sql片段解析为sqlNode对象,每个sqlNode对应不同的处理逻辑
2. 然后根据用户传入的参数进行参数替换,形成实际的sql语句
3. 最后把每个sql片段解析为实际可执行的sql语句