基于 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 sleft 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 {@Autowiredprivate SetmealMapper setmealMapper;@Overridepublic Page<SetmealDto> selectSetmealDtoPage(Page page) {return setmealMapper.selectSetmealDtoPage(page);}
}
SetmealController類中添加分頁查詢套餐的方法
@RestController
@RequestMapping("/setmeal")
public class SetmealController {@Autowiredprivate 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 sleft 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);if(name!=null){name = "%"+name+"%";}setmealService.selectSetmealDtoPage(pageInfo,name);return R.success(pageInfo);}