1.第一种方法
引入包
<dependency>
<groupId>cn.mysteel</groupId>
<artifactId>shgl-data-ibatis</artifactId>
<version>1.0.0</version>
</dependency>
可以看看里面的方法,有查询数量和list的方法
public Pagination queryPage(PageParam pageParam, Map paramMap)
{
if(paramMap == null)
paramMap = new HashMap(8);
paramMap.put("pageFirst", Integer.valueOf((pageParam.getPageNum() - 1) * pageParam.getNumPerPage()));
paramMap.put("pageSize", Integer.valueOf(pageParam.getNumPerPage()));
paramMap.put("startRowNum", Integer.valueOf((pageParam.getPageNum() - 1) * pageParam.getNumPerPage()));
paramMap.put("endRowNum", Integer.valueOf(pageParam.getPageNum() * pageParam.getNumPerPage()));
Long count = (Long)sessionTemplate.selectOne(getStatement("listPageCount"), paramMap);
List list = sessionTemplate.selectList(getStatement("listPage"), paramMap);
Object isCount = paramMap.get("isCount");
if(isCount != null && "1".equals(isCount.toString()))
{
Map countResultMap = (Map)sessionTemplate.selectOne(getStatement("countByPageParam"), paramMap);
return new Pagination(pageParam.getPageNum(), pageParam.getNumPerPage(), count.intValue(), list, countResultMap);
} else
{
return new Pagination(pageParam.getPageNum(), pageParam.getNumPerPage(), count.intValue(), list);
}
}
所有xml里面的查询方法就有两个
<select id="listPage" resultMap="AdminMap" parameterType="map" >
select * from admin
<where >
<include refid="condition_sql" />
</where>
ORDER BY last_access DESC
<if test="startRowNum != null" >
limit #{pageSize} offset #{startRowNum}
</if>
</select>
<select id="listPageCount" resultType="long" parameterType="map" >
select count(id) from admin
<where >
<include refid="condition_sql" />
</where>
</select>
然后dao层继承AbstractIBatisDao就可以
package cn.com.mysteel.gezhouba.dao;
import cn.com.mysteel.gezhouba.entity.Admin;
import cn.mysteel.data.ibatis.AbstractIBatisDao;
public interface AdminDAO extends AbstractIBatisDao<Admin> {
}
dao 的实现也是AbstractIBatisDaoImpl
package cn.com.mysteel.gezhouba.dao.impl;
import org.springframework.stereotype.Repository;
import cn.com.mysteel.gezhouba.dao.AdminDAO;
import cn.com.mysteel.gezhouba.entity.Admin;
import cn.mysteel.data.ibatis.impl.AbstractIBatisDaoImpl;
@Repository(value = "adminDAO")
public class AdminDAOImpl extends AbstractIBatisDaoImpl<Admin> implements AdminDAO {
}
有时可能会多表查询,这样会改名字好表达意思,这样就可能要自己写分页方法。xml一样
@Override
public PageEntity<ChannelIndexDTO> selectChannelIndex(PageSearchDTO pageSearchDTO)
{
List<ChannelIndexDTO> channelIndexDTOes = super.getSqlSession().selectList("selectChannelIndex", pageSearchDTO);
long count = super.getSqlSession().selectOne("selectChannelIndexCount", pageSearchDTO);
PageEntity<ChannelIndexDTO> datas = new PageEntity<ChannelIndexDTO>();
datas.setRows(channelIndexDTOes);
datas.setTotal((int)count);
return datas;
}
这样就得自己写dao 的实现
自己写一个PageEntiry
package cn.com.mysteel.gezhouba.common;
import java.io.Serializable;
import java.util.List;
public class PageEntity<T> implements Serializable
{
private static final long serialVersionUID = 6907657068668654919L;
private boolean overflow=false;
private int total;
private List<T> rows;
public boolean isOverflow()
{
return overflow;
}
public void setOverflow(boolean overflow)
{
this.overflow = overflow;
}
public int getTotal()
{
return total;
}
public void setTotal(int total)
{
this.total = total;
}
public List<T> getRows()
{
return rows;
}
public void setRows(List<T> rows)
{
this.rows = rows;
}
}
这样到层的分页就算完成
2.第二种方法,引入插件
其中PageHelper就是分页插件
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 4.0.0以后版本可以不设置该参数 -->
<property name="dialect" value="mysql"/>
<!-- 该参数默认为false -->
<!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
<!-- 和startPage中的pageNum效果一样-->
<property name="offsetAsPageNum" value="true"/>
<!-- 该参数默认为false -->
<!-- 设置为true时,使用RowBounds分页会进行count查询 -->
<property name="rowBoundsWithCount" value="true"/>
<!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
<!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
<property name="pageSizeZero" value="true"/>
<!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
<!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
<!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
<property name="reasonable" value="false"/>
<!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
<!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
<!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值 -->
<!-- 不理解该含义的前提下,不要随便复制该配置 -->
<property name="params" value="pageNum=start;pageSize=limit;"/>
</plugin>
</plugins>
// 分页方法
@Override
public PageInfo<Inventory> queryPageInventory(int pageNum,
int pageSize, Map<String, Object> paramMap)
{
//这是插件方法
PageHelper.startPage(pageNum, pageSize);
// 查询的到时list方法
return new PageInfo<Inventory>(inventoryDao.queryPageInventory(paramMap));
}
// inrentoryDao的接口实现
List<Inventory> queryPageInventory(Map<String, Object> paramMap);
其中插件里面有写好的分页,把我们的查询语句进行拼接查询