• MyBatisPlus 之五:MP 的 IService 接口实现方式


    IService 接口实现方式

    在 MyBatis Plus(简称 MP)中,IService 是一个抽象接口,用于定义通用的业务层操作。

    它提供了基本的 CRUD 功能和一些扩展方法,开发者可以根据需要继承这个接口并实现自定义的 Service 类。

    具体使用步骤如下:

    1) DAO 或 Mapper 接口

    定义 Mapper 接口直接继承 BaseMapper 接口即可,不需要写方法

    1. @Mapper
    2. public interface IBookDao extends BaseMapper<Book> {
    3. }

    2) 业务类继承 ServiceImpl

    这里直接编写自己的业务实现类,继承 ServiceImpl 。

    注意:继承 ServiceImpl 时需要指定泛型,依赖第一步中的 IBookDao 接口和对应的实体类

    1. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    2. import com.wdzl.dao.IBookDao;
    3. import com.wdzl.pojo.Book;
    4. import org.springframework.stereotype.Service;
    5. @Service
    6. public class BookServiceImpl extends ServiceImpl, Book> implements IBookService{
    7. }

    3) 测试类使用

    仅仅上面两步,不需要写内部方法,就已经完成业务的 CRUD ,下面可以测试使用了。

    1. @SpringBootTest
    2. public class SpringBootMyBatisServiceApplication {
    3. @Autowired
    4. private BookServiceImpl bookService;
    5. @Test
    6. public void test(){
    7. int count = bookService.count();
    8. System.out.println(count);
    9. }
    10. }

    官网说明:

    • 通用 Service CRUD 封装IService (opens new window)接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆,
    • 泛型 T 为任意实体对象
    • 建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类
    • 对象 Wrapper 为 条件构造器

    下面来分别详细介绍 IService 接口自带方法作用:

    Save
    1. // 插入一条记录(选择字段,策略插入)
    2. boolean save(T entity);
    3. // 插入(批量)
    4. boolean saveBatch(Collection<T> entityList);
    5. // 插入(批量)
    6. boolean saveBatch(Collection<T> entityList, int batchSize);
    Remove
    1. // 根据 entity 条件,删除记录
    2. boolean remove(Wrapper<T> queryWrapper);
    3. // 根据 ID 删除
    4. boolean removeById(Serializable id);
    5. // 根据 columnMap 条件,删除记录
    6. boolean removeByMap(Map<String, Object> columnMap);
    7. // 删除(根据ID 批量删除)
    8. boolean removeByIds(Collection<? extends Serializable> idList);
    Update
    1. // 根据 UpdateWrapper 条件,更新记录 需要设置sqlset
    2. boolean update(Wrapper<T> updateWrapper);
    3. // 根据 whereWrapper 条件,更新记录
    4. boolean update(T updateEntity, Wrapper<T> whereWrapper);
    5. // 根据 ID 选择修改
    6. boolean updateById(T entity);
    7. // 根据ID 批量更新
    8. boolean updateBatchById(Collection<T> entityList);
    9. // 根据ID 批量更新
    10. boolean updateBatchById(Collection<T> entityList, int batchSize);
    Get
    1. // 根据 ID 查询
    2. T getById(Serializable id);
    3. // 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")
    4. T getOne(Wrapper<T> queryWrapper);
    5. // 根据 Wrapper,查询一条记录
    6. T getOne(Wrapper<T> queryWrapper, boolean throwEx);
    7. // 根据 Wrapper,查询一条记录
    8. Map<String, Object> getMap(Wrapper<T> queryWrapper);
    9. // 根据 Wrapper,查询一条记录
    10. <V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
    List
    1. // 查询所有
    2. List<T> list();
    3. // 查询列表
    4. List<T> list(Wrapper<T> queryWrapper);
    5. // 查询(根据ID 批量查询)
    6. Collection<T> listByIds(Collection<? extends Serializable> idList);
    7. // 查询(根据 columnMap 条件)
    8. Collection<T> listByMap(Map<String, Object> columnMap);
    9. // 查询所有列表
    10. List<Map<String, Object>> listMaps();
    11. // 查询列表
    12. List<Map<String, Object>> listMaps(Wrapper queryWrapper);
    13. // 查询全部记录
    14. List<Object> listObjs();
    15. // 查询全部记录
    16. <V> List<V> listObjs(Function<? super Object, V> mapper);
    17. // 根据 Wrapper 条件,查询全部记录
    18. List<Object> listObjs(Wrapper<T> queryWrapper);
    19. // 根据 Wrapper 条件,查询全部记录
    20. <V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
    Page
    1. // 无条件分页查询
    2. IPage<T> page(IPage<T> page);
    3. // 条件分页查询
    4. IPage<T> page(IPage<T> page, Wrapper<T> queryWrapper);
    5. // 无条件分页查询
    6. IPage<Map<String, Object>> pageMaps(IPage page);
    7. // 条件分页查询
    8. IPage<Map<String, Object>> pageMaps(IPage page, Wrapper queryWrapper);
    Count
    1. // 查询总记录数
    2. int count();
    3. // 根据 Wrapper 条件,查询总记录数
    4. int count(Wrapper<T> queryWrapper);

    上面所有的方法,都不需要自己实现,直接作为业务方法调用即可 

  • 相关阅读:
    ubuntu创建账号和samba共享目录
    科学技术新闻查询易语言代码
    SQL 教程之为什么 SQL 正在击败 NoSQL,以及这对数据的未来意味着什么
    分布式定时调度:xxl-job 万字详解
    洛谷 p1308 分析母串,是否有子串,如果有有几个,第一个出现的位置在哪?
    iOS_Custom Transition Animation 自定义转场动画
    MIT6.S081 2021 mmap
    Python采集电商平台数据信息
    7.2 通过API创建新进程
    接口开放太麻烦?试试阿里云API网关吧
  • 原文地址:https://blog.csdn.net/zp8126/article/details/136801180