建议开发中以此为数据基本操作类,而不是以Mapper为基础操作类,如果需要使用Mapper中的方法,可以直接通过getMapper()取得Entity对应的Mapper类,此类与Mapper类相比做了很多的增强功能,尤其是其lambda语法,非常高效便捷。

    1. // 集成了MP的ServiceImpl,实现了IBaseRepository接口(内部拓展了lambda查询操作)
    2. public abstract class BaseRepository<M extends BaseMapper<E>, E> extends ServiceImpl<M, E> implements IBaseRepository<E> {
    3. @Override
    4. public boolean updateById(E entity) {
    5. boolean result = super.updateById(entity);
    6. if(result) {
    7. // 数据自动更新@DataSource注解的配合逻辑
    8. SpringContextUtil.getApplicationContext()
    9. .publishEvent(EntityUpdateEvent.create(entity));
    10. }
    11. return result;
    12. }
    13. @Override
    14. public boolean updateBatchById(Collection<E> entityList, int batchSize) {
    15. boolean result = super.updateBatchById(entityList, batchSize);
    16. if(result) {
    17. // 数据自动更新@DataSource注解的配合逻辑
    18. for (E entity : entityList) {
    19. SpringContextUtil.getApplicationContext().publishEvent(EntityUpdateEvent.create(entity));
    20. }
    21. }
    22. return result;
    23. }
    24. @Override
    25. protected Class<M> currentMapperClass() {
    26. return (Class<M>) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseRepository.class, 0);
    27. }
    28. @Override
    29. protected Class<E> currentModelClass() {
    30. return (Class<E>) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseRepository.class, 1);
    31. }
    32. }