myabtis 中 Dao 接口的工作原理是什么?Dao 接口里的方法,参数不同时,方法能重载吗
myabtis 中 Dao 接口的工作原理是什么?Dao 接口里的方法,参数不同时,方法能重载吗
程序员朱永胜有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准
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 语句。
示例:
1 | public interface UserMapper { |
在上面的例子中,尽管 selectUserById
方法的参数类型不同,但 MyBatis 仍然不允许这样的重载,因为它会导致映射的混淆。
总结来说,MyBatis 中 DAO 接口的工作原理是通过动态代理和配置文件中的 SQL 映射实现的,而且 DAO 接口的方法不能重载,即使参数不同。这样设计是为了保证映射的一致性和清晰性。