public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {...}

public interface IUserService extends IService<User> {...}

为什么既要 extends(继承),又要 implements(实现)?

总结:

  1. extends ServiceImpl<...>: 直接获得 MyBatis-Plus 提供的全套 CRUD 功能,不用手写增删改查

  2. implements IUserService规定这个类必须提供哪些功能,规范代码结构。

详细拆解

1、为什么要 extends ServiceImpl<UserMapper, User>

作用:自动获得所有通用 CRUD 方法

MyBatis-Plus 给我们提供了一个父类 ServiceImpl,它内部已经写好了:

  • getById() 根据 ID 查

  • list() 查询所有

  • save() 新增

  • update() 更新

  • remove() 删除

  • ... 10 几种常用方法

只要继承它, UserServiceImpl 瞬间就拥有这些方法,不需要自己写一行 SQL

2.泛型 <UserMapper, User> 是什么意思?

  • UserMapper:DAO 层接口;数据访问层接口,负责与数据库交互

  • User:数据库表对应的实体类

告诉 MyBatis-Plus:

当前 CRUD 操作是针对 User 表,使用 UserMapper 执行。

3. 为什么要 implements IUserService

作用:定义业务规范 + 解耦

IUserService 是业务接口,里面声明项目需要的业务方法,例如:

import com.baomidou.mybatisplus.extension.service.IService;
import com.hmdp.dto.LoginFormDTO;
import com.hmdp.dto.Result;
import com.hmdp.entity.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

public interface IUserService extends IService<User> {
    //自己项目中的业务方法
    Result sendCode(String phone, HttpSession session);
    Result login(LoginFormDTO loginForm, HttpSession session);
    Result sign();
    Result signCount();
    Result logout(HttpServletRequest request);
}

实现接口的目的:

  1. 规范:必须实现接口里的方法,否则报错

  2. 解耦:调用时用 IUserService,而不是 UserServiceImpl将来换实现类,代码不用改

  3. 标准开发模式:Controller → Service 接口 → 实现类

4.为什么 IUserServiceextends IService<User>以及它和你刚才的 UserServiceImpl 是什么关系!

  • 核心结论(最重要)

IUserService = 通用 CRUD 接口 + 自己项目的业务接口,它是两个接口合二为一。

extends IService<User> 到底是什么?

IServiceMyBatis-Plus 提供的万能通用接口

它里面已经写好了所有通用 CRUD 方法,例如:

  public interface IService<T> {

   boolean save(T entity); // 新增

   boolean removeById(Serializable id); // 删除

   boolean updateById(T entity); // 修改

   T getById(Serializable id); // 根据ID查询

   List<T> list(); // 查询所有

   ...

  }

  只要继承 IService<User>, IUserService自动拥有这些方法

  关系:

【MyBatis-Plus 提供】

  1. IService:定义 CRUD 方法

  2. ServiceImpl:实现 CRUD 方法

【项目中】

  1. IUserService extends IService→ 拥有 CRUD + 自定义业务方法

  2. UserServiceImpl extends ServiceImpl implements IUserServic

        最终效果:
      • ServiceImpl 提供 CRUD 的实现

      • IUserService 提供 业务方法规范

      • UserServiceImpl 拥有全部功能

      Controller 控制层

      Service 接口(IUserService)业务接口

      Service 实现类(UserServiceImpl)业务实现类

      Mapper 数据访问层(UserMapper)数据访问层

      数据库(User 表)

      Logo

      汇聚全球AI编程工具,助力开发者即刻编程。

      更多推荐