package com.itheima.core.controller;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.itheima.common.dto.PageRequestDto;
import com.itheima.common.enums.HttpCodeEnum;
import com.itheima.common.vo.PageResultVo;
import com.itheima.common.vo.ResultVo;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import java.beans.PropertyDescriptor;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
public abstract class AbstractCoreController<T> implements ICoreController<T> {
/**
* 获取日志对象
*/
//有static修饰时,变量属于类变量,可以调用方法,不属于某个实例
//没有static修饰时,变量叫成员变量,只属于某个对象
private static final Logger logger = LoggerFactory.getLogger(AbstractCoreController.class);
//定义调用方的service
protected IService<T> coreService;
public AbstractCoreController(IService<T> coreService) {
this.coreService = coreService;
}
/**
* 通过id删除
*
* @param id
* @return
*/
@DeleteMapping("/del/{id}")
@ApiOperation("通过id删除")
@Override
public ResultVo deleteById(@PathVariable Serializable id) {
boolean result = coreService.removeById(id);
if(result){
return ResultVo.ok();
}
return ResultVo.error();
}
/**
* 新增数据
*
* @param record
* @return
*/
@PostMapping("/save")
@ApiOperation("新增")
@Override
public ResultVo<T> save(@RequestBody T record) {
if(coreService.save(record)){
return ResultVo.ok();
}
return ResultVo.error();
}
/**
* 分页查询
*
* @param dto
* @return
*/
@PostMapping("/list")
@ApiOperation("分页查询")
@Override
public PageResultVo findByPage(@RequestBody PageRequestDto dto) {
IPage<T> pageParams = new Page<>(dto.getPage(), dto.getSize());
IPage<T> pageInfo = coreService.page(pageParams);
return PageResultVo.pageResult(dto.getPage(),dto.getSize(),
pageInfo.getTotal(),pageInfo.getRecords());
}
/**
* 通过id查询
*
* @param id
* @return
*/
@GetMapping("/{id}")
@ApiOperation("通过id查询")
@Override
public ResultVo<T> findById(@PathVariable Serializable id) {
T t = coreService.getById(id);
if(t != null){
return ResultVo.ok(t);
}
return ResultVo.error();
}
/**
* 查询所有
*
* @return
*/
@GetMapping("/list")
@ApiOperation("查询所有")
@Override
public ResultVo<List<T>> findAll() {
List<T> list = coreService.list();
if(list.size() > 0){
return ResultVo.ok(list);
}
return ResultVo.error(HttpCodeEnum.DATA_NOT_EXIST);
}
/**
* 通过条件查询
*
* @param record
* @return
*/
@GetMapping("/listCondition")
@ApiOperation("根据条件查询")
@Override
public ResultVo<List<T>> findByCondition(T record) {
QueryWrapper<T> queryWrapper = getWrapper(record, false);
List<T> list = coreService.list(queryWrapper);
return ResultVo.ok(list);
}
/**
* 根据id更新
*
* @param record
* @return
*/
@PostMapping("/update")
@ApiOperation("根据id更新")
@Override
public ResultVo updateById(@RequestBody T record) {
boolean result = coreService.updateById(record);
if(result){
return ResultVo.ok();
}
return ResultVo.error();
}
public QueryWrapper<T> getWrapper(T condition, boolean stringAsLike) {
//创建一个条件构造器
QueryWrapper queryWrapper = new QueryWrapper();
//判断条件是否为空
if (condition == null) {
return queryWrapper;
}
//获取该条件的字节码对象
Class<?> aClass = condition.getClass();
//得到该条件对象中的所有字段
Field[] fields = aClass.getDeclaredFields();
try {
//遍历判断字段
for (Field field : fields) {
//判断,遇到id注解时,直接跳过
if (field.isAnnotationPresent(TableId.class) ||
field.getName().equals("serialVersionUID")) {
continue;
}
//属性描述器
PropertyDescriptor propertyDescriptor = BeanUtils.getPropertyDescriptor(aClass, field.getName());
//先获取读方法的方法对象,再获取值
Object value = propertyDescriptor.getReadMethod().invoke(condition);
TableField annotation = field.getAnnotation(TableField.class);
//判断传递值为空不做处理
if(value != null){
//如果是字符串,则使用like模糊查询
if("java.lang.String".equals(value.getClass().getName()) && stringAsLike){
queryWrapper.like(annotation.value(),value);
}else{
//不是则使用精确查询
queryWrapper.eq(annotation.value(),value);
}
}
}
} catch (IllegalAccessException | InvocationTargetException e) {
logger.error("属性读取失败",e);
}
return queryWrapper;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Java开发的一款类似于今日头条的系统源码.zip
共150个文件
java:111个
xml:30个
yml:6个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 12 浏览量
2022-06-23
22:32:15
上传
评论
收藏 123KB ZIP 举报
温馨提示
Java开发的一款类似于今日头条的系统源码.zip
资源推荐
资源详情
资源评论
收起资源包目录
Java开发的一款类似于今日头条的系统源码.zip (150个子文件)
spring.factories 115B
.gitignore 629B
AbstractCoreController.java 6KB
BusinessConstants.java 4KB
AppJwtUtil.java 4KB
AdChannelServiceImpl.java 3KB
MyKnife4jAutoConfiguration.java 3KB
AdArticleStatistics.java 2KB
AdChannelController.java 2KB
AdUserServiceImpl.java 2KB
AdminAuthorizeFilter.java 2KB
AdUser.java 2KB
ResultVo.java 2KB
SwaggerConfiguration.java 2KB
GlobalExceptionHandler.java 2KB
AdUserLogin.java 2KB
AdUserOpertion.java 2KB
AdUserEquipment.java 1KB
AdRecommendStrategy.java 1KB
AdVistorStatistics.java 1KB
LoginController.java 1KB
HttpCodeEnum.java 1KB
AdRoleAuth.java 1KB
AdFunction.java 1KB
AdRole.java 1KB
AdMenu.java 1KB
AdStrategyGroup.java 1KB
AdChannelLabel.java 1KB
AdChannel.java 1KB
PageResultVo.java 1KB
AdRecommendStrategyController.java 1KB
AdArticleStatisticsController.java 1KB
AdUserRole.java 1KB
AdVistorStatisticsController.java 1KB
AdLabel.java 1KB
AdStrategyGroupController.java 1KB
AdUserEquipmentController.java 1024B
AdUserOpertionController.java 1022B
AdChannelLabelController.java 1004B
AdUserLoginController.java 980B
RequestContextUtil.java 962B
AdUserRoleController.java 954B
AdFunctionController.java 948B
AdRoleAuthController.java 948B
LeadNewsException.java 927B
SystemConstants.java 906B
AdUserController.java 898B
AdLabelController.java 894B
AdMenuController.java 892B
AdRoleController.java 880B
MetaFieldHandler.java 834B
AdSensitiveController.java 822B
AdminApplication.java 794B
AdSensitive.java 777B
MyKnife4jProperties.java 716B
PageRequestDto.java 695B
AdVistorStatisticsServiceImpl.java 646B
AdArticleStatisticsServiceImpl.java 617B
AdRecommendStrategyServiceImpl.java 617B
AdStrategyGroupServiceImpl.java 595B
AdUserEquipmentServiceImpl.java 592B
AdUserOpertionServiceImpl.java 591B
AdChannelLabelServiceImpl.java 582B
AdChannelService.java 576B
AdUserLoginServiceImpl.java 570B
AdUserRoleServiceImpl.java 557B
AdRoleAuthServiceImpl.java 554B
AdFunctionServiceImpl.java 554B
AdLabelServiceImpl.java 527B
AdMenuServiceImpl.java 526B
ChannelPageRequestDto.java 522B
AdRoleServiceImpl.java 520B
ISelectController.java 499B
AdSensitiveServiceImpl.java 434B
GatewayAdminApplication.java 421B
AdArticleStatisticsMapper.java 413B
AdRecommendStrategyMapper.java 413B
AdVistorStatisticsMapper.java 410B
AdStrategyGroupMapper.java 407B
AdUserOpertionMapper.java 407B
AdUserEquipmentMapper.java 404B
AdUserLoginMapper.java 398B
AdChannelLabelMapper.java 398B
AdUserRoleMapper.java 389B
AdRoleAuthMapper.java 386B
AdFunctionMapper.java 386B
AdMenuMapper.java 374B
AdLabelMapper.java 371B
AdRoleMapper.java 368B
AdRecommendStrategyService.java 355B
AdArticleStatisticsService.java 355B
AdVistorStatisticsService.java 352B
AdStrategyGroupService.java 349B
AdUserOpertionService.java 349B
AdUserEquipmentService.java 346B
AdChannelLabelService.java 340B
AdUserLoginService.java 340B
AdUserRoleService.java 331B
AdRoleAuthService.java 328B
AdFunctionService.java 328B
共 150 条
- 1
- 2
资源评论
「已注销」
- 粉丝: 795
- 资源: 3612
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功