Efeito: consultar a tabela de usuários através das informações na caixa de entrada, projetar a consulta conjunta do departamento e da tabela de usuários
Logíca de negócios
De acordo com as informações inseridas em várias caixas de entrada diferentes na página, os dados correspondentes são encontrados na tabela de dados, semelhante à consulta por condições
Código do projeto
1 Código original do projeto
@GetMapping("/findDoctorList")
public Result findDoctorList(@RequestParam(required = true,defaultValue = "1")Integer current,
@RequestParam(required = true,defaultValue = "6")Integer size){
//对 用户进行分页,泛型注入的为用户类
Page<Doctor>page=new Page<>(current,size);
//此种查询不限查询条件,即全部查询
Page<Doctor> doctorPage = doctorService.page(page);
long total = doctorPage.getTotal();
List<Doctor> records = doctorPage.getRecords();
return Result.ok().data("total",total).data("records",records);
}
Efeito de teste (descubra todos os dados)
2 Use o método de consulta condicional que vem com o Mybatisplus para consultar, aqui está um exemplo de um determinado atributo
@GetMapping("/findDList")
public Result findDList(@RequestParam(required = true,defaultValue = "1")Integer current,
@RequestParam(required = true,defaultValue = "6")Integer size){
//对 用户进行分页,泛型注入的为用户类
Page<D>page=new Page<>(current,size);
LambdaQueryWrapper<D> queryWrapper=new LambdaQueryWrapper<>();
// 只适用于单表查询 此举含义是将D中的dmentID属性赋值为1,即仅查询dmentID=1的对象
//但此方法多表联查不好查,只能在单表内进行查询
queryWrapper.eq(D::getDmentId,1);
//限制性别属性为1
queryWrapper.eq(D::getSex,1);
// 如果以上两条同时限定,则在需要限制同时查出 dment=1和sex=1的用户
Page<D> dPage = dService.page(page,queryWrapper);
long total = dPage.getTotal();
List<D> records = dPage.getRecords();
return Result.ok().data("total",total).data("records",records);
}
Resultados do teste (dment limite=1 e sexo=1 ao mesmo tempo)
3 Substitua o método QueryWrapper
Pode-se ver pelo processo acima que ao consultar por condições, é utilizado o método de LambdaQueryWrapper . Na verdade, também é possível consultar diretamente por meio de QueryWrapper , mas QueryWrapper usa o objeto Entity para encapsular a classe de operação, enquanto LambdaQueryWrapper usa as expressões Lambda, porque os campos de atributo em várias tabelas são obrigatórios ao executar uma consulta conjunta de várias tabelas, o método de reescrever QueryWrapper é introduzido principalmente aqui .
- Para consultar a instrução SQL, no arquivo xml correspondente à classe de entidade, escreva a seguinte instrução
<!--findDPage与mapper.java种对应的方法一样-->
<select id="findDPage" resultType="D">
select u.`id`, `username`, `nickname`, `email`, `avatar`, `phone_number`, `status`,
u.`create_time`, u.`modified_time`, `sex`, `salt`, `type`, `password`, `birth`,
`dment_id`, `deleted`,d.name as name
from d u
inner join dment d
on u.dment_id = d.id
${ew.customSqlSegment}<!-- 为了配合QueryWrapper中的条件 -->
</select>
2 Métodos Mapper.java
public interface DMapper extends BaseMapper<D> {
IPage<D> findDPage(Page<D>page,@Param(Constants.WRAPPER) QueryWrapper<D> wrapper);
}
3 Métodos de serviço
public interface DService extends IService<D> {
IPage<D> findDPage(Page<D> page, @Param(Constants.WRAPPER) QueryWrapper<D> wrapper);
}
4 Método ServiceImp
@Service
public class DServiceImpl extends ServiceImpl<DMapper, D> implements DService {
@Override
public IPage<D> findDPage(Page<D> page, QueryWrapper<D> wrapper) {
return this.baseMapper.findDPage(page,wrapper);
}
}
5 Defina a classe ViewObject correspondente à camada View. As propriedades nesta categoria correspondem às condições de consulta exigidas pela página de exibição
@Data
public class DVO {
private String username;
private String nickname;
private String email;
private Integer sex;
private Long departmentId;
}
5 Chamada do controlador
Como a página de front-end precisa consultar muitos dados, encapsule-os no arquivo json do DVO para passar o valor do front-end para o back-end, preste atenção em usar o método Post para solicitar,
@PostMapping("/findDPage")
public Result findDPage(@RequestParam(required = true,defaultValue = "1")Integer current,
@RequestParam(required = true,defaultValue = "6")Integer size,
@RequestBody DVO dVO){
//对 用户进行分页,泛型注入的为用户类
Page<D>page=new Page<>(current,size);
//LambdaQueryWrapper<D> queryWrapper=new LambdaQueryWrapper<>();
// 只适用于单表查询 多表联查不好查
//queryWrapper.eq(D::getDepartmentId,1);
QueryWrapper<Doctor>queryWrapper=getWapper(dVO);
IPage<D> dPage = dService.findDPage(page,queryWrapper);
long total = dPage.getTotal();
List<D> records = dPage.getRecords();
return Result.ok().data("total",total).data("records",records);
}
private QueryWrapper<D>getWapper(DVO dVO){
QueryWrapper<D>queryWrapper=new QueryWrapper<>();
if(dVO!=null){
if(!StringUtils.isEmpty(dVO.getDepartmentId())){
queryWrapper.eq("department_id",dVO.getDepartmentId());
}
if(!StringUtils.isEmpty(dVO.getUsername())){
queryWrapper.eq("username",dVO.getUsername());
}
if(!StringUtils.isEmpty(dVO.getEmail())){
queryWrapper.eq("email",dVO.getEmail());
}
if(!StringUtils.isEmpty(dVO.getSex())){
queryWrapper.eq("sex",dVO.getSex());
}
if(!StringUtils.isEmpty(dVO.getNickname())){
queryWrapper.eq("nickname",dVO.getNickname());
}
}
return queryWrapper;
}