有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`
MyBatis中DAO接口的工作原理
MyBatis是一个优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
DAO接口
在MyBatis中,DAO(Data Access Object)接口是一个映射器接口,它定义了如何访问数据库的方法。这些方法不包含具体的SQL语句,而是提供了与数据库操作相关的方法名称和参数列表,具体的SQL映射则是在XML配置文件中完成的。
工作原理
当MyBatis启动时,它会读取映射文件,然后根据这些映射文件中定义的命名空间和DAO接口中的方法名,动态地创建DAO接口的实现。当调用DAO接口的方法时,MyBatis会根据方法名找到对应的SQL语句,执行并返回结果。
这个过程主要涉及以下几个步骤:
- 配置解析:MyBatis启动时,会解析配置文件和映射文件,创建Configuration对象。
- 映射器注册:MyBatis会将DAO接口和映射文件中定义的SQL语句关联起来,并注册到Configuration对象中。
- SqlSession创建:当需要进行数据库操作时,MyBatis会创建一个SqlSession对象。
- 接口代理:MyBatis会使用JDK动态代理为DAO接口生成代理对象。
- SQL执行:调用DAO接口的方法时,代理对象会根据方法名找到对应的SQL语句,并通过SqlSession对象来执行它。
- 结果返回:SQL执行后的结果会被封装并返回给调用者。
方法重载
在MyBatis中,DAO接口的方法是不能重载的,即使参数不同也不行。这是因为MyBatis是根据方法名来寻找对应的SQL语句的,如果存在重载方法,MyBatis将无法确定调用哪一个SQL语句。
示例:
public interface UserMapper {
User selectUserById(int id);
// 不能重载如下方法,即使参数不同
// User selectUserById(String id);
}
在上面的例子中,尽管selectUserById方法的参数类型不同,但MyBatis仍然不允许这样的重载,因为它会导致映射的混淆。
总结来说,MyBatis中DAO接口的工作原理是通过动态代理和配置文件中的SQL映射实现的,而且DAO接口的方法不能重载,即使参数不同。这样设计是为了保证映射的一致性和清晰性。


