Dao 接口在 MyBatis 中的工作原理是基于 JDK 动态代理的。MyBatis 在运行时使用 JDK 动态代理为 Dao 接口生成代理对象,代理对象拦截接口方法的调用,并执行相应的 SQL 操作。这种设计模式使得能够通过接口方法声明式地定义数据库操作,而具体的 SQL 操作细节则由 MyBatis 动态代理实现。
每个 Dao 接口方法对应一个 MappedStatement,其中包含了与数据库相关的 SQL 语句信息。Dao 接口方法的调用会被代理对象截获,最终转换为对应 MappedStatement 的 SQL 操作。
需要注意的是,Dao 接口方法不支持重载。这是因为 MyBatis 通过接口方法的签名(包括方法名和参数列表)来确定唯一的 MappedStatement,而重载方法的签名是一样的,导致无法唯一确定对应的 SQL 操作。
总体而言,Dao 接口通过 MyBatis 提供了一种便捷的方式来与数据库进行交互,将 SQL 操作从业务代码中解耦出来,使代码更为清晰和易于维护。