当前位置: 首页 > 后端技术 > Java

MyBatis源码学习笔记1

时间:2023-04-01 14:03:00 Java

mybatis创建SqlSession过程:Mybatis使用代理Dao执行过程:Mybatis只需要提供一个Dao接口即可实现与数据库的CRUD交互。对于这种情况,我们很容易想到使用JDK动态代理来实现,其实也确实如此。客户端通过获取Mybatis提供的Dao接口的代理对象进行CRUD操作。流程如下:源码如下,熟悉的Proxy.newProxyInstance。publicTnewInstance(SqlSessionsqlSession){finalMapperProxymapperProxy=newMapperProxy(sqlSession,mapperInterface,methodCache);返回新实例(mapperProxy);}@SuppressWarnings("unchecked")protectedTnewInstance(MapperProxymapperProxy){return(T)Proxy.newProxyInstance(mapperInterface.getClassLoader(),newClass[]{mapperInterface},mapperProxy);}再看MapperProxy类的invoke方法也比较简单,该方法的主要作用是从缓存方法Cache中获取MapperMethod,用于相应的增删改查操作。publicObjectinvoke(Objectproxy,Methodmethod,Object[]args)throwsThrowable{try{//执行Object类的方法if(Object.class.equals(method.getDeclaringClass())){returnmethod.invoke(这个,参数);//如果是接口的默认方法则执行}elseif(isDefaultMethod(method)){returninvokeDefaultMethod(proxy,method,args);}}catch(Throwablet){throwExceptionUtil.unwrapThrowable(t);}//从缓存中获取MapperMethod,这里的CRUD方法是finalMapperMethodmapperMethod=cachedMapperMethod(method);返回mapperMethod.execute(sqlSession,args);}

最新推荐
猜你喜欢