基于 Spring Boot 瑞吉外卖系统开发(十三)
查询套餐
在查询套餐信息时包含套餐的分类名,分类名称在category表中,因此这里需要进行两表关联查询。
自定义SQL如下:
select s.* ,c.`name` as category_name from setmeal s
left join category c on c.id=s.category_id
创建SetmealDto文件
用来存储和传输套餐数据对象
@Data
public class SetmealDto extends Setmeal {
private String categoryName;
}
创建SetmealMapper.xml配置文件
配置自定义SQL
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.reggie.mapper.SetmealMapper">
<select id="selectSetmealDtoPage" resultType="com.itheima.reggie.dto.SetmealDto">
select s.* ,c.`name` as category_name from setmeal s
left join category c on c.id=s.category_id
</select>
</mapper>
SetmealMapper添加id接口方法
@Mapper
public interface SetmealMapper extends BaseMapper<Setmeal> {
public Page<SetmealDto> selectSetmealDtoPage(Page page);
}
SetmealService和SetmealServiceImpl添加对应调用方法
public interface SetmealService extends IService<Setmeal> {
public Page<SetmealDto> selectSetmealDtoPage(Page page);
}
@Service
public class SetmealServiceImpl extends ServiceImpl<SetmealMapper, Setmeal> implements SetmealService {
@Autowired
private SetmealMapper setmealMapper;
@Override
public Page<SetmealDto> selectSetmealDtoPage(Page page) {
return setmealMapper.selectSetmealDtoPage(page);
}
}
SetmealController类中添加分页查询套餐的方法
@RestController
@RequestMapping("/setmeal")
public class SetmealController {
@Autowired
private SetmealService setmealService;
@GetMapping("/page")
public R<Page<SetmealDto>> page(int page, int pageSize){
Page pageInfo = new Page(page,pageSize);
setmealService.selectSetmealDtoPage(pageInfo);
return R.success(pageInfo);
}
}
运行测试
套餐所有属性正常显示。
自定义SQL模糊查询
搜索框输入套餐名称查询。
自定义SQL语句添加查询条件
<select id="selectSetmealDtoPage" resultType="com.itheima.reggie.dto.SetmealDto">
select s.* ,c.`name` as category_name from setmeal s
left join category c on c.id=s.category_id
<if test="name!=null">
where s.name like #{name}
</if>
</select>
添加套餐名称参数
@Mapper
public interface SetmealMapper extends BaseMapper<Setmeal> {
public Page<SetmealDto> selectSetmealDtoPage(Page page,@Param("name") String name);
}
修改controller方法,接收查询套餐名称参数。
@GetMapping("/page")
public R<Page<SetmealDto>> page(int page, int pageSize,String name){
Page pageInfo = new Page(page,pageSize);
setmealService.selectSetmealDtoPage(pageInfo,"%"+name+"%");
return R.success(pageInfo);
}