<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      //打賞的js文件

      Mybatis-Plus中Service層和Mapper層提供的常見方法有哪些?

      一、Mapper 層:BaseMapper<T> 接口

      這是最底層、最接近數據庫的一層。只要你的 UserMapper 接口繼承了 BaseMapper<User>,它就自動擁有了以下所有方法。這些方法是所有上層方法的基礎。

      核心特點:

      • 面向數據:方法名都是動詞+名詞的形式,如 selectById, insert,非常直觀。
      • 參數直接:參數通常是實體 T、主鍵 SerializableWrapper
      • 返回直接:返回值是影響的行數 int、實體 T 或列表 List<T>

      常用方法列表:

      【插入】

      • insert(T entity): 插入一條記錄。

      【刪除】

      • deleteById(Serializable id): 根據主鍵刪除。
      • deleteByMap(Map<String, Object> columnMap): 根據 Map 條件刪除。
      • deleteBatchIds(Collection<? extends Serializable> idList): 批量刪除。
      • delete(Wrapper<T> wrapper): 根據條件構造器刪除。

      【修改】

      • updateById(T entity): 根據主鍵更新(只更新非 null 字段)。
      • update(T entity, Wrapper<T> updateWrapper): 根據條件構造器更新。

      【查詢】

      • selectById(Serializable id): 根據主鍵查詢。
      • selectBatchIds(Collection<? extends Serializable> idList): 批量查詢。
      • selectByMap(Map<String, Object> columnMap): 根據 Map 條件查詢。
      • selectOne(Wrapper<T> wrapper): 查詢一條記錄(結果多于1條會報錯)。
      • selectCount(Wrapper<T> wrapper): 查詢總記錄數。
      • selectList(Wrapper<T> wrapper): (極其常用) 查詢列表。
      • selectMaps(Wrapper<T> wrapper): 查詢列表,結果是 List<Map>
      • selectObjs(Wrapper<T> wrapper): 查詢列表,只返回第一列的值。

      【分頁查詢】

      • selectPage(IPage<T> page, Wrapper<T> wrapper): (極其常用) 分頁查詢。
      • selectMapsPage(IPage<Map<String, Object>> page, Wrapper<T> wrapper): 分頁查詢,結果是 List<Map>

      二、Service 層:IService<T> 接口 & ServiceImpl<M, T> 實現類

      Service 層是面向業務的一層。它封裝了對 Mapper 層的調用,并提供了一些更方便、更業務化的方法。你的 UserService 接口通常會繼承 IService<User>,而實現類 UserServiceImpl 會繼承 ServiceImpl<UserMapper, User>

      核心特點:

      • 面向業務:方法名更貼近業務操作,如 save, remove, list
      • 封裝邏輯:對 Mapper 的調用進行了封裝,比如將 insert > 0 的判斷封裝在 save 方法中,直接返回 boolean
      • 功能增強:提供了一些 Mapper 層沒有的便捷方法,特別是批量操作

      常用方法列表:

      【單個操作 (基本是對 Mapper 的封裝)】

      • save(T entity): 保存一條記錄。內部調用 mapper.insert(),返回 boolean
      • removeById(Serializable id): 根據主鍵刪除。返回 boolean
      • updateById(T entity): 根據主'鍵更新。返回 boolean
      • getById(Serializable id): 根據主鍵查詢。
      • getOne(Wrapper<T> queryWrapper, boolean throwEx): 查詢一條記錄。throwEx 參數可以控制當結果不唯一時是否拋出異常。
      • count() / count(Wrapper<T> queryWrapper): 查詢總數。
      • list() / list(Wrapper<T> queryWrapper): 查詢列表。
      • page(IPage<T> page, Wrapper<T> queryWrapper): 分頁查詢。

      【批量操作 (Service 層的增強亮點!)】
      這些方法在 BaseMapper 中是沒有的,ServiceImpl 內部通過循環或批處理的方式實現,非常方便。

      • saveBatch(Collection<T> entityList): 批量插入。
      • saveOrUpdateBatch(Collection<T> entityList): 批量插入或更新(根據主鍵是否存在)。
      • removeByIds(Collection<? extends Serializable> idList): 批量刪除。
      • updateBatchById(Collection<T> entityList): 批量更新。

      【插入或更新】

      • saveOrUpdate(T entity): 根據實體的主鍵是否存在,自動判斷是執行 insert 還是 update。在表單提交等場景中非常有用。

      三、Mapper 層 vs Service 層:一張對比圖

      對比維度 BaseMapper (Mapper 層) IService / ServiceImpl (Service 層)
      定位 數據訪問層 (DAO),直接與數據庫交互。 業務邏輯層,封裝和編排業務,調用 Mapper。
      方法命名 數據操作導向 (e.g., selectById, insert) 業務操作導向 (e.g., getById, save)
      返回值 更原始,如返回影響行數 int 更友好,如將 int > 0 轉換為 boolean
      核心能力 提供所有基礎的、原子的數據庫 CRUD 操作。 在 Mapper 基礎上,封裝了常用邏輯,并提供了強大的批量操作
      典型調用 userMapper.selectById(1L); userService.getById(1L);
      Wrapper 用法 userMapper.selectList(wrapper); userService.list(wrapper);
      特色功能 分頁查詢 selectPage 是其核心功能之一。 批量操作 saveBatch, removeByIds 等是其獨有的亮點。

      總結與最佳實踐

      1. Service 實現類 (UserServiceImpl) 內部,你應該優先使用 Service 層自身提供的方法。例如,用 this.getById() 而不是 baseMapper.selectById(),用 this.saveBatch() 而不是自己去循環調用 baseMapper.insert()。因為 ServiceImpl 提供了更好的封裝和增強功能。

      2. BaseMapperServiceImpl 的基礎ServiceImpl 內部所有對數據庫的操作,最終都是委托給它注入的 baseMapper 來完成的。

      3. 當需要編寫自定義 SQL 時,方法應該定義在 Mapper 接口 (UserMapper) 中,然后在 Service 層通過注入的 userMapper 實例來調用。

      這個分層設計非常清晰:Controller -> Service -> Mapper

      • Controller 調用 Service 的業務方法。
      • Service 實現業務邏輯,優先使用 IService 提供的便捷方法(內部調用 Mapper),如果功能不足,再直接調用 Mapper 的方法(包括自定義的 SQL 方法)。
      • Mapper 負責最終的數據庫交互。
      posted @ 2025-06-28 10:44  星隕光逝  閱讀(428)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 美女午夜福利视频一区二区| 性欧美vr高清极品| 亚洲欧美日本久久网站| 精品亚洲国产成人av在线| 99在线国内在线视频22| 四虎精品视频永久免费| 性视频一区| 亚洲欧美成人一区二区在线电影| 99精品国产综合久久久久五月天| 亚洲成av人片天堂网无码| 国产日韩综合av在线| 美女内射毛片在线看免费人动物| 亚洲综合国产成人丁香五| 中文字幕国产精品综合| 久久96国产精品久久久| 日韩三级一区二区在线看| 色猫咪av在线网址| 精品无码一区二区三区的天堂| 亚洲av日韩av一区久久| 一区二区三区四区自拍视频| 久久99久国产麻精品66| 九九热精彩视频在线免费| 老熟妇欲乱一区二区三区| 妺妺窝人体色www看美女| 大香伊蕉在人线国产最新2005 | 国产成人精品视频网站| 不卡一区二区国产精品| 日日碰狠狠添天天爽五月婷| 日本韩国日韩少妇熟女少妇| 亚洲av永久无码精品天堂久久| 久久精品国产99久久久古代| 日韩欧美国产aⅴ另类| 亚洲av成人一区在线| 精品一区二区三区无码视频| 99精品国产一区二区三区| 最新偷拍一区二区三区| 亚洲熟妇丰满多毛xxxx| 精品国产精品午夜福利| 国产高清在线不卡一区| 亚洲va中文字幕无码久久| 久99久热这里只有精品|