mybaitsPlus 封装的工具类

对mybatisPlus进行封装 实现单查询sql自动拼装

建表语句

create table student
(
    id           bigint auto_increment comment '主键' primary key,
    creator      int                                  null comment '创建用户',
    updator      int                                  null comment '更新用户',
    version      int(5)                               not null comment '乐观锁',
    data_status  tinyint(1) default 1                 null comment '逻辑删除标志位(0删除)',
    created_time datetime   default CURRENT_TIMESTAMP null comment '创建时间',
    updated_time datetime   default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
    name         varchar(128)                         null comment '姓名',
    age          int                                  null comment '年纪',
    birthday     datetime                             null comment '生日'
)
    comment '学生表';

两个比较重要的工具类
MapperUtils.java

package top.fuly.mybatis_plus_swagger.common.sqlbase.utils;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import top.fuly.mybatis_plus_swagger.common.sqlbase.bean.CreateBaseDO;
import top.fuly.mybatis_plus_swagger.common.sqlbase.bean.QueryBaseDTO;
import top.fuly.mybatis_plus_swagger.common.sqlbase.exceptions.UtilsException;
import java.util.List;

/**
 * @author Fuly.Zhao
 * @date 2021/5/14/20:33
 */
public class MapperUtils {
    
    

    //查总数
    public static <E extends CreateBaseDO> Integer selectDtoCount(BaseMapper<E> mapper) {
    
    
        return mapper.selectCount(new QueryWrapper<>());
    }

    //按条件查总数
    public static <E extends CreateBaseDO, Q> Integer selectDtoCount(BaseMapper<E> mapper, Q objDto, Class<E> genericClass) {
    
    
        return mapper.selectCount(QueryWrapperUtils.getQueryWrapper(objDto, genericClass));
    }

    //按条件查一个
    public static <E extends CreateBaseDO, Q> E selectDtoOne(BaseMapper<E> mapper, Q objDto, Class<E> genericClass) {
    
    
        return mapper.selectOne(QueryWrapperUtils.getQueryWrapper(objDto, genericClass));
    }

    //按条件分页查
    public static <E extends CreateBaseDO, Q extends QueryBaseDTO> Page<E> selectDtoPage(BaseMapper<E> mapper, Q objDto, Class<E> genericClass) {
    
    
        return mapper.selectPage(new Page<>(objDto.getCurrent(), objDto.getSize()), QueryWrapperUtils.getQueryWrapper(objDto, genericClass));
    }

    // 查全部
    public static <E extends CreateBaseDO> List<E> selectDtoList(BaseMapper<E> mapper) {
    
    
        return mapper.selectList(new QueryWrapper<>());
    }

    public static <E extends CreateBaseDO,Q extends QueryBaseDTO> List<E> selectDtoList(BaseMapper<E> mapper, Q objDto, Class<E> genericClass) {
    
    
        Integer current = objDto.getCurrent();
        Integer size = objDto.getSize();
        return mapper.selectList(QueryWrapperUtils.getQueryWrapper(objDto, genericClass).last("limit " + (current-1)*size + " , " + size));
    }

    //根据某一条件查
    public static <E extends CreateBaseDO> List<E> selectPageByColumn(BaseMapper<E> mapper, String column, Object value) {
    
    
        return mapper.selectList(new QueryWrapper<E>().eq(column, value));
    }




    //按条件删除
    public static <E extends CreateBaseDO, D> Integer deleteByDto(BaseMapper<E> mapper, D objDto, Class<E> genericClass) {
    
    
        return mapper.delete(QueryWrapperUtils.getQueryWrapper(objDto, genericClass));
    }


    //根据id删除
    public static <E extends CreateBaseDO> Integer deleteByDtoId(BaseMapper<E> mapper, Long id) {
    
    
        return mapper.deleteById(id);
    }


    // 改  实际是根据id修改的
    public static <E extends CreateBaseDO, U> Integer updateById(BaseMapper<E> mapper, U objDto, Class<E> genericClass) {
    
    
        E upEntity = QueryWrapperUtils.getNewInstance(objDto, genericClass);
        if (upEntity.getId() == null) {
    
    
            throw new UtilsException("id不合法");
        }
        return mapper.updateById(upEntity);
    }

    public static <E extends CreateBaseDO, U> Integer updateByDto(BaseMapper<E> mapper, U objDto, Class<E> genericClass) {
    
    
        return mapper.update(QueryWrapperUtils.getNewInstance(objDto, genericClass),QueryWrapperUtils.getUpdateWrapper(objDto));
    }
}

QueryWrapperUtils.java

package top.fuly.mybatis_plus_swagger.common.sqlbase.utils;


import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import top.fuly.mybatis_plus_swagger.common.sqlbase.annotation.*;
import top.fuly.mybatis_plus_swagger.common.sqlbase.annotation.constantenum.LikeConstantEnum;
import top.fuly.mybatis_plus_swagger.common.sqlbase.annotation.constantenum.OrderConstantEnum;
import top.fuly.mybatis_plus_swagger.common.sqlbase.exceptions.UtilsException;

import java.lang.reflect.Field;
import java.util.List;

/**
 * @author Fuly.Zhao
 * @date 2021/5/13/15:01
 */
@Slf4j
public class QueryWrapperUtils {
    
    


    public static <Q, E> QueryWrapper<E> getQueryWrapper(Q objDto, Class<E> genericClass) {
    
    
        E targetDo = getNewInstance(objDto, genericClass);
        QueryWrapper<E> queryWrapper = createQueryWrapper(new QueryWrapper<>(targetDo), objDto);
        return queryWrapper;
    }


    public static <Q, E> E getNewInstance(Q objDto, Class<E> genericClass) {
    
    
        E target = null;
        try {
    
    
            target = ((Class<E>) genericClass).newInstance();
            BeanUtils.copyProperties(objDto, target);
        } catch (ReflectiveOperationException roe) {

        }
        initEntity(target);
        return target;
    }


    @SneakyThrows
    private static <Q, E> QueryWrapper<E> createQueryWrapper(QueryWrapper<E> queryWrapper, Q queryDto)  {
        Class queryDtoClazz = queryDto.getClass();
        Field[] declaredFields = queryDtoClazz.getDeclaredFields();
        for (Field declaredField : declaredFields) {
            if (declaredField.getAnnotations().length > 0) {
                declaredField.setAccessible(true);
                Object obj = declaredField.get(queryDto);
                if (ObjectUtils.isEmpty(obj) && ObjectUtils.isEmpty(declaredField.getDeclaredAnnotation(OrderBy.class))) {
    
    
                    return queryWrapper;
                }
                if (ObjectUtils.isNotEmpty(declaredField.getDeclaredAnnotation(Ge.class))) {
    
    
                    ge(queryWrapper, declaredField, obj);
                } else if (ObjectUtils.isNotEmpty(declaredField.getDeclaredAnnotation(Gt.class))) {
    
    
                    gt(queryWrapper, declaredField, obj);
                } else if (ObjectUtils.isNotEmpty(declaredField.getDeclaredAnnotation(Le.class))) {
    
    
                    le(queryWrapper, declaredField, obj);
                } else if (ObjectUtils.isNotEmpty(declaredField.getDeclaredAnnotation(Lt.class))) {
    
    
                    lt(queryWrapper, declaredField, obj);
                } else if (ObjectUtils.isNotEmpty(declaredField.getDeclaredAnnotation(In.class))) {
    
    
                    in(queryWrapper, declaredField, obj);
                } else if (ObjectUtils.isNotEmpty(declaredField.getDeclaredAnnotation(Like.class))) {
    
    
                    like(queryWrapper, declaredField, obj);
                } else if (ObjectUtils.isNotEmpty(declaredField.getDeclaredAnnotation(Not.class))) {
    
    
                    not(queryWrapper, declaredField, obj);
                } else if (ObjectUtils.isNotEmpty(declaredField.getDeclaredAnnotation(OrderBy.class))) {
    
    
                    order(queryWrapper, declaredField);
                } else if (ObjectUtils.isNotEmpty(declaredField.getDeclaredAnnotation(NotIn.class))) {
    
    
                    notIn(queryWrapper, declaredField,obj);
                }
            }
        }
        return queryWrapper;
    }

    @SneakyThrows
    private static <E> void initEntity(E targetDo) {
    
    
        Class<?> aClass = targetDo.getClass();
        do {
    
    
            Field[] declaredFields = aClass.getDeclaredFields();
            for (Field declaredField : declaredFields) {
    
    
                declaredField.setAccessible(true);
                Object object = declaredField.get(targetDo);
                //为了过滤 ""
                if (object != null &&
                        ObjectUtils.isEmpty(declaredField.get(targetDo))
                        && (declaredField.getDeclaredAnnotation(TableField.class) == null)) {
    
    
                    declaredField.set(targetDo, null);
                }
            }
            aClass = aClass.getSuperclass();
        } while (aClass != Object.class);
    }



    private static String getXiaHuaXian(String str) {
    
    
        StringBuilder sb = new StringBuilder();
        if (str.length() < 3) {
    
    
            sb.append(str.toLowerCase());
        } else {
    
    
            for (int i = 0; i < str.length(); i++) {
    
    
                if (Character.isUpperCase(str.charAt(i))) {
    
    
                    sb.append("_").append(Character.toLowerCase(str.charAt(i)));
                } else {
    
    
                    sb.append(str.charAt(i));
                }
            }
        }
        return sb.toString();
    }

    //大于等于
    @SneakyThrows
    private static <E> QueryWrapper<E> ge(QueryWrapper<E> queryWrapper, Field declaredField, Object obj) {
    
    
        Ge Ge = declaredField.getDeclaredAnnotation(Ge.class);
        String fieldName = Ge.fieldName();
        if (ObjectUtils.isNotEmpty(fieldName)) {
    
    
            queryWrapper.ge(getXiaHuaXian(fieldName), obj);
        }
        return queryWrapper;
    }

    @SneakyThrows
    private static <E> QueryWrapper<E> gt(QueryWrapper<E> queryWrapper, Field declaredField, Object obj) {
    
    
        Gt Gt = declaredField.getDeclaredAnnotation(Gt.class);
        String fieldName = Gt.fieldName();
        queryWrapper.gt(getXiaHuaXian(fieldName), obj);
        return queryWrapper;
    }

    @SneakyThrows
    private static <E> QueryWrapper<E> in(QueryWrapper<E> queryWrapper, Field declaredField, Object obj) {
    
    
        In In = declaredField.getDeclaredAnnotation(In.class);
        String fieldName = In.fieldName();
        if (ObjectUtils.isEmpty(fieldName)) {
    
    
            return queryWrapper;
        }
        if (obj.getClass().isArray()) {
    
    
            Object[] objArr = (Object[]) obj;
            queryWrapper.in(getXiaHuaXian(fieldName), objArr);
        } else if (obj instanceof List) {
    
    
            List objList = (List) obj;
            queryWrapper.in(getXiaHuaXian(fieldName), objList);
        }
        return queryWrapper;
    }

    @SneakyThrows
    private static <E> QueryWrapper<E> notIn(QueryWrapper<E> queryWrapper, Field declaredField, Object obj) {
    
    
        NotIn notIn = declaredField.getDeclaredAnnotation(NotIn.class);
        String fieldName = notIn.fieldName();
        if (ObjectUtils.isEmpty(fieldName)) {
    
    
            return queryWrapper;
        }
        if (obj.getClass().isArray()) {
    
    
            Object[] objArr = (Object[]) obj;
            queryWrapper.notIn(getXiaHuaXian(fieldName), objArr);
        } else if (obj instanceof List) {
    
    
            List objList = (List) obj;
            queryWrapper.notIn(getXiaHuaXian(fieldName), objList);
        }
        return queryWrapper;
    }


    @SneakyThrows
    private static <E> QueryWrapper<E> le(QueryWrapper<E> queryWrapper, Field declaredField, Object obj) {
    
    
        Le Le = declaredField.getDeclaredAnnotation(Le.class);
        String fieldName = Le.fieldName();
        if (ObjectUtils.isNotEmpty(fieldName)) {
    
    
            queryWrapper.le(getXiaHuaXian(fieldName), obj);
        }
        return queryWrapper;
    }

    @SneakyThrows
    private static <E> QueryWrapper<E> like(QueryWrapper<E> queryWrapper, Field declaredField, Object obj) {
    
    
        Like Like = declaredField.getDeclaredAnnotation(Like.class);
        String fieldName = Like.fieldName();
        if (ObjectUtils.isEmpty(fieldName)) {
    
    
            return queryWrapper;
        }
        LikeConstantEnum LikeConstantEnum = Like.likeType();
        switch (LikeConstantEnum) {
    
    
            case LEFT: {
    
    
                queryWrapper.likeLeft(getXiaHuaXian(fieldName), obj);
                break;
            }
            case RIGHT: {
    
    
                queryWrapper.likeRight(getXiaHuaXian(fieldName), obj);
                break;
            }
            case ALL: {
    
    
                queryWrapper.like(getXiaHuaXian(fieldName), obj);
                break;
            }
            default: {
    
    
            }
        }
        return queryWrapper;
    }

    @SneakyThrows
    private static <E> QueryWrapper<E> lt(QueryWrapper<E> queryWrapper, Field declaredField, Object obj) {
    
    
        Lt Lt = declaredField.getDeclaredAnnotation(Lt.class);
        String fieldName = Lt.fieldName();
        if (ObjectUtils.isNotEmpty(fieldName)) {
    
    
            queryWrapper.lt(getXiaHuaXian(fieldName), obj);
        }
        return queryWrapper;
    }

    @SneakyThrows
    private static <E> QueryWrapper<E> not(QueryWrapper<E> queryWrapper, Field declaredField, Object obj) {
    
    
        Not Ne = declaredField.getDeclaredAnnotation(Not.class);
        String fieldName = Ne.fieldName();
        if (ObjectUtils.isNotEmpty(fieldName)) {
    
    
            queryWrapper.ne(getXiaHuaXian(fieldName), obj);
        }
        return queryWrapper;
    }


    @SneakyThrows
    private static <E> QueryWrapper<E> order(QueryWrapper<E> queryWrapper, Field declaredField) {
    
    
        OrderBy Order = declaredField.getDeclaredAnnotation(OrderBy.class);
        OrderConstantEnum OrderConstantEnum = Order.orderType();
        switch (OrderConstantEnum) {
    
    
            case ASC: {
    
    
                queryWrapper.orderByAsc(getXiaHuaXian(declaredField.getName()));
                break;
            }
            case DESC: {
    
    
                queryWrapper.orderByDesc(getXiaHuaXian(declaredField.getName()));
                break;
            }
            default: {
    
    
                break;
            }
        }
        return queryWrapper;
    }


    @SneakyThrows
    public static <U, E> QueryWrapper<E> getUpdateWrapper(U updateDto) {
    
    
        return createUpdateWrapper(new QueryWrapper<>(), updateDto);
    }

    private static <U, E> QueryWrapper<E> createUpdateWrapper(QueryWrapper<E> updateWrapper, U updateDto) throws IllegalAccessException {
    
    
        Class queryDtoClazz = updateDto.getClass();
        Field[] declaredFields = queryDtoClazz.getDeclaredFields();
        for (Field declaredField : declaredFields) {
    
    
            if (declaredField.getAnnotations().length > 0
                    && ObjectUtils.isNotEmpty(declaredField.getDeclaredAnnotation(UpdateBy.class))) {
    
    
                declaredField.setAccessible(true);
                Object obj = declaredField.get(updateDto);
                if (ObjectUtils.isEmpty(obj)) {
    
    
                    throw new UtilsException("限定条件为空");
                }
                if (ObjectUtils.isNotEmpty(declaredField.getDeclaredAnnotation(Ge.class))) {
    
    
                    ge(updateWrapper, declaredField, obj);
                } else if (ObjectUtils.isNotEmpty(declaredField.getDeclaredAnnotation(Gt.class))) {
    
    
                    gt(updateWrapper, declaredField, obj);
                } else if (ObjectUtils.isNotEmpty(declaredField.getDeclaredAnnotation(Le.class))) {
    
    
                    le(updateWrapper, declaredField, obj);
                } else if (ObjectUtils.isNotEmpty(declaredField.getDeclaredAnnotation(Lt.class))) {
    
    
                    lt(updateWrapper, declaredField, obj);
                } else if (ObjectUtils.isNotEmpty(declaredField.getDeclaredAnnotation(In.class))) {
    
    
                    in(updateWrapper, declaredField, obj);
                } else if (ObjectUtils.isNotEmpty(declaredField.getDeclaredAnnotation(Like.class))) {
    
    
                    like(updateWrapper, declaredField, obj);
                } else if (ObjectUtils.isNotEmpty(declaredField.getDeclaredAnnotation(Not.class))) {
    
    
                    not(updateWrapper, declaredField, obj);
                } else if (ObjectUtils.isNotEmpty(declaredField.getDeclaredAnnotation(NotIn.class))) {
    
    
                    notIn(updateWrapper, declaredField,obj);
                } else {
    
    
                    updateBy(updateWrapper, declaredField, obj);
                }
            }
        }
        return updateWrapper;
    }

    @SneakyThrows
    private static < E> QueryWrapper<E> updateBy(QueryWrapper<E> queryWrapper, Field declaredField, Object obj) {
    
    
        UpdateBy updateBy = declaredField.getDeclaredAnnotation(UpdateBy.class);
        String fieldName = updateBy.fieldName();
        if (ObjectUtils.isNotEmpty(fieldName)) {
    
    
            queryWrapper.eq(getXiaHuaXian(fieldName), obj);
        }
        return queryWrapper;
    }
}

service接口是这样的

public interface IStudentService extends IService<StudentEntity> {
    
    

    //查总数
    Integer selectDtoCount();

    //按条件查总数
    Integer selectDtoCount(StudentQueryDTO queryDTO);

    //按条件查一个
    StudentEntity selectDtoOne(StudentQueryDTO queryDTO);

    //按条件分页查
    Page<StudentEntity> selectDtoPage(StudentQueryDTO queryDTO);

    // 查全部
    List<StudentEntity> selectDtoList();

    // 按条件查
    List<StudentEntity> selectDtoList(StudentQueryDTO queryDTO);

    //根据某一条件查
    List<StudentEntity> selectPageByColumn(String column, Object value);

    //根据id删除
    Integer deleteByDtoId(long id);

    // 改  实际是根据id修改的
    Integer updateById(StudentUpdateDTO updateDTO);

    //按条件修改
    Integer updateByDto(StudentUpdateDTO updateDTO);

    //增
    Boolean insertDto(StudentAddDTO addDto);

    // 批量新增
    Boolean batchInsertDto(List<StudentAddDTO> addDtoList);

    //按条件删除
    //  Integer deleteByDto(StudentDeleteDTO queryDTO);

}

ServiceImpl实现类是这样的

@Service("studentService")
public class StudentServiceImpl extends ServiceImpl<StudentMapper, StudentEntity> implements IStudentService {
    
    

    @Autowired
    private StudentMapper studentMapper;

    /**
     * 查总数
     */
    @Override
    public Integer selectDtoCount() {
    
    
        return MapperUtils.selectDtoCount(studentMapper);
    }
    
    /**
     * 按条件查总数
     */
    @Override
    public Integer selectDtoCount(StudentQueryDTO queryDTO) {
    
    
        return MapperUtils.selectDtoCount(studentMapper, queryDTO, StudentEntity.class);
    }

    /**
     * 按条件查一个
     */
    @Override
    public StudentEntity selectDtoOne(StudentQueryDTO queryDTO) {
    
    
        return MapperUtils.selectDtoOne(studentMapper, queryDTO, StudentEntity.class);
    }
    
    /**
     * 按条件分页查
     */
    @Override
    public Page<StudentEntity> selectDtoPage(StudentQueryDTO queryDTO) {
    
    
        return MapperUtils.selectDtoPage(studentMapper, queryDTO, StudentEntity.class);
    }

    /**
     * 查全部
     */
    @Override
    public List<StudentEntity> selectDtoList() {
    
    
        return MapperUtils.selectDtoList(studentMapper);
    }
    
    /**
     * 按条件查
     */
    @Override
    public List<StudentEntity> selectDtoList(StudentQueryDTO queryDTO) {
    
    
        return MapperUtils.selectDtoList(studentMapper, queryDTO, StudentEntity.class);
    }

    /**
     * 根据某一条件查
     */
    @Override
    public List<StudentEntity> selectPageByColumn(String column, Object value) {
    
    
        return MapperUtils.selectPageByColumn(studentMapper, column, value);
    }

    /**
     * 根据id删除
     */
    @Override
    public Integer deleteByDtoId(long id) {
    
    
        return MapperUtils.deleteByDtoId(studentMapper, id);
    }

    /**
     * 修改  实际是根据id修改的
     */
    @Override
    public Integer updateById(StudentUpdateDTO updateDTO) {
    
    
        return MapperUtils.updateById(studentMapper, updateDTO, StudentEntity.class);
    }

    /**
     * 按条件修改
     */
    @Override
    public Integer updateByDto(StudentUpdateDTO updateDTO) {
    
    
        return MapperUtils.updateByDto(studentMapper, updateDTO, StudentEntity.class);
    }
    
    /**
     * 新增
     */
    @Override
    public Boolean insertDto(StudentAddDTO addDto) {
    
    
        return save(QueryWrapperUtils.getNewInstance(addDto, StudentEntity.class));
    }
    
    /**
     * 批量新增
     */
    @Override
    public Boolean batchInsertDto(List<StudentAddDTO> addDtoList) {
    
    
        List<StudentEntity> plottingInfoEntities = BeanUtils.copyCollectionObjects(addDtoList, StudentEntity::new);
        return saveBatch(plottingInfoEntities);
    }
    
    /**
     * 按条件删除
     */
    //  @Override
    // public Integer deleteByDto(StudentDeleteDTO deleteDTO) {
    
    
    //     return MapperUtils.deleteByDto(studentMapper,deleteDTO,StudentEntity.class);
    // }
}

Mapper接口是空的

@Mapper
public interface StudentMapper extends BaseMapper<StudentEntity> {
    
    
}

代码地址: https://gitee.com/Fuly1024/study-demo
启动后swagger 访问地址 http://localhost:8200/doc.html#/home

这些东西是可以写使用easycode直接生成的
easycode插件离线安装 https://plugins.jetbrains.com/plugin/10954-easy-code/versions

猜你喜欢

转载自blog.csdn.net/xy3233/article/details/116944827