今天又给MP
提交了一个PR
https://gitee.com/baomidou/mybatis-plus/pulls/223
是用于
在使用mybatis-plus进行开发中,我不禁产生一个疑问,为什么?每次使用我将会产生这些代码:
代码语言:javascript复制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
,能让我进行单表的几乎所有操作,只需要每加一张表,用代码生成器生成Entity
、Mapper
、Service
、ServiceImpl
即可,两年里,我一直如此使用
直到近期,我发现也许Service
和ServiceImpl
所代表的业务层,要么是无函数,要么是有大量构建参数条件的函数(这些也许应该放到Mapper
层,只是因为需要批量操作等,不得不放到Service
),并且这么多无函数的Service
,让项目整体看起来很臃肿
因此我通过研读Mybatis-plus
源码,发现也许并不需要一个实体一个Service
(就像一些很小的关联表),写下了这个类
com.baomidou.mybatisplus.extension.toolkit.StaticService
它能做什么?
可以通过静态方式调用对应Service
操作,就像这样:
Entity entity = new Entity();
entity.setName("ruben");
StaticService.save(entity);
并且你不需要对应的Service
接口以及其实现
它几乎包含了IService
中所有方法(除了ktolin,这块暂时还未写)
并对应涵盖了测试用例
com.baomidou.mybatisplus.test.toolkit.StaticServiceTest