这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战
这是一个springboot项目,准备工作,我们就不多说,主要就是相关jar的依赖导入,和MybatiesPlus相关的配置之类,我们直接切入主题。
这个功能的主要需求就是对于搜索有两个字段,一个是status 我可以选择输入,进行搜索,也可以不输入,默认为0,抛弃这个字段搜索,另一个字段 matchName 可以进行模糊搜索,也可以不输入搜索全部,整体的搜索都有分页的功能
使用的自定义的SQL,
最先写一下我们的mapper类
IPage<Match> findMatchPage(IPage<Match> page, Map<String,Object> map);
再写出我们相关的SQL语句,其中我们要注意的就是IPage 定义的方法,我们不管是使用QueryWrapper 还是 Map 我们的运行的时候都会报找不到字段的错误,
所以,我们在写SQL的时候我们需要map.matchName 的方式,指出我们的字段
<select id="findMatchPage" resultType="com.example.oj.entity.dao.Match" >
select * from matches where name like '%${map.matchName}%'
<if test="map.status!=null">
and is_delete = #{map.status}
</if>
</select>
写完上述部分,我们就可以使用测试,对我们的代码进行测试
之后就是service实现
public IPage<Match> findMatchPage(int i,String matchName,int page,int pageSize) {
//定义我们的分页对象
Page<Match> page1 = new Page<>(page, pageSize);
//根据自己的实体设置相关的map的Key
Map<String,Object> map = new HashMap<>();
if(i!=0) {
map.put("status",i);
}
map.put("matchName",matchName);
IPage<Match> matchPage = matchMapper.findMatchPage(page1, map);
return matchPage;
}
我们使用Map的方式传入参数就可以根据我们参数值判断是否进入到我们的SQL操作中,从而实现我们的动态SQL,如果我们的map.put("status",i); 没有添加,那我们SQL的执行就是
select * from matches where name like '%${map.matchName}%'
因为我们使用的是模糊查询如果我们的matchName 也是null的话,就会查询全部
最后就是我们的controller层
public void findMatch(@RequestParam(value = "status",defaultValue = "0") int i,
@RequestParam(value = "matchName",required = false) String matchName,
@RequestParam(value = "page",defaultValue = "1") int page,
@RequestParam(value = "pageSize",defaultValue = "10") int pageSize){
IPage<Match> match = matchService.findMatchPage(i, matchName, page, pageSize);
if(match != null&&match.getRecords().size() > 0){
Map<String,Object> map = new HashMap<>();
map.put("match",match.getRecords());
map.put("total",match.getTotal());
return ;
}
return ;
}
我们下面的方法都是IPage 类型,这是一个分页的类型,我们如果直接打印一下大家就会发现了,所以我们需要调用一下getRecords() 方法,通过我们的IPage对象还可以查询到我们的总页数,一起其他的数据,大家可以根据自己的需求进行使用.