遇上一个某翼平台代码,然后偷懒改造一下,结合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;
}