SSM 封装base(二) -封装分页

本文介绍了如何在SSM框架中封装分页功能,包括在service层的实现、IBaseDao接口、BaseMapper、Page对象、BaseController的增强以及在page.jsp中的应用。通过BaseController的初始化处理,确保分页查询时URL保持干净,方便添加条件。此外,还展示了分页页面的实现方式,强调了继承和实现的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • SSM 封装base(一) 实现了简单的增删查改,此篇会加上分页功能

首先是 service层 的实现类

  • 省去了上一遍中实现过的增删查改
@Service
public abstract class BaseService<T> implements IBaseService<T>{

    public abstract IBaseDao<T> getBaseDao(); 

    public abstract Class<T> getClasss();

    public Class<T> clsss;
    {
        clsss = getClasss();
    }
    @Override
    public Page<T> queryByPage(Page<T> page) {
        String tableName = clsss.getSimpleName().toLowerCase();
        List<T> list = new ArrayList<>();
        //分页 查询 数据   (表名,分页起始位置(利用mysql的limit),每页条数,[条件]) 
        List<HashMap<Object, Object>> listmap =  getBaseDao().queryByPage( tableName, 
                    (page.getPage()-1)*page.getSize() , 
                    page.getWhere() );
        // 遍历每个 Map 并通过自定义的方法转换成目标实体类,并添加到结果集list中
        for (HashMap<Object, Object> hashMap : listmap) {
            T t1 = hashMapToEntity(hashMap);
            list.add( t1 );
        }
        //将转换好的数据集合放入 Page 对象
        page.setList(list);
        //根据条件查询数据条数
        if ( page.getWhere()==null || page.getWhere().length()<=0 ) {
            page.setCount( queryCount(  ) );
        }else {
            page.setCount( queryCount( page.getWhere() ) );
        }
        //数据总条数
        int tmp = page.getCount()/page.getSize();
        //最大页数
        page.setMax(page.getCount()<=page.getSize()?1:page.getCount()%page.getSize()>0?tmp+1:tmp);
        return page;
    }

    /**
     * 将HashMap 转成 实体类对象
     */
    private T hashMapToEntity( Map<Object, Object> map ) {
        T t = null;
        try {
            t = clsss.newInstance();
            for (Field f : t.getClass().getDeclaredFields()) {
                f.setAccessible(true);
                f.set(t,map.get(f.getName()));
            }
        } catch (Exception e1) {
            e1.printStackTrace();
        }
        return t;
    }

    //无条件查询记录数
    public int queryCount() {
        String tableName = clsss.getSimpleName().toLowerCase();
        return getBaseDao().queryCount( tableName , "1=1" );
    }
    //有条件的查找记录数
    public int queryCount(String where) {
        String tableName = clsss.getSimpleName().toLowerCase();
        return getBaseDao().queryCount( tableName , where );
    }
}

IBaseDao 接口

  • 同样的省去了上一篇中实现过的方法
public interface IBaseDao <T> {
    List<HashMap<Object, Object>> queryByPage(
          
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值