FilmMapper.xml:
<?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.movie.api.mapper.FilmMapper">
<!-- 引入分页插件 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 配置数据库方言 -->
<property name="helperDialect" value="mysql"/>
</plugin>
<!-- 条件查询电影的分页结果 -->
<select id="selectFilmsByCondition" parameterType="map" resultType="com.movie.api.model.entity.Film">
SELECT * FROM film
<where>
<if test="name != null and name != ''">
AND name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="releaseDate != null">
AND release_date = #{releaseDate}
</if>
<!-- 更多的条件可以在这里添加 -->
</where>
</select>
</mapper>
FilmService 接口:
package com.movie.api.service;
import com.movie.api.model.entity.Film;
import org.springframework.data.domain.Page;
public interface FilmService {
// 添加条件分页查询方法
Page<Film> findFilmsByCondition(String name, String releaseDate, Pageable pageable);
}
FilmServiceImpl 实现:
package com.movie.api.service.impl;
import com.movie.api.mapper.FilmMapper;
import com.movie.api.model.entity.Film;
import com.movie.api.service.FilmService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
@Service
public class FilmServiceImpl implements FilmService {
private final FilmMapper filmMapper;
@Autowired
public FilmServiceImpl(FilmMapper filmMapper) {
this.filmMapper = filmMapper;
}
@Override
public Page<Film> findFilmsByCondition(String name, String releaseDate, Pageable pageable) {
// 使用 MyBatis 提供的 Map 来传递条件
Map<String, Object> params = new HashMap<>();
params.put("name", name);
params.put("releaseDate", releaseDate);
// 使用 PageHelper 分页插件
PageHelper.startPage(pageable.getPageNumber(), pageable.getPageSize());
return filmMapper.selectFilmsByCondition(params);
}
}
FilmController 控制器:
@GetMapping("/condition")
@ApiOperation("根据条件分页查询电影")
public Page<Film> listFilmsByCondition(
@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "releaseDate", required = false) String releaseDate,
Pageable pageable) {
return filmService.findFilmsByCondition(name, releaseDate, pageable);
}