背景
需求一直改,所以表操作接口仅仅提供对表的增删改查功能,getpage每次都要写一个太麻烦,用反射批量
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.gn.PageResult;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.lang.reflect.Field;
/**
* @author // 用户名
* @date 2025/12/25 // 创建日期
* @description 通用Service实现类,提供分页查询等通用方法
*
* @param <M> Mapper类型
* @param <T> Entity类型
*/
public class BaseServiceImpl<M extends BaseMapper<T>, T> extends ServiceImpl<M, T> {
/**
* 通用分页查询方法
* @param pageNum 页码
* @param pageSize 每页大小
* @param model 查询条件实体
* @return 分页结果
*/
public PageResult<T> getPage(Integer pageNum, Integer pageSize, T model) {
// 1. 初始化分页对象
IPage<T> page = new Page<>(pageNum, pageSize);
// 2. 构建动态查询条件
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
if (model != null) {
// 使用反射获取实体类的所有属性
Field[] fields = model.getClass().getDeclaredFields();
for (Field field : fields) {
try {
// 设置属性可访问
field.setAccessible(true);
// 获取属性值
Object value = field.get(model);
// 如果属性值不为null,则添加eq条件
if (value != null) {
// 获取属性名
String fieldName = field.getName();
// 排除serialVersionUID字段,因为它是序列化标识,不应作为查询条件
if ("serialVersionUID".equals(fieldName)) {
continue;
}
// 使用QueryWrapper的eq方法,直接传入字段名和值
queryWrapper.eq(fieldName, value);
}
} catch (Exception e) {
// 忽略反射异常,继续处理下一个属性
e.printStackTrace();
}
}
}
// 3. 执行分页查询
baseMapper.selectPage(page, queryWrapper);
// 4. 封装分页结果
return PageResult.build(
pageNum,
pageSize,
page.getTotal(),
page.getRecords()
);
}
}
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @author // 用户名
* @date 2025/9/15 // 创建日期
* @description 分页结果封装类 // 功能描述
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageResult<T> {
/**
* 当前页码
*/
private Integer pageNum;
/**
* 每页条数
*/
private Integer pageSize;
/**
* 总记录数
*/
private Long total;
/**
* 总页数
*/
private Integer pages;
/**
* 当前页数据列表
*/
private List<T> list;
/**
* @author
* @date 2025/9/15 // 创建日期
* @description 快速构建分页结果对象
* @param pageNum 当前页码
* @param pageSize 每页条数
* @param total 总记录数
* @param list 当前页数据
* @param <T> 数据类型
* @return 分页结果对象
*/
public static <T> PageResult<T> build(Integer pageNum, Integer pageSize, Long total, List<T> list) {
PageResult<T> result = new PageResult<>();
result.setPageNum(pageNum);
result.setPageSize(pageSize);
result.setTotal(total);
result.setList(list);
// 计算总页数
result.setPages(total % pageSize == 0 ? (int)(total / pageSize) : (int)(total / pageSize) + 1);
return result;
}
}

被折叠的 条评论
为什么被折叠?



