Mybatis-plus中Service和Mapper

熟悉 mybatis-plus 的人都知道,mybatis-plus 提供两种包含预定义增删改查操作的接口:

  • com.baomidou.mybatisplus.core.mapper.BaseMapper
  • com.baomidou.mybatisplus.extension.service.IService

Mybatis-plus提供了2个接口1个类:

  • BaseMapper 接口针对dao层的方法封装 CRUD
  • IService<T> 接口针对业务逻辑层的封装 需要指定Dao层类和对应的实体类 是在BaseMapper基础上的加强
  • ServiceImpl<M extends BaseMapper<T>, T> 类针对业务逻辑层的实现

两者提供的方法略有不同:
对比这两个接口,操作都差不多,名字有一点点改变,比如 BaseMapper 里面叫 insert() 的方法,在 IService 里面叫 save()

再有就是 IService 提供批处理操作,BaseMapper 没有。

除此之外还有就是 IService 依赖于 Spring 容器,而 BaseMapper 不依赖。

所以,如果你既要使用批处理操作,又要添加自己的数据库操作,那就必须两个接口一起用。

下面让我们看一下继承结构:
在这里插入图片描述

🔔重要: 既然ServiceImpl类也实现了IService接口,那么如果我的UserServiceImpl直接继承ServiceImpl类不就行了吗?为何还要自定义一个继承了IService接口的IUserService接口?这是因为Spring自动注入要求是以接口为标准,在Controller里注入的Service要是一个接口才符合Spring的规范(当然你注入类也行)!

再来看看ServiceImpl类的源代码:

/**
 * IService 实现类( 泛型:M 是 mapper 对象,T 是实体 )
 *
 * @author hubin
 * @since 2018-06-23
 */
@SuppressWarnings("unchecked")
public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {

    protected Log log = LogFactory.getLog(getClass());

    @Autowired
    protected M baseMapper;

    @Override
    public M getBaseMapper() {
        return baseMapper;
    }

    protected Class<T> entityClass = currentModelClass();

    @Override
    public Class<T> getEntityClass() {
        return entityClass;
    }

    protected Class<M> mapperClass = currentMapperClass();
    
  ......
}

里面依赖Spring容器给自动注入了baseMapper

下面我们对比一下BaseMapperIService 两个接口的方法。
在这里插入图片描述
总结:

  • BaseMapper 针对dao层的方法封装 CRUD

  • IService 针对业务逻辑层的封装,需要指定Dao层类和对应的实体类,是在BaseMapper基础上的加强

  • ServiceImpl 针对业务逻辑层的实现

一般典型的使用例子中,自己的${Entity}ServiceImpl类继承自ServiceImpl类,并实例化BaseMapper的子类${Entity}Mapper和持久化${Entity}类,实现自定义的$I{Entity}Service接口(继承IService接口),在${Entity}ServiceImpl类实现CRUD的增删改查功能,并重写在I${Entity}Service接口定义的方法

例如:

public interface IMyEntityService extends IService<MyEntity> {
  public List<MyEntity> selectAllList();
  public Future<Boolean> updateBaseInfo(MyEntity cgr);
}  

@Service
public class MyEntityImpl extends ServiceImpl<MyEntityMapper,MyEntity> implements MyEntityService {
 
    @Autowired
    private GetResponse getResponse;
 
    @Override
    public List<MyEntity> selectAllList() {
        return this.baseMapper.selectAllList();
    }
 
    @Override
    public Future<Boolean> updateBaseInfo(MyEntity cgr) {
       String ztmc=cgr.getZzmc();
        log.info("当前正在处理的采购人是|{}",ztmc );
        try{
            String legalname =getResponse.getBaseInfo(ztmc).get(0).getData().get(0).getLegalName();
            String socialcode= getResponse.getBaseInfo(ztmc).get(0).getData().get(0).getSocialCode();
            cgr.setFrmc(legalname);
            cgr.setXydm(socialcode);
        }catch (Exception ex){
            log.error("法人或者信用代码有空{}",ex.getMessage());
        }finally {
            log.info("任务进行中,线程池剩余任务数量为|{}", CustomMultiThreadingConfig.executor.getThreadPoolExecutor().getQueue().size());
            int result = this.baseMapper.updateBaseInfo(cgr);
            return AsyncResult.forValue(result>0);
        }
 
    }
}

自定义的IMyEntityService接口里面可以自定义一些针对自己业务封装的一些方法


<<<<<<<<<<<< ⌛ >>>>>>>>>>>>

mybatis-plus-generator和mybatis-plus是用于简化MyBatis开发的两个工具。mybatis-plus是一个MyBatis的增强工具包,提供了一些便捷的操作,节约了编写简单SQL的时间。而mybatis-plus-generator是一个代码生成器,可以自动生成一些基本的Controller、ServiceMapperMapper.xml文件。 通过整合mybatis-plusmybatis-plus-generator,我们可以更高效地开发项目的单表增删改查功能。使用mybatis-plus-generator可以自动生成一些基本的文件,例如Controller、ServiceMapperMapper.xml,极大地减少了手动创建这些文件的时间和工作量。而mybatis-plus提供的便捷操作可以节约编写简单SQL的时间。 然而,对于一些逻辑复杂、多表操作或动态SQL等情况,建议使用原生SQL来处理。mybatis-plus支持原生SQL的使用,通过写原生SQL可以更灵活地满足这些复杂需求。 综上所述,通过整合mybatis-plusmybatis-plus-generator,我们可以在开发更高效地处理单表的增删改查功能,并且对于复杂的需求可以使用原生SQL来满足。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Spring cloud整合MyBatis-plusmybatis-plus-generator](https://blog.csdn.net/cssweb_sh/article/details/123767029)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [mybatis-plus-generator(mybatisplus代码生成器篇)](https://blog.csdn.net/b13001216978/article/details/121690960)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱游泳的老白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值