当前位置: 首页 > article >正文

java开发中Dao层和Mapper层的关系

Mapper 层和 DAO(Data Access Object)层是在持久层中用于处理数据访问的两个概念。虽然这两者的目的都是用于访问数据库,但它们之间有一些区别。在Java开发中,这两个概念通常与MyBatis(或其他ORM框架)结合使用。

Mapper层:

  1. 定义

    • Mapper 是 MyBatis 中的一个术语,指的是用于描述如何映射数据库中的数据到 Java 对象的接口。每一个 Mapper 接口对应一个数据操作接口。
  2. 职责

    • 定义了数据访问的接口,提供了一组数据库操作的方法。
    • 包含了与具体数据访问有关的 SQL 语句和映射规则。
  3. 注解

    • 通常使用 MyBatis 的注解或 XML 文件来描述 SQL 映射。
  4. 示例

    // MyBatis Mapper 接口
    public interface UserMapper {
        @Select("SELECT * FROM users WHERE id = #{id}")
        User getUserById(int id);
        
        @Insert("INSERT INTO users (name, age) VALUES (#{name}, #{age})")
        void insertUser(User user);
    }

     

DAO层:

  1. 定义

    • DAO 是一个更通用的设计模式,用于封装与数据存储交互的逻辑。在Java中,通常指的是数据访问对象。
  2. 职责

    • 提供了一个抽象接口,定义了数据访问的方法。
    • 包含了数据访问的具体实现,可以是直接对数据库进行操作,也可以通过调用其他服务、API等方式进行数据访问。
  3. 注解

    • 通常不涉及注解,而是通过实现接口的方式来定义数据访问方法。
  4. 示例

    // DAO 接口
    public interface UserDao {
        User getUserById(int id);
        void insertUser(User user);
    }
    
    // DAO 实现
    public class UserDaoImpl implements UserDao {
        // 数据库操作的具体实现
    }
    

    对比

  5. 技术栈

    • Mapper 通常与 MyBatis 等 ORM 框架结合使用。
    • DAO 是一个更通用的概念,可以用于任何形式的数据访问,包括直接 JDBC 操作、使用 ORM 框架、调用 RESTful API 等。
  6. 灵活性

    • Mapper 更侧重于数据映射和 SQL 操作,通常会与具体的 ORM 框架绑定。
    • DAO 层相对更加抽象,可以在不同的数据访问技术之间切换,提供更大的灵活性。
  7. 命名规范

    • Mapper 接口方法通常直接与 SQL 语句对应,方法名和 SQL 语句之间的映射关系更为直观。
    • DAO 接口方法可以根据业务逻辑进行更灵活的命名,而不受 SQL 语句的限制。

在实际项目中,Mapper 层和 DAO 层有时会交替使用或者同时存在,具体的选择会根据项目的需求、技术栈和团队的开发习惯而定。在使用 MyBatis 等 ORM 框架时,常常使用 Mapper 来定义数据库操作接口。

 其实用起来二者一样

 

 


http://www.kler.cn/news/160142.html

相关文章:

  • 微信玩具小程序商城开发技巧
  • 网络安全威胁——跨站脚本攻击
  • 【tower-boot 系列】redis集成
  • docker安装及配置mysql
  • HarmonyOS 修改App的默认加载的界面(ArkTS版本)(十七)
  • [Electron] 将应用打包成供Ubuntu、Debian平台下安装的deb包
  • DAPP开发【11】IPFS星际文件管理系统
  • spark的安装与使用:一键自动安装
  • TCP与UDP的区别
  • HashMap系列-放入元素的流程
  • 面试官问:怎么判断对象已死?
  • 近期复习四
  • 《微信小程序开发从入门到实战》学习四十二
  • 不同数据库进行同步和增量数据(SQL server 与MySQL数据库为例)
  • Ubuntu防止休眠和挂起(笔记)
  • HTML总结
  • Image Segmentation Using Deep Learning: A Survey
  • 鸿蒙4.0开发笔记之ArkTS语法基础之条件渲染和循环渲染的使用(十五)
  • Linux取消挂载相关
  • yumdownloader介绍和使用示例
  • leetcode:用栈实现队列(先进先出)
  • mysql中year函数有什么用
  • 二叉树的右视图[中等]
  • MySQL电商管理系统练习题及答案
  • 【动手学深度学习】(十一)卷积层
  • 指针(三)
  • 使用Java网络编程,窗口,线程,IO,内部类等实现多人在线聊天1.0
  • 是否曾经想过关闭Microsoft账户,那么你来对地方了
  • QGraphicsView实现简易地图7『异步加载-多瓦片-无底图』
  • Linux--程序地址空间