接口代理机制
大约 1 分钟
DAO设计模式下,使用专门的一类Dao来完成对表的CRUD,一般一张表对应一个CRUD,跟这张表有关的sql都由对应的Dao来执行。
即:table —— Dao
MyBatis接口代理概述
MyBatis 需要手动编辑sql,而提供了 namespace.id 这种严格的唯一sql标识,若对应上 "Dao全限定类名.方法名" ,则Dao接口的实现就变得有迹可循。故可以使用动态代理机制,动态生成接口的代理类,从而不再需要编写Dao的实现类。这就是MyBatis的接口代理机制。在MyBatis接口代理中,通常将 Dao 命名为 XxxMapper。
即:table —— Mapper
MyBatis 内部实现了 javassist,可以生成dao接口的代理类。
接口代理使用方法
想使用MyBatis接口代理,需要符合一定的规范:
- 核心配置文件中引入了 XxxMapper.xml(废话)
- XxxMapper.xml ⽂件中的namespace必须和 XxxMapper 接⼝的全限定类名⼀致。
- XxxMapper.xml ⽂件中的 id 必须和 XxxMapper 接⼝中方法名⼀致。
即:namespace —— 全限定类名;id —— 方法名。
table —— XxxMapper接口 —— XxxMapper.xml
sql —— 接口方法 —— 标签
获取接口代理对象:
// sqlSession.getMapper 方法获取代理对象
AccountDao accountDaoProxy = (AccountDao)sqlSession.getMapper(AccountDao.class);完成了两件事:
- 在内存中生成代理类的class文件
- 载入JVM,创建对象并返回
