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

IService
IService位于 com.baomidou.mybatisplus.extension.service包下的一个接口规范,接口中包含的一系列的dao层交互操作,一般在服务层进行继承操作。
ServiceImpl
ServiceImpl 是IService 的实现类,ServiceImpl有两个泛型 (opens new window)参数,一个参数为BaseMapper 也就是你的实体Mapper ,一个是你的实体类。
MP帮我们去实现了mapper接口,那mapper接口是不是得有Service接口和一个Service实现类啊?所以他其实帮我们连实现类也写好了,我们只需要去实现接口和继承实现类就好了。当然Service接口中我们也可以写自己的自定义方法但是同时我们也需要在ServiceImpl中自己去写我们自定义的方法,而从IService接口中实现的方法呢?ServiceImpl其实已经帮我们实现了,我们只要继承他就可以了。

继承ServiceImpl要放入两个泛型呢,第一个其实是我们之前写的那个UserMapper,为什么要传入这个呢,看下面的图:

可以看到系统提供的这个ServiceImpl类中有一个成员变量,他被@Autowired注解修饰也就是说这个成员变量是自动注入的,可以发现他的名字叫baseMapper,懂了吧,我们那个UserMapper是继承自baseMapper的吧,所以我们把那个接口传进来,其实就是让这个实现类去自动注入我们的那个UserMapper.
第二个泛型是我们的那个model类,也就是User,我们告诉ServiceImpl我们要处理的User类,ServiceImpl再去调用UserMapper告诉Usermapper我要你处理的User,这说明什么呢,Usermapper的泛型和ServiceImpl的泛型要一致哦,不能说我Usermapper处理User类,然后你给ServiceImpl传入一个Student类,那到时候ServiceImpl传一个Student给UserMapper,UserMapper肯定就处理不了。可以看下图:

画红线的地方也看出来, ServiceImpl明确要求你这个泛型M必须继承的是一个泛型为T的BaseMapper,而T就是我们传入的第二个泛型,所以很明显Usermapper的泛型和ServiceImpl传入的第二个泛型是要一致的哦,一定要注意,虽然很基础但是往往也容易出错嘛..