- 项目中Mapper方法必须功能单一,参数明确,拒绝两种以上的持久逻辑使用同一个Mapper方法
项目中每层都是通过接口调用Controller->Service->Mapper
<!---->
- 明确类定义:明确哪些是重用类,哪些是需要新增的类
- 明确主键规则:确认操作表的ID生成规则,是Mycat主键,还是Zk主键
- Mapper实现:查、改、删时注意是否使用mycat注解确认DN,插入时是否要插入主键id
- Service实现:可用通过时序图帮助我们梳理实现逻辑
- Controller实现:简单的Service层调用
- 单元测试或接口测试
js减少join,单表查询比关联查询速度要快。某个访问频繁的字段可以冗余存放在两张表里,不用关联了。
maven ---直接放到f盘
API文档 ,编写由后端编写,包括:接口名称,接口描述,请求方式、请求路径、参数、返回值、返回状态
PageRequestDto通用分页.
## 对象类型
PO 和数据库表一对一,与数据库有关
VO 用来显示数据,与数据库无关
DTO 数据传输对象,可以用来接收数据,也可以用来返回数据,与数据库无关
adchannel比如数据显示用,传给前端时不显示身份证字段,ChannelDto可以从前端返回的数据的基础上增加几个数据
adchannel只能admin用,不能其他微服务用,则用ChannelDto都依赖于model可以远程调用
分页
PageResult<T> extends ResponseResult ,extend继承了父类就拥有ResponseResult的参数
分页返回对象是啥泛型就是啥 使用dto对象--前端请求参数,服务端返回给前端的数据也需要转成Dto在返回
1在admin中新建controller.v1文件
2common.dtos.三个类 .PageRequestDto PageResult ResponseResult pagerequestdeto
3leadnews_admin pom.xml ### application.yml
1 @RestController
@RequestMapping("/api/v1/channel")
public class ChannelController {
@Autowired
private AdChannelService channelService;
public PageResult<AdChannel> findByPage(@RequestBody ChannelDto dto){
return channelService.findByPage(dto);--把dto传进来
直接返回pageresult
}
}
2 ChannelDto这个dto既用来接收前端传递的参数,因为需要分页查询,要继承PageRequestDto
持久层 在com.heima.admin.mapper包下定义接口
public interface AdChannelMapper extends BaseMapper<AdChannel> {
}
3在com.heima.admin.service包下定义业务层接口
public interface AdChannelService extends IService<AdChannel> {
根据名称分页查询频道列表 PageResult<ChannelDto> findByPage(ChannelDto dto);
}
4实现类com.heima.admin.service.impl.AdChannelServiceImpl
分页查询 page分页条件 queryWrapper查询条件
IPage<AdChannel> channelIPage分页结果= = page(ipage, queryWrapper);
// 构造分页条件 查哪张表就写哪个实体类<AdChannel>
当前页码channelDto.getPage(),显示条数channelDto.getSize()
IPage<AdChannel> ipage = new Page<>(dto.getPage(),dto.getSize());
非必传 设置查询构造查询条件<AdChannel>泛型--AdChannel::getName
LambdaQueryWrapper<AdChannel> queryWrapper = new LambdaQueryWrapper();
StringUtils是common langs的包
如果dto.getName()不为空则查AdChannel::getNam
queryWrapper.like(StringUtils.isNotBlank(dto.getName()),AdChannel::getName,dto.getName());
根据名字查不一定能查到 如果没有返回值 当前页码channelDto.getPage(),显示条数channelDto.getSize()
getRecords()分页结果
if(CollectionUtils.isEmpty(channelIPage.getRecords())){
throw new LeadException(AppHttpCodeEnum.CHANNEL_NOT_FOUND);
}
否则返回PageResult channelIPage Total Records从分页结果中拿
return new PageResult<>(dto.getPage(),
dto.getSize(),
channelIPage.getTotal(),
channelIPage.getRecords());
@Service
public class AdChannelServiceImpl extends ServiceImpl<AdChannelMapper, AdChannel> implements AdChannelService {
* 分页查询频道 @return
@Override
public PageResult<AdChannel> findByPage(ChannelDto dto) {
IPage<AdChannel> ipage = new Page<>(dto.getPage(),dto.getSize());
LambdaQueryWrapper<AdChannel> queryWrapper = new LambdaQueryWrapper(); queryWrapper.like(StringUtils.isNotBlank(dto.getName()),AdChannel::getName,dto.getName());
IPage<AdChannel> channelIPage = = page(ipage, queryWrapper);
if(CollectionUtils.isEmpty(channelIPage.getRecords())){
throw new LeadException(AppHttpCodeEnum.CHANNEL_NOT_FOUND);
}
return new PageResult<>(dto.getPage(),
dto.getSize(),
channelIPage.getTotal(),
channelIPage.getRecords());
}
}