例:select 员工姓名 , max as max_总工资 from personnel where 员工姓名 is not null group by 员工姓名 having max > 6000 order by max desc;
由于最近需要做一些sql query性能提升的研究,因此研究了一下sql语句的解决过程。本文是我在看了各种资料后手机总结的,会详细的,一步一步的讲述一个sql语句的各个关键字的解析过程,欢迎大家互相学习。
在初始化SqlSessionFactory时,Mapper 接口进行注册,注册在了名为 MapperRegistry 类的 HashMap中,key = Mapper class, value = 创建当前Mapper的工厂。
代码注释已经写的很清楚,每个 mapper 接口在解析时会对应生成一个 MapperProxyFactory,保存到 knownMappers 中,mapper 接口的实现类通过这个 MapperProxyFactory 生成,mapperProxyFactory.newInstance 代码如下:代码一目了然,通过 jdk 动态代理技术创建了 mapper 接口的代理对象,其 InvocationHandler 的实现是 MapperProxy,那么 mapper 接口中方法的执行,最终都会被 MapperProxy 增强。