资讯专栏INFORMATION COLUMN

mybatis-plus 的一种很别扭的用法

Rocko / 3477人阅读

摘要:熟悉的人都知道,提供两种包含预定义增删改查操作的接口对比这两个接口,操作都差不多,名字有一点点改变,比如里面叫的方法,在里面叫。另外还有一种方式就是通过把暴露出来这个也是的实例。这样的话,使用的时候就只需要引用一个对象了

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

com.baomidou.mybatisplus.core.mapper.BaseMapper

com.baomidou.mybatisplus.extension.service.IService

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

其实我也不是很清楚为什么要多带带设计 IService 接口,但是两者确实有区别,就是 IService 提供批处理操作,BaseMapper 没有。

另外,IService 的默认实现 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl 就是调用 BaseMapper 来操作数据库,所以我猜 IService 是 Java 8 之前对 BaseMapper 所做的扩展,而 Java 8 之后,因为有了 default 方法,ServiceImpl 里面的东西其实都可以移到 BaseMapper 里面了。

除此之外还有就是 IService 依赖于 Spring 容器,而 BaseMapper 不依赖;BaseMapper 可以继承并添加新的数据库操作,IService 要扩展的话还是得调用 Mapper,显得有些多此一举。

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

比如在下面一个示例项目中,就同时存在两者:

// StudentService.java
@Service
public class StudentService extends ServiceImpl {
}

// StudentMapper.java
@Component
public interface StudentMapper extends BaseMapper {

    @Select("select * from STUDENT where FIRST_NAME=#{firstName}")
    List selectByFirstName(@Param("firstName") String firstName);
}

这样每个实体都要创建两个文件,很麻烦。可不可以简化呢?可以,就像下面这样:

// StudentService.java
@Service
public class StudentService extends ServiceImpl {

    public interface StudentMapper extends BaseMapper {

        @Select("select * from STUDENT where FIRST_NAME=#{firstName}")
        List selectByFirstName(@Param("firstName") String firstName);
    }
}

对,你没看错,就把 Mapper 直接写在 Service 里面就好。有人就会问了,这个 Mapper 能用吗?告诉你,能:

@Autowired
StudentService.StudentMapper studentMapper;

像上面这样引用过来,照常使用即可。

另外还有一种方式就是通过 Service 把 Mapper 暴露出来:

public class StudentService extends ServiceImpl {
    
    public StudentMapper getMapper() {
        return this.baseMapper;
    }
    
    ...

这个 baseMapper 也是 StudentMapper 的实例。这样的话,使用的时候就只需要引用 StudentService 一个对象了:

List list = studentService.getMapper().selectByFirstName("First");

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73689.html

相关文章

  • Spring Boot 2.x(五):整合Mybatis-Plus

    摘要:的作用可以看到,它给我们提供了一些核心的功能代码生成器和现成的接口以及可以结合的条件构造器使我们的代码变得足够优雅,分页的使用也是相当的方便,以及提供了不同的主键生成策略。 简介 Mybatis-Plus是在Mybatis的基础上,国人开发的一款持久层框架。 showImg(https://segmentfault.com/img/bVbvFk4?w=2022&h=862); 并且荣获...

    AaronYuan 评论0 收藏0
  • MyBatis-Plus初步

    摘要:是最流行的关系型数据库管理系统之一,在应用方面,是最好的,关系数据库管理系统应用软件。是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 本章主要是对MyBatis-Plus的初步介绍,包括一些背景知识、环境搭建、初步使用等知识和例子。对于背景知识,主要包含对MyBatis-Plus的特性介绍、为什么使用MyB...

    娣辩孩 评论0 收藏0
  • Django ORM层日志两种实现方式

    摘要:最近开发一个内部的记录系统其中有一个需求要求将所有数据库操作记录下来为此想了一些方案记录一下思路演化这个需求出来的一瞬间我就否定了在业务逻辑层保存操作记录的方案我认为这样耦合度比较高成本也太高代码也会大量重复的操作中删除操作会调用的方法增改 最近开发一个内部的记录系统,其中有一个需求要求将所有数据库操作记录下来,为此想了一些方案.记录一下. 思路演化 这个需求出来的一瞬间我就否定了在业...

    wudengzan 评论0 收藏0
  • Django ORM层日志两种实现方式

    摘要:最近开发一个内部的记录系统其中有一个需求要求将所有数据库操作记录下来为此想了一些方案记录一下思路演化这个需求出来的一瞬间我就否定了在业务逻辑层保存操作记录的方案我认为这样耦合度比较高成本也太高代码也会大量重复的操作中删除操作会调用的方法增改 最近开发一个内部的记录系统,其中有一个需求要求将所有数据库操作记录下来,为此想了一些方案.记录一下. 思路演化 这个需求出来的一瞬间我就否定了在业...

    CKJOKER 评论0 收藏0
  • springboot+mybatis+mybatis-plus分页查询(简单实现)

    摘要:读取控制台内容请输入请输入正确的代码生成器全局配置实体属性注解数据源配置包配置这里有个模块名的配置,可以注释掉不用。 最近在研究mybatis,然后就去找简化mybatis开发的工具,发现就有通用Mapper和mybatis-plus两个比较好的可是使用,可是经过对比发现还是mybatis-plus比较好,个人觉得,勿喷。。。 集成还是非常简单的,然后就在研究怎么分页,开始研究通用ma...

    luffyZh 评论0 收藏0

发表评论

0条评论

Rocko

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<