StaticService

2022-05-03

java

懒惰受到的惩罚不仅仅是自己的失败,还有别人的成功。——米尔•勒纳尔

今天又给MP提交了一个PR

https://gitee.com/baomidou/mybatis-plus/pulls/223

是用于

在使用mybatis-plus进行开发中,我不禁产生一个疑问,为什么?每次使用我将会产生这些代码:

1
2
3
4
private UserInfoService userInfoService;
private UserDepartmentService userDepartmentService;
private UserPositionService userPositionService;
private UserOrderService userOrderService;

我告诉自己,这是为了引用SpringBean,让其保持单例运行,但貌似这些Service,大多都是空实现,这是mybatis-plus开发者们共同的努力,让我能不用写这些CRUD的代码,但仍然每次需要去新建一个XXXService实现IService,然后再写一个实现类XXXServiceImpl继承ServiceImpl<XXXMapper,XXX>

我逐渐接受这种方式,比起自己实现,有了mybatis-plus,能让我进行单表的几乎所有操作,只需要每加一张表,用代码生成器生成EntityMapperServiceServiceImpl即可,两年里,我一直如此使用

直到近期,我发现也许ServiceServiceImpl所代表的业务层,要么是无函数,要么是有大量构建参数条件的函数(这些也许应该放到Mapper层,只是因为需要批量操作等,不得不放到Service),并且这么多无函数的Service,让项目整体看起来很臃肿

因此我通过研读Mybatis-plus源码,发现也许并不需要一个实体一个Service(就像一些很小的关联表),写下了这个类

com.baomidou.mybatisplus.extension.toolkit.StaticService

它能做什么?

可以通过静态方式调用对应Service操作,就像这样:

1
2
3
Entity entity = new Entity();
entity.setName("ruben");
StaticService.save(entity);

并且你不需要对应的Service接口以及其实现

输入图片说明

它几乎包含了IService中所有方法(除了ktolin,这块暂时还未写)

并对应涵盖了测试用例

com.baomidou.mybatisplus.test.toolkit.StaticServiceTest

输入图片说明