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

熟悉 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, Student> {
}

// StudentMapper.java
@Component
public interface StudentMapper extends BaseMapper<Student> {

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

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

// StudentService.java
@Service
public class StudentService extends ServiceImpl<StudentMapper, Student> {

    public interface StudentMapper extends BaseMapper<Student> {

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

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

@Autowired
StudentService.StudentMapper studentMapper;

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

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

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

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

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

原文 

https://segmentfault.com/a/1190000018509814

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » mybatis-plus 的一种很别扭的用法

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址