myBatis Api Controller Service Mapper基本操作封装

遇上一个某翼平台代码,然后偷懒改造一下,结合EasyCode尽快收工
BaseApi封装
import com.github.pagehelper.PageInfo;
import com.**.common.annotations.validation.AddGroup;
import com.**.common.annotations.validation.ExportGroup;
import com.**.common.annotations.validation.QueryGroup;
import com.**.common.annotations.validation.UpdateGroup;
import com.**.common.base.dto.BaseDTO;
import com.**.common.base.dto.BasePageRequestDTO;
import com.**.common.base.dto.IdsDTO;
import com.**.common.util.JsonResponse;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import javax.validation.Valid;
import java.util.List;

/**
 * Description Api封装
 */
@Validated
public interface BaseApi<T extends BaseDTO, P extends BasePageRequestDTO> {

    /**
     * Description add 新增
     * @param t t
     * @return JsonResponse<java.lang.Boolean>
     */
    @ApiOperation(value = "新增", notes = "新增")
    @PostMapping("/add")
    JsonResponse<Boolean> add(@Validated(value = AddGroup.class) @RequestBody T t);

    /**
     * Description add 修改
     * @param t t
     * @return JsonResponse<java.lang.Boolean>

     */
    @ApiOperation(value = "更新", notes = "更新")
    @PostMapping("/update")
    JsonResponse<Boolean> modify(@Validated(value = UpdateGroup.class) @RequestBody T t);

    /**
     * Description add 批量删除
     * @param ids ids
     * @return JsonResponse<java.lang.Boolean>
     */
    @PostMapping("/batchDelete")
    @ApiOperation(value = "批量删除", notes = "批量删除")
    JsonResponse<Boolean> batchDelete(@Valid @RequestBody IdsDTO<String> ids);

    /**
     * Description add 按主键ID删除
     * @param pkId pkId
     * @return JsonResponse<java.lang.Boolean>
     */
    @ApiOperation(value = "按主键ID删除", notes = "按主键ID删除")
    @PostMapping("/deleteById/{pkId}")
    JsonResponse<Boolean> deleteById(@PathVariable(value = "pkId") String pkId);

    /**
     * Description 根据主键查询
     * @param pkId pkId
     * @return JsonResponse<T>
     */
    @ApiOperation(value = "根据主键查询", notes = "根据主键查询")
    @PostMapping("/findById/{pkId}")
    JsonResponse<Object> findById(@PathVariable(value = "pkId") String pkId);

    /**
     * Description 按条件分页查询
     * @param p p
     * @return JsonResponse<Page <T>>
     */
    @ApiOperation(value = "分页查询列表", notes = "分页查询列表")
    @PostMapping("/findByPage")
    JsonResponse<PageInfo<Object>> findByPage(@Validated(value = QueryGroup.class) @RequestBody P p);

    /**
     * Description 按条件查询所有数据 不开放 需要的话覆写一下
     * @param p p
     * @return JsonResponse<java.util.List<T>>
     */
    @ApiOperation(value = "查询列表", notes = "查询列表", hidden = true)
    @PostMapping("/list")
    JsonResponse<List<T>> findList(@Validated(value = ExportGroup.class) @RequestBody P p);

}
BaseController封装
import com.github.pagehelper.PageInfo;
import com.**.common.base.api.BaseApi;
import com.**.common.base.dto.BaseDTO;
import com.**.common.base.dto.BasePageRequestDTO;
import com.**.common.base.dto.IdsDTO;
import com.**.common.base.service.BaseService;
import com.**.common.util.JsonResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * Description Controller className BaseController
 */
@RestController
public abstract class BaseController<T extends BaseDTO, P extends BasePageRequestDTO> implements BaseApi<T, P> {

    @Autowired
    protected abstract BaseService getBaseService();

    @Override
    // @OperLog(operModul = "新增", operType = OperLogType.ADD, operDesc = "新增")
    public JsonResponse<Boolean> add(T t) {
        checkBeforeAdd(t);
        return JsonResponse.ok(getBaseService().add(t) > 0);
    }

    @Override
    // @OperLog(operModul = "更新", operType = OperLogType.UPDATE, operDesc = "更新")
    public JsonResponse<Boolean> modify(T t) {
        checkBeforeModify(t);
        return JsonResponse.ok(getBaseService().update(t) > 0);
    }

    @Override
    // @OperLog(operModul = "分页查询", operType = OperLogType.QUERY, operDesc = "分页查询")
    public JsonResponse<PageInfo<Object>> findByPage(P p) {
        checkBeforeQuery(p);
        return JsonResponse.ok(getBaseService().findByPage(p));
    }

    @Override
    // @OperLog(operModul = "查询列表", operType = OperLogType.QUERY, operDesc = "查询列表")
    public JsonResponse<List<T>> findList(P p) {
        checkBeforeQueryList(p);
        return JsonResponse.ok(getBaseService().findList(p));
    }

    @Override
    // @OperLog(operModul = "批量删除", operType = OperLogType.BATCHDELETE, operDesc = "批量删除")
    public JsonResponse<Boolean> batchDelete(IdsDTO<String> ids) {
        return JsonResponse.ok(getBaseService().batchDelete(ids.getIds()) > 0);
    }

    @Override
    //@OperLog(operModul = "按主键ID删除", operType = OperLogType.DELETE, operDesc = "按主键ID删除")
    public JsonResponse<Boolean> deleteById(String pkId) {
        return JsonResponse.ok(getBaseService().deleteById(pkId) > 0);
    }

    @Override
    // @OperLog(operModul = "根据主键查询", operType = OperLogType.QUERY, operDesc = "根据主键查询")
    public JsonResponse<Object> findById(String pkId) {
        return JsonResponse.ok(getBaseService().findById(pkId));
    }

    /***
     * Description 查询之前校验
     *
     * @param param param
     */
    public <P extends BasePageRequestDTO> void checkBeforeQuery(P param) {
    }

    /***
     * Description 插入之前校验
     *
     * @param t
     *            t
     */
    public <T> void checkBeforeAdd(T t) {
    }

    /***
     * Description 更新之前校验
     *
     * @param t
     *            t
     */
    public <T extends BaseDTO> void checkBeforeModify(T t) {
    }

    /***
     * Description 分页查询之前校验
     *
     * @param p
     *            p
     */
    public <P extends BasePageRequestDTO> void checkBeforeQueryPage(P p) {
    }

    /***
     * Description 查询所有之前校验
     *
     * @param p
     *            p
     */
    public <P extends BasePageRequestDTO> void checkBeforeQueryList(P p) {
    }

    /***
     * Description 查询之前校验
     *
     * @param pkId
     *            pkId
     */
    public void checkBeforeDelete(String pkId) {
    }

    /***
     * Description 查询之前校验
     *
     * @param ids
     *            ids
     */
    public void checkBeforeDelete(List<String> ids) {
    }

}

demo
/**
 * 城市数据(AirCity)controller
 */
@Api(tags = "城市数据")
@RestController
@RequestMapping("/biz-api/eemp/arev/v1/airCity")
@Validated
@Slf4j
public class AirCityController extends BaseController<AirCityDTO, AirCityParamDTO> {

    @Autowired
    private AirCityService airCityService;

    public AirCityController(AirCityService airCityService) {
        this.airCityService = airCityService;
    }

    @PostMapping(value = {"/findAll"})
    @ApiOperation("查询所有城市信息")
    public  JsonResponse<List<AirCityDTO>> findAll() {
        AirCityParamDTO airCityParamDTO = new AirCityParamDTO();
        airCityParamDTO.setParentCityCode("620000");
        return JsonResponse.ok(airCityService.findList(airCityParamDTO));
    }

    @Override
    protected BaseService getBaseService() {
        return airCityService;
    }
}
BaseServiceImpl
import cn.hutool.core.collection.CollUtil;
import com.github.pagehelper.PageInfo;
import com.github.pagehelper.page.PageMethod;
import com.**.security.client.entity.User;
import com.**.common.base.dto.BaseDTO;
import com.**.common.base.dto.BasePageRequestDTO;
import com.**.common.base.entity.BaseEntity;
import com.**.common.base.service.BaseService;
import com.**.common.constant.NumberConstant;
import com.**.common.repository.BaseRepository;
import com.**.common.util.AbsExtDomainUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * Description service实现 className BaseCommonServiceImpl
 * 
 */
@Slf4j
@Service
@Transactional(rollbackFor = Exception.class)
public abstract class BaseServiceImpl<T extends BaseDTO, E extends BaseEntity, PK, P extends BasePageRequestDTO>
    implements BaseService<T, E, PK, P> {

    protected abstract BaseRepository getBaseRepository();

    @Override
    public int add(T t) {
        E e = getRealEntity();
        BeanUtils.copyProperties(t, e);
        AbsExtDomainUtil.addExtData(e);
        dealAddBefore(t, e);
        return getBaseRepository().insert(e);
    }

    @Override
    public int insert(E e) {
        AbsExtDomainUtil.addExtData(e);
        dealBeforeAdd(e);
        return getBaseRepository().insert(e);
    }

    @Override
    public PK create(T t) {
        E e = getRealEntity();
        BeanUtils.copyProperties(t, e);
        AbsExtDomainUtil.addExtData(e);
        dealBeforeAdd(e);
        getBaseRepository().insert(e);
        return (PK)e.getPkId();
    }

    @Override
    public int update(T t) {
        E e = getRealEntity();
        BeanUtils.copyProperties(t, e);
        AbsExtDomainUtil.updateExtData(e);
        dealUpdateBefore(t, e);
        return getBaseRepository().update(e);
    }

    @Override
    public int modify(E e) {
        AbsExtDomainUtil.updateExtData(e);
        dealBeforeUpdate(e);
        return getBaseRepository().update(e);
    }

    /**
     * Description 物理删除
     * 
     * @param pkId
     *            pkId
     * @return int
     */
    @Override
    public int deleteById(PK pkId) {
        User user = AbsExtDomainUtil.getUserInfo();
        return getBaseRepository().deleteById(pkId, user);
    }

    /**
     * Description 根据ids批量物理删除
     * 
     * @param ids
     *            ids
     * @return int
     */
    @Override
    public int batchDelete(List<PK> ids) {
        if (CollUtil.isEmpty(ids)) {
            return NumberConstant.ZERO;
        }
        User user = AbsExtDomainUtil.getUserInfo();
        return getBaseRepository().batchDeleteByIDs(ids, user);
    }

    /**
     * Description 批量插入
     * 
     * @param records
     *            records
     * @return int
     */
    @Override
    public int batchInsert(List<T> records) {
        if (CollUtil.isEmpty(records)) {
            return NumberConstant.ZERO;
        }
        List<E> list = records.stream().map(e -> {
            E entity = getRealEntity();
            BeanUtils.copyProperties(e, entity);
            AbsExtDomainUtil.addExtData(entity);
            dealBeforeAdd(entity);
            return entity;
        }).collect(Collectors.toCollection(ArrayList::new));
        return getBaseRepository().batchInsert(list);
    }

    @Override
    public int batchSave(List<E> records) {
        if (CollUtil.isEmpty(records)) {
            return NumberConstant.ZERO;
        }
        records.stream().forEach(e -> {
            AbsExtDomainUtil.addExtData(e);
            dealBeforeAdd(e);
        });
        return getBaseRepository().batchInsert(records);
    }

    @Override
    public PageInfo<T> findByPage(P p) {
        // 达梦适配分页注意 分页后面执行的代码必须是需要分页的查询语句
        PageMethod.startPage(p.getPageNo(), p.getPageSize());
        List<T> data = getBaseRepository().findByPage(p);
        return new PageInfo<>(data);
    }

    @Override
    public List<T> findList(P p) {
        return getBaseRepository().findByPage(p);
    }

    @Override
    public int batchUpdate(List<T> records, boolean ignoreNull) {
        if (CollUtil.isEmpty(records)) {
            return NumberConstant.ZERO;
        }
        List<E> list = records.stream().map(e -> {
            E entity = getRealEntity();
            BeanUtils.copyProperties(e, entity);
            AbsExtDomainUtil.updateExtData(entity);
            dealBeforeUpdate(entity);
            return entity;
        }).collect(Collectors.toCollection(ArrayList::new));
        return getBaseRepository().batchUpdate(list, ignoreNull);
    }

    @Override
    public int batchModify(List<E> records, boolean ignoreNull) {
        if (CollUtil.isEmpty(records)) {
            return NumberConstant.ZERO;
        }
        records.stream().forEach(e -> {
            AbsExtDomainUtil.updateExtData(e);
            dealBeforeUpdate(e);
        });
        return getBaseRepository().batchUpdate(records, ignoreNull);
    }

    @Override
    public T findById(PK pkId) {
        return (T)getBaseRepository().findById(pkId);
    }

    /**
     * Description 新增前处理
     * 
     * @param e
     *            e
     * @return void
     */
    public void dealAddBefore(T t, E e) {}

    /**
     * Description 新增前处理
     * 
     * @param e
     *            e
     * @return void
     */
    public void dealBeforeAdd(E e) {}

    /**
     * Description 修改前处理
     * 
     * @param e
     *            e
     * @return void
     */
    public void dealUpdateBefore(T var2, E e) {}

    /**
     * Description 修改前处理
     * 
     * @param e
     *            e
     * @return void
     */
    public void dealBeforeUpdate(E e) {}

}

demo

/**
 * 城市数据(AirCity)服务接口
 */
public interface AirCityService extends BaseService<AirCityDTO, AirCity, String, AirCityParamDTO> {
}

/**
 * 城市数据(AirCity)service实现类
 */
@Service
public class AirCityServiceImpl
        extends BaseServiceImpl<AirCityDTO, AirCity, String, AirCityParamDTO>
        implements AirCityService {

    @Autowired
    private AirCityRepository airCityRepository;

    @Override
    protected BaseRepository getBaseRepository() {
        return airCityRepository;
    }
}

Mapper   BaseRepository封装

import com.**.security.client.entity.User;
import org.mapstruct.Mapper;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * Description 持久接口
 * className BaseCommonRepository
 */
@Mapper
@Component
public interface BaseRepository<T, E, PK, P> {

    /**
     * Description 新增
     * @param e e
     * @return int
     */
    int insert(E e);

    /**
     * Description 更新
     * @param e e
     * @return int
     */
    int update(E e);

    /**
     * Description 根据ID单条逻辑删除
     * @param pkId 主键
     * @return int
     */
    int deleteById(PK pkId, User user);

    /**
     * Description 根据ids批量逻辑删除
     * @param ids ids
     * @return int
     */
    int batchDeleteByIDs(List<PK> ids, User user);

    /**
     * Description 批量更新列表对象,主键不能为空
     * @param records records
     * @return int
     */
    int batchDelete(List<E> records, User user);

    /**
     * Description 按列表对象批量更新,
     * @param records    需要更新的列表对象,主键不能为空
     * @param ignoreNull 是否忽略空值null(空字符串会更新),true互
     * @return int
     */
    int batchUpdate(List<E> records, boolean ignoreNull);


    /**
     * Description 批量插入
     * @param records records
     * @return int
     */
    int batchInsert(List<E> records);

    /**
     * Description 分页查询
     * @param p p
     * @return java.util.List<E>
     */
    List<T> findByPage(P p);

    /**
     * Description id查询
     * @param pkId id
     * @return java.util.List<E>
     */
    T findById(PK pkId);

}

demo

/**
 * 城市数据(AirCity)mapper
 *
 */
@Mapper
@Component
public interface AirCityRepository extends BaseRepository<AirCityDTO, AirCity, String, AirCityParamDTO> {

    @Override
    @InsertProvider(type = AirCitySqlProvider.class, method = "insert")
    int insert(AirCity record);

    @UpdateProvider(type = AirCitySqlProvider.class, method = "update")
    @Override
    int update(AirCity record);

    /**
     * Description 根据id逻辑删除
     * 
     * @param pkId
     *            pkId
     * @return user user
     */
    @Update({"UPDATE T_AIR_CITY", "SET DELETED_FLAG = '1',", "STATUS_EEMP = '3',", "UPDATE_TIME = now(),",
        "UPDATE_USER_ID = #{user.id,jdbcType=VARCHAR},", "UPDATE_USER_NAME = #{user.name,jdbcType=VARCHAR}",
        " WHERE PK_ID = #{pkId,jdbcType=VARCHAR}"})
    @Override
    int deleteById(@Param("pkId") String pkId, @Param("user") User user);

    /**
     * Description 批量逻辑删除
     * 
     * @param ids
     *            ids
     * @return int
     */
    @Update({"<script>", "UPDATE T_AIR_CITY", "SET DELETED_FLAG = '1', ", "STATUS_EEMP = '3',", "UPDATE_TIME = now(),",
        "UPDATE_USER_ID = #{user.id,jdbcType=VARCHAR},", "UPDATE_USER_NAME = #{user.name,jdbcType=VARCHAR} ",
        "<where> ", "PK_ID in", "<foreach collection='ids' item='id' open='(' separator=',' close=')'>",
        "#{id,jdbcType=VARCHAR}", "</foreach>", "</where>", "</script>"})
    @Override
    int batchDeleteByIDs(@Param("ids") List<String> ids, @Param("user") User user);

    /**
     * Description 批量删除
     * 
     * @param records
     *            records
     * @param user
     *            user
     * @return int
     */
    @Update({"<script>", "UPDATE T_AIR_CITY", "SET DELETED_FLAG = '1', ", "STATUS_EEMP = '2',", "UPDATE_TIME = now(),",
        "UPDATE_USER_ID = #{user.id,jdbcType=VARCHAR},", "UPDATE_USER_NAME = #{user.name,jdbcType=VARCHAR} ",
        "<where> ", " PK_ID in", "<foreach collection='records' item='record' open='(' separator=',' close=')'>",
        "#{record.id,jdbcType=VARCHAR}", "</foreach>", "</where>", "</script>"})
    @Override
    int batchDelete(@Param("records") List<AirCity> records, @Param("user") User user);

    /**
     * Description 批量更新
     * 
     * @param records
     *            需要更新的记录
     * @param ignoreNull
     *            是否忽略空值
     * @return int
     */
    @Update({"<script>", "<foreach collection='records' item='record' separator=';'>", "UPDATE T_AIR_CITY ", "SET ",
        "<if test='ignoreNull == true and  record.cityCode != null'>",
        " CITY_CODE = #{record.cityCode,jdbcType=VARCHAR},", "</if>", "<if test='ignoreNull == false'>",
        " CITY_CODE = #{record.cityCode,jdbcType=VARCHAR},", "</if>",
        "<if test='ignoreNull == true and  record.cityName != null'>",
        " CITY_NAME = #{record.cityName,jdbcType=VARCHAR},", "</if>", "<if test='ignoreNull == false'>",
        " CITY_NAME = #{record.cityName,jdbcType=VARCHAR},", "</if>",
        "<if test='ignoreNull == true and  record.lon != null'>", " LON = #{record.lon,jdbcType=NUMERIC},", "</if>",
        "<if test='ignoreNull == false'>", " LON = #{record.lon,jdbcType=NUMERIC},", "</if>",
        "<if test='ignoreNull == true and  record.lat != null'>", " LAT = #{record.lat,jdbcType=NUMERIC},", "</if>",
        "<if test='ignoreNull == false'>", " LAT = #{record.lat,jdbcType=NUMERIC},", "</if>",
        "<if test='ignoreNull == true and  record.type != null'>", " TYPE = #{record.type,jdbcType=VARCHAR},", "</if>",
        "<if test='ignoreNull == false'>", " TYPE = #{record.type,jdbcType=VARCHAR},", "</if>",
        "<if test='ignoreNull == true and  record.flagEemp != null'>",
        " FLAG_EEMP = #{record.flagEemp,jdbcType=VARCHAR},", "</if>", "<if test='ignoreNull == false'>",
        " FLAG_EEMP = #{record.flagEemp,jdbcType=VARCHAR},", "</if>",
        "<if test='ignoreNull == true and  record.statusEemp != null'>",
        " STATUS_EEMP = #{record.statusEemp,jdbcType=VARCHAR},", "</if>", "<if test='ignoreNull == false'>",
        " STATUS_EEMP = #{record.statusEemp,jdbcType=VARCHAR},", "</if>",
        "<if test='ignoreNull == true and  record.createUserId != null'>",
        " CREATE_USER_ID = #{record.createUserId,jdbcType=VARCHAR},", "</if>", "<if test='ignoreNull == false'>",
        " CREATE_USER_ID = #{record.createUserId,jdbcType=VARCHAR},", "</if>",
        "<if test='ignoreNull == true and  record.createUserName != null'>",
        " CREATE_USER_NAME = #{record.createUserName,jdbcType=VARCHAR},", "</if>", "<if test='ignoreNull == false'>",
        " CREATE_USER_NAME = #{record.createUserName,jdbcType=VARCHAR},", "</if>",
        "<if test='ignoreNull == true and  record.updateUserId != null'>",
        " UPDATE_USER_ID = #{record.updateUserId,jdbcType=VARCHAR},", "</if>", "<if test='ignoreNull == false'>",
        " UPDATE_USER_ID = #{record.updateUserId,jdbcType=VARCHAR},", "</if>",
        "<if test='ignoreNull == true and  record.updateUserName != null'>",
        " UPDATE_USER_NAME = #{record.updateUserName,jdbcType=VARCHAR},", "</if>", "<if test='ignoreNull == false'>",
        " UPDATE_USER_NAME = #{record.updateUserName,jdbcType=VARCHAR},", "</if>",
        "<if test='ignoreNull == true and  record.orgId != null'>", " ORG_ID = #{record.orgId,jdbcType=VARCHAR},",
        "</if>", "<if test='ignoreNull == false'>", " ORG_ID = #{record.orgId,jdbcType=VARCHAR},", "</if>",
        "<if test='ignoreNull == true and  record.orgName != null'>", " ORG_NAME = #{record.orgName,jdbcType=VARCHAR},",
        "</if>", "<if test='ignoreNull == false'>", " ORG_NAME = #{record.orgName,jdbcType=VARCHAR},", "</if>",
        "<if test='ignoreNull == true and  record.createTime != null'>",
        " CREATE_TIME = #{record.createTime,jdbcType=TIMESTAMP},", "</if>", "<if test='ignoreNull == false'>",
        " CREATE_TIME = #{record.createTime,jdbcType=TIMESTAMP},", "</if>",
        "<if test='ignoreNull == true and  record.updateTime != null'>",
        " UPDATE_TIME = #{record.updateTime,jdbcType=TIMESTAMP},", "</if>", "<if test='ignoreNull == false'>",
        " UPDATE_TIME = #{record.updateTime,jdbcType=TIMESTAMP},", "</if>",
        "<if test='ignoreNull == true and  record.parentCityCode != null'>",
        " PARENT_CITY_CODE = #{record.parentCityCode,jdbcType=VARCHAR},", "</if>", "<if test='ignoreNull == false'>",
        " PARENT_CITY_CODE = #{record.parentCityCode,jdbcType=VARCHAR},", "</if>",
        "<if test='ignoreNull == true and  record.parentCityName != null'>",
        " PARENT_CITY_NAME = #{record.parentCityName,jdbcType=VARCHAR},", "</if>", "<if test='ignoreNull == false'>",
        " PARENT_CITY_NAME = #{record.parentCityName,jdbcType=VARCHAR},", "</if>",
        "<if test='ignoreNull == true and  record.shortAreaName != null'>",
        " SHORT_AREA_NAME = #{record.shortAreaName,jdbcType=VARCHAR},", "</if>", "<if test='ignoreNull == false'>",
        " SHORT_AREA_NAME = #{record.shortAreaName,jdbcType=VARCHAR},", "</if>",
        "<if test='ignoreNull == true and  record.deletedFlag != null'>",
        " DELETED_FLAG = #{record.deletedFlag,jdbcType=VARCHAR}", "</if>", "<if test='ignoreNull == false'>",
        " DELETED_FLAG = #{record.deletedFlag,jdbcType=VARCHAR}", "</if>", "<where>",
        " PK_ID = #{record.pkId,jdbcType=VARCHAR}", "</where>", "</foreach>", "</script>"})
    @Override
    int batchUpdate(@Param("records") List<AirCity> records, @Param("ignoreNull") boolean ignoreNull);

    /**
     * Description 批量插入
     * 
     * @param records
     *            需要插入的记录
     * @return int
     */
    @Insert({"<script>", "insert into T_AIR_CITY (", "PK_ID,", "CITY_CODE,", "CITY_NAME,", "LON,", "LAT,", "TYPE,",
        "FLAG_EEMP,", "STATUS_EEMP,", "CREATE_USER_ID,", "CREATE_USER_NAME,", "UPDATE_USER_ID,", "UPDATE_USER_NAME,",
        "ORG_ID,", "ORG_NAME,", "CREATE_TIME,", "UPDATE_TIME,", "PARENT_CITY_CODE,", "PARENT_CITY_NAME,",
        "SHORT_AREA_NAME,", "DELETED_FLAG", ")", "values ",
        "<foreach collection='records' item='record' separator=','>",
        "<trim prefix='(' suffix=')' suffixOverrides=','>", "#{record.pkId,jdbcType=VARCHAR},",
        "#{record.cityCode,jdbcType=VARCHAR},", "#{record.cityName,jdbcType=VARCHAR},",
        "#{record.lon,jdbcType=NUMERIC},", "#{record.lat,jdbcType=NUMERIC},", "#{record.type,jdbcType=VARCHAR},",
        "#{record.flagEemp,jdbcType=VARCHAR},", "#{record.statusEemp,jdbcType=VARCHAR},",
        "#{record.createUserId,jdbcType=VARCHAR},", "#{record.createUserName,jdbcType=VARCHAR},",
        "#{record.updateUserId,jdbcType=VARCHAR},", "#{record.updateUserName,jdbcType=VARCHAR},",
        "#{record.orgId,jdbcType=VARCHAR},", "#{record.orgName,jdbcType=VARCHAR},",
        "#{record.createTime,jdbcType=TIMESTAMP},", "#{record.updateTime,jdbcType=TIMESTAMP},",
        "#{record.parentCityCode,jdbcType=VARCHAR},", "#{record.parentCityName,jdbcType=VARCHAR},",
        "#{record.shortAreaName,jdbcType=VARCHAR},", "#{record.deletedFlag,jdbcType=VARCHAR}", "</trim>", "</foreach>",
        "</script>"})
    @Override
    int batchInsert(@Param("records") List<AirCity> records);

    @Override
    @Cacheable(value = "airCityList", key = "targetClass + methodName +#p0")
    List<AirCityDTO> findByPage(AirCityParamDTO paramDTO);

    /**
     * Description 按主键查询
     * 
     * @param pkId
     *            pkId
     * @return AirCityDTO
     */
    @Select({"select", "PK_ID,", "CITY_CODE,", "CITY_NAME,", "LON,", "LAT,", "TYPE,", "FLAG_EEMP,", "STATUS_EEMP,",
        "CREATE_USER_ID,", "CREATE_USER_NAME,", "UPDATE_USER_ID,", "UPDATE_USER_NAME,", "ORG_ID,", "ORG_NAME,",
        "CREATE_TIME,", "UPDATE_TIME,", "PARENT_CITY_CODE,", "PARENT_CITY_NAME,", "SHORT_AREA_NAME,", "DELETED_FLAG",
        "from T_AIR_CITY", "where DELETED_FLAG ='0' and PK_ID = #{pkId,jdbcType=VARCHAR}"})
    @Results({@Result(column = "PK_ID", property = "pkId", jdbcType = JdbcType.VARCHAR, id = true),
        @Result(column = "CITY_CODE", property = "cityCode", jdbcType = JdbcType.VARCHAR),
        @Result(column = "CITY_NAME", property = "cityName", jdbcType = JdbcType.VARCHAR),
        @Result(column = "LON", property = "lon", jdbcType = JdbcType.NUMERIC),
        @Result(column = "LAT", property = "lat", jdbcType = JdbcType.NUMERIC),
        @Result(column = "TYPE", property = "type", jdbcType = JdbcType.VARCHAR),
        @Result(column = "FLAG_EEMP", property = "flagEemp", jdbcType = JdbcType.VARCHAR),
        @Result(column = "STATUS_EEMP", property = "statusEemp", jdbcType = JdbcType.VARCHAR),
        @Result(column = "CREATE_USER_ID", property = "createUserId", jdbcType = JdbcType.VARCHAR),
        @Result(column = "CREATE_USER_NAME", property = "createUserName", jdbcType = JdbcType.VARCHAR),
        @Result(column = "UPDATE_USER_ID", property = "updateUserId", jdbcType = JdbcType.VARCHAR),
        @Result(column = "UPDATE_USER_NAME", property = "updateUserName", jdbcType = JdbcType.VARCHAR),
        @Result(column = "ORG_ID", property = "orgId", jdbcType = JdbcType.VARCHAR),
        @Result(column = "ORG_NAME", property = "orgName", jdbcType = JdbcType.VARCHAR),
        @Result(column = "CREATE_TIME", property = "createTime", jdbcType = JdbcType.TIMESTAMP),
        @Result(column = "UPDATE_TIME", property = "updateTime", jdbcType = JdbcType.TIMESTAMP),
        @Result(column = "PARENT_CITY_CODE", property = "parentCityCode", jdbcType = JdbcType.VARCHAR),
        @Result(column = "PARENT_CITY_NAME", property = "parentCityName", jdbcType = JdbcType.VARCHAR),
        @Result(column = "SHORT_AREA_NAME", property = "shortAreaName", jdbcType = JdbcType.VARCHAR),
        @Result(column = "DELETED_FLAG", property = "deletedFlag", jdbcType = JdbcType.VARCHAR)})
    @Override
    AirCityDTO findById(String pkId);
}


import org.apache.ibatis.jdbc.SQL;
import java.util.Optional;

/**
 * 城市数据(AirCity)sqlProvider
 */
public class AirCitySqlProvider {

    /**
     * Description 插入
     * 
     * @param record
     *            record
     * @return java.lang.String
     */
    public String insert(AirCity record) {
        SQL sql = new SQL();
        sql.INSERT_INTO("T_AIR_CITY");
        sql.VALUES("PK_ID", "#{pkId,jdbcType=VARCHAR}");
        Optional.ofNullable(record.getCityCode())
            .ifPresent(s -> sql.VALUES("CITY_CODE", "#{cityCode,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getCityName())
            .ifPresent(s -> sql.VALUES("CITY_NAME", "#{cityName,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getLon()).ifPresent(s -> sql.VALUES("LON", "#{lon,jdbcType=NUMERIC}"));
        Optional.ofNullable(record.getLat()).ifPresent(s -> sql.VALUES("LAT", "#{lat,jdbcType=NUMERIC}"));
        Optional.ofNullable(record.getType()).ifPresent(s -> sql.VALUES("TYPE", "#{type,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getFlagEemp())
            .ifPresent(s -> sql.VALUES("FLAG_EEMP", "#{flagEemp,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getStatusEemp())
            .ifPresent(s -> sql.VALUES("STATUS_EEMP", "#{statusEemp,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getCreateUserId())
            .ifPresent(s -> sql.VALUES("CREATE_USER_ID", "#{createUserId,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getCreateUserName())
            .ifPresent(s -> sql.VALUES("CREATE_USER_NAME", "#{createUserName,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getUpdateUserId())
            .ifPresent(s -> sql.VALUES("UPDATE_USER_ID", "#{updateUserId,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getUpdateUserName())
            .ifPresent(s -> sql.VALUES("UPDATE_USER_NAME", "#{updateUserName,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getOrgId()).ifPresent(s -> sql.VALUES("ORG_ID", "#{orgId,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getOrgName()).ifPresent(s -> sql.VALUES("ORG_NAME", "#{orgName,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getCreateTime())
            .ifPresent(s -> sql.VALUES("CREATE_TIME", "#{createTime,jdbcType=TIMESTAMP}"));
        Optional.ofNullable(record.getUpdateTime())
            .ifPresent(s -> sql.VALUES("UPDATE_TIME", "#{updateTime,jdbcType=TIMESTAMP}"));
        Optional.ofNullable(record.getParentCityCode())
            .ifPresent(s -> sql.VALUES("PARENT_CITY_CODE", "#{parentCityCode,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getParentCityName())
            .ifPresent(s -> sql.VALUES("PARENT_CITY_NAME", "#{parentCityName,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getShortAreaName())
            .ifPresent(s -> sql.VALUES("SHORT_AREA_NAME", "#{shortAreaName,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getDeletedFlag())
            .ifPresent(s -> sql.VALUES("DELETED_FLAG", "#{deletedFlag,jdbcType=VARCHAR}"));
        return sql.toString();
    }

    /**
     * Description 更新
     * 
     * @param record
     *            record
     * @return java.lang.String
     */
    public String update(AirCity record) {
        SQL sql = new SQL();
        sql.UPDATE("T_AIR_CITY");
        Optional.ofNullable(record.getCityCode()).ifPresent(s -> sql.SET("CITY_CODE = #{cityCode,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getCityName()).ifPresent(s -> sql.SET("CITY_NAME = #{cityName,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getLon()).ifPresent(s -> sql.SET("LON = #{lon,jdbcType=NUMERIC}"));
        Optional.ofNullable(record.getLat()).ifPresent(s -> sql.SET("LAT = #{lat,jdbcType=NUMERIC}"));
        Optional.ofNullable(record.getType()).ifPresent(s -> sql.SET("TYPE = #{type,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getFlagEemp()).ifPresent(s -> sql.SET("FLAG_EEMP = #{flagEemp,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getStatusEemp())
            .ifPresent(s -> sql.SET("STATUS_EEMP = #{statusEemp,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getCreateUserId())
            .ifPresent(s -> sql.SET("CREATE_USER_ID = #{createUserId,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getCreateUserName())
            .ifPresent(s -> sql.SET("CREATE_USER_NAME = #{createUserName,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getUpdateUserId())
            .ifPresent(s -> sql.SET("UPDATE_USER_ID = #{updateUserId,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getUpdateUserName())
            .ifPresent(s -> sql.SET("UPDATE_USER_NAME = #{updateUserName,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getOrgId()).ifPresent(s -> sql.SET("ORG_ID = #{orgId,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getOrgName()).ifPresent(s -> sql.SET("ORG_NAME = #{orgName,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getCreateTime())
            .ifPresent(s -> sql.SET("CREATE_TIME = #{createTime,jdbcType=TIMESTAMP}"));
        Optional.ofNullable(record.getUpdateTime())
            .ifPresent(s -> sql.SET("UPDATE_TIME = #{updateTime,jdbcType=TIMESTAMP}"));
        Optional.ofNullable(record.getParentCityCode())
            .ifPresent(s -> sql.SET("PARENT_CITY_CODE = #{parentCityCode,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getParentCityName())
            .ifPresent(s -> sql.SET("PARENT_CITY_NAME = #{parentCityName,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getShortAreaName())
            .ifPresent(s -> sql.SET("SHORT_AREA_NAME = #{shortAreaName,jdbcType=VARCHAR}"));
        Optional.ofNullable(record.getDeletedFlag())
            .ifPresent(s -> sql.SET("DELETED_FLAG = #{deletedFlag,jdbcType=VARCHAR}"));
        sql.WHERE("PK_ID = #{pkId,jdbcType=VARCHAR}");
        return sql.toString();
    }

}
BaseDTO BasePkIdDTO
import java.util.Date;

import org.springframework.format.annotation.DateTimeFormat;

import com.fasterxml.jackson.annotation.JsonFormat;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

/**
 * Description 基础DTO
 * className BaseDTO
 */
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class BaseDTO extends BasePkIdDTO {

    /**
     * 业务数据的创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "业务数据的创建时间", hidden = true)
    private Date createTime;

    /**
     * 业务数据的更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "业务数据的更新时间", hidden = true)
    private Date updateTime;

    /**
     * 标识位 (0’|‘1’)
     */
    @ApiModelProperty(value = "标记位", hidden = true)
    private String flagEemp;

    /**
     * 操作状态(1’|‘2’)  1,新增数据;2,修改数据.3、删除数据
     */

    @ApiModelProperty(value = "操作状态(1.新增数据; 2.修改数据; 3.删除数据; )", hidden = true)
    private String statusEemp;

    /**
     * 数据创建者ID
     */
    @ApiModelProperty(value = "数据创建者 ID", hidden = true)
    private String createUserId;
    /**
     * 数据创建者名称
     */
    @ApiModelProperty(value = "数据创建者名称", hidden = true)
    private String createUserName;

    /**
     * 数据更新者ID
     */
    @ApiModelProperty(value = "数据更新者 ID", hidden = true)
    private String updateUserId;

    /**
     * 数据更新者名称
     */
    @ApiModelProperty(value = "数据更新者名称", hidden = true)
    private String updateUserName;

    /**
     * 所属机构ID
     */
    @ApiModelProperty(value = "所属机构 ID", hidden = true)
    private String orgId;

    /**
     * 所属机构名称
     */
    @ApiModelProperty(value = "所属机构名称", hidden = true)
    private String orgName;

    /**
     * 是否删除标记0未删除1已删除
     */
    @ApiModelProperty(value = "是否删除标记", hidden = true)
    private String deletedFlag;
}

/**
 * Description 基础主键DTO
 */
@Data
@MappedSuperclass
public abstract class BasePkIdDTO {

    @ApiModelProperty(value = "主键(更新时主键不能为空)", notes = "更新时主键不能为空")
    @NotBlank(message = "主键参数不能为空", groups = {UpdateGroup.class})
    @Length(max = 32, message = "主键ID长度超出限制32", groups = {UpdateGroup.class})
    private String pkId;

    public void setId(String pkId) {
        this.pkId = pkId;
    }

    public String getId() {
        return this.pkId;
    }

    public String getPkId() {
        return this.pkId;
    }
}

demo

/**
 * 城市数据(AirCityDTO)实体类
 *
 */
@Data
@EqualsAndHashCode
@ApiModel(description = "AirCityDTO")
public class AirCityDTO extends BaseDTO implements Serializable {

    private static final long serialVersionUID = -50137668547611650L;

    /**
     * 城市编码
     */
    @ApiModelProperty(value = "城市编码")
    @Trimmed
    private String cityCode;

    /**
     * 城市名称
     */
    @ApiModelProperty(value = "城市名称")
    @Trimmed
    private String cityName;

    /**
     * 经度
     */
    @ApiModelProperty(value = "经度")
    @Trimmed
    private Double lon;

    /**
     * 纬度
     */
    @ApiModelProperty(value = "纬度")
    @Trimmed
    private Double lat;

    /**
     * 城市类型(0:甘肃14个市州、1:338城市、2:169城市、3:74城市、4:2+26城市、5:甘肃县区数据、6:全国地级城市),暂预留
     */
    @ApiModelProperty(value = "城市类型(0:甘肃14个市州、1:338城市、2:169城市、3:74城市、4:2+26城市、5:甘肃县区数据、6:全国地级城市),暂预留")
    @Trimmed
    private String type;

    /**
     * 父级行政区划
     */
    @ApiModelProperty(value = "父级行政区划")
    @Trimmed
    private String parentCityCode;

    /**
     * 父级行政区划名称
     */
    @ApiModelProperty(value = "父级行政区划名称")
    @Trimmed
    private String parentCityName;

    /**
     * 行政区划简写
     */
    @ApiModelProperty(value = "行政区划简写")
    @Trimmed
    private String shortAreaName;
}

/**
 * 城市数据(AirCity)实体类
 *
 */
@Data
@Table(name = "T_AIR_CITY")
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class AirCity extends BaseEntity {

    private static final long serialVersionUID = -42282251676658634L;

        /**
    * 城市编码
    */
    @Column(name = "CITY_CODE")
        private String cityCode;

        /**
    * 城市名称
    */
    @Column(name = "CITY_NAME")
        private String cityName;

        /**
    * 经度
    */
    @Column(name = "LON")
        private Double lon;

        /**
    * 纬度
    */
    @Column(name = "LAT")
        private Double lat;

        /**
    * 城市类型(0:甘肃14个市州、1:338城市、2:169城市、3:74城市、4:2+26城市、5:甘肃县区数据、6:全国地级城市),暂预留
    */
    @Column(name = "TYPE")
        private String type;

        /**
    * 父级行政区划
    */
    @Column(name = "PARENT_CITY_CODE")
        private String parentCityCode;

        /**
    * 父级行政区划名称
    */
    @Column(name = "PARENT_CITY_NAME")
        private String parentCityName;

        /**
    * 行政区划简写
    */
    @Column(name = "SHORT_AREA_NAME")
        private String shortAreaName;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是SpringBoot利用security、jwt、redis、MySQL、mybatis分层controllerservicemapper、util实现用户登录的代码: ### UserController.java ```java @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @PostMapping("/register") public Result register(@RequestBody User user) { userService.register(user); return Result.success(); } @PostMapping("/login") public Result login(@RequestBody User user) { String token = userService.login(user.getUsername(), user.getPassword()); return Result.success(token); } } ``` ### UserServiceImpl.java ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Autowired private RedisTemplate<String, Object> redisTemplate; private static final String REDIS_USER_PREFIX = "user:"; @Override public void register(User user) { userMapper.insert(user); } @Override public String login(String username, String password) { User user = userMapper.selectByUsername(username); if (user == null || !user.getPassword().equals(password)) { throw new BusinessException(ResultCode.USER_LOGIN_ERROR); } String token = JwtTokenUtil.generateToken(user.getId()); redisTemplate.opsForValue().set(REDIS_USER_PREFIX + token, user, JwtTokenUtil.EXPIRATION_TIME, TimeUnit.MILLISECONDS); return token; } @Override public User getUserByToken(String token) { return (User) redisTemplate.opsForValue().get(REDIS_USER_PREFIX + token); } } ``` ### UserMapper.java ```java @Mapper public interface UserMapper { void insert(User user); User selectByUsername(String username); } ``` ### JwtTokenUtil.java ```java public class JwtTokenUtil { public static final long EXPIRATION_TIME = 86400000L; private static final String SECRET = "mysecret"; public static String generateToken(int userId) { Date now = new Date(); Date expirationTime = new Date(now.getTime() + EXPIRATION_TIME); return Jwts.builder() .setSubject(String.valueOf(userId)) .setIssuedAt(now) .setExpiration(expirationTime) .signWith(SignatureAlgorithm.HS512, SECRET) .compact(); } public static boolean validateToken(String token) { try { Jwts.parser().setSigningKey(SECRET).parseClaimsJws(token); return true; } catch (Exception e) { return false; } } public static int getUserIdFromToken(String token) { Claims claims = Jwts.parser().setSigningKey(SECRET).parseClaimsJws(token).getBody(); return Integer.parseInt(claims.getSubject()); } } ``` ### WebSecurityConfig.java ```java @Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private UserDetailsService userDetailsService; @Autowired private JwtAuthenticationFilter jwtAuthenticationFilter; @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); } @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() .antMatchers("/user/register", "/user/login").permitAll() .anyRequest().authenticated() .and() .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } } ``` ### JwtAuthenticationFilter.java ```java public class JwtAuthenticationFilter extends OncePerRequestFilter { @Autowired private UserService userService; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String token = request.getHeader("Authorization"); if (StringUtils.hasText(token) && JwtTokenUtil.validateToken(token)) { User user = userService.getUserByToken(token); if (user != null) { SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(user, null, Collections.emptyList())); } } filterChain.doFilter(request, response); } } ``` ### UserDetailsServiceImple.java ```java @Service public class UserDetailsServiceImpl implements UserDetailsService { @Autowired private UserMapper userMapper; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user = userMapper.selectByUsername(username); if (user == null) { throw new UsernameNotFoundException("用户名不存在"); } return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), Collections.emptyList()); } } ``` ### Result.java ```java public class Result { private int code; private String message; private Object data; public static Result success() { return new Result(ResultCode.SUCCESS); } public static Result success(Object data) { return new Result(ResultCode.SUCCESS, data); } public static Result failure(ResultCode resultCode) { return new Result(resultCode); } public static Result failure(ResultCode resultCode, Object data) { return new Result(resultCode, data); } private Result(ResultCode resultCode) { this.code = resultCode.getCode(); this.message = resultCode.getMessage(); } private Result(ResultCode resultCode, Object data) { this.code = resultCode.getCode(); this.message = resultCode.getMessage(); this.data = data; } // getter and setter } ``` ### BusinessException.java ```java public class BusinessException extends RuntimeException { private ResultCode resultCode; public BusinessException(ResultCode resultCode) { super(resultCode.getMessage()); this.resultCode = resultCode; } public ResultCode getResultCode() { return resultCode; } } ``` ### ResultCode.java ```java public enum ResultCode { SUCCESS(200, "操作成功"), USER_LOGIN_ERROR(401, "用户名或密码错误"), UNAUTHORIZED(401, "未授权访问"), FORBIDDEN(403, "禁止访问"), NOT_FOUND(404, "资源不存在"), INTERNAL_SERVER_ERROR(500, "服务器内部错误"); private int code; private String message; ResultCode(int code, String message) { this.code = code; this.message = message; } // getter } ``` 以上是代码,下面是各个类的分析: - UserController:用户控制器,处理用户注册和登录请求。 - UserServiceImpl:用户服务实现类,处理用户注册、登录和获取用户信息。 - UserMapper:用户数据访问接口,提供插入用户和根据用户名查询用户的方法。 - JwtTokenUtil:JWT令牌工具类,提供生成令牌、验证令牌和从令牌中获取用户ID的方法。 - WebSecurityConfig:Web安全配置类,配置用户认证和授权相关信息。 - JwtAuthenticationFilter:JWT认证过滤器,用于从HTTP请求中提取JWT令牌,并进行认证和授权。 - UserDetailsServiceImpl:用户详情服务实现类,用于从数据库中查询用户信息,并返回一个UserDetails对象。 - Result:结果类,用于封装请求的处理结果和响应给客户端。 - BusinessException:业务异常类,用于封装业务错误信息。 - ResultCode:结果代码枚举类,用于定义响应状态码和对应的消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值