Mybatis-plus中IService接口的使用
Mybatis-plus的IService接口:IService接口解释,我们可以看到IService接口就是有一大堆方法接口。
IService的使用:
IService的使用需要另外两个接口的配合:baseMapper和ServiceImpl
第一步:实现basemapper接口
public interface AdminMapper extends BaseMapper<Admin> {
}
第二步:编写service类
public interface AdminService extends IService<Admin> {
}
第三步:编写serviceImpl,ServiceImpl里面是各种的方法实现,好奇的可以点进源码看下,两个泛型需要注意的,第一个是继承basemapper的(AdminMapper),第二个是实体类(Admin)。
public class AdminServiceImpl extends ServiceImpl<AdminMapper,Admin>
implements AdminService {}
//查看源码后发现ServiceImpl类使用到了BaseMapper接口T和实现类M,并实现了IService接口
public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {...}
第四步:在controller层,我们可以参考IService接口解释或者Mybatis-plus官网的方法解释来调用。
@Autowired
AdminService adminService;
void test11(){
// adminService中有很多方法
Admin admin = adminService.getById(13);
}
综合来看,比较合理的解释是:
1、从分层角度来解释,BaseMapper是DAO层的CRUD封装,而IService是业务业务逻辑层的CRUD封装,所以多了批量增、删、改的操作封装,这也比较符合官方指南中的阐述;
2、IService是对BaseMapper的扩展,从BaseMapper、IService、ServiceImpl三者的类关系以及源码可以看出;
此外,个人认为应该还有一个原因,就是IService和BaseMapper提供的是两种实现方式:
如果继承BaseMapper,则不需要去实现其内部方法,依靠mybatis的动态代理即可实现CRUD操作;
而如果自定义IBaseService去继承IService,则需要去实现IService中的方法;