黑马点评:MyBatis-Plus Service 层继承与实现原理详解
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {...}
与
public interface IUserService extends IService<User> {...}
为什么既要 extends(继承),又要 implements(实现)?
总结:
-
extends ServiceImpl<...>: 直接获得 MyBatis-Plus 提供的全套 CRUD 功能,不用手写增删改查。 -
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);
}
实现接口的目的:
-
规范:必须实现接口里的方法,否则报错
-
解耦:调用时用
IUserService,而不是UserServiceImpl将来换实现类,代码不用改 -
标准开发模式:Controller → Service 接口 → 实现类
4.为什么 IUserService 要 extends IService<User>以及它和你刚才的 UserServiceImpl 是什么关系!
-
核心结论(最重要)
IUserService = 通用 CRUD 接口 + 自己项目的业务接口,它是两个接口合二为一。
extends IService<User> 到底是什么?
IService 是 MyBatis-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 提供】
-
IService:定义 CRUD 方法
-
ServiceImpl:实现 CRUD 方法
【项目中】
-
IUserService extends IService→ 拥有 CRUD + 自定义业务方法
-
UserServiceImpl extends ServiceImpl implements IUserServic
-
ServiceImpl 提供 CRUD 的实现
-
IUserService 提供 业务方法规范
-
UserServiceImpl 拥有全部功能
Controller 控制层
↓
Service 接口(IUserService)业务接口
↓
Service 实现类(UserServiceImpl)业务实现类
↓
Mapper 数据访问层(UserMapper)数据访问层
↓
数据库(User 表)
更多推荐

所有评论(0)