mybatis的分页写法
分类: ssm 专栏: ssm框架课 标签: mybatis分页写法
2023-01-07 12:42:24 1188浏览
mybatis分页写法
1.传统的方式,也就是不集成插件,自己封装pageInfo
- 封装了一个pageinfo的类,方便给前端直接展示用
@Data
public class PageInfo<T> {
private Integer pageNo;//第几页
private Integer pageSize;//页面尺寸(一页显示几条 )
private Integer totalCount;//总的记录数
private Integer pages;//总的页数(根据totalCount 和pageSize来计算的)
private List<T> rows;//咱们的数据list
public void setPages(){
if(totalCount % pageSize ==0 ){//满页 比如10条,一页显示5条,
pages=totalCount/pageSize;
}else{
pages=totalCount/pageSize+1;
}
}
}- 两个查询方法接口
//分页查询部门信息
List<Department> getPage(@Param("department") Department department,@Param("offset") Integer offset, @Param("pageSize") Integer pageSize);
//计算总的记录数
Integer getCount(@Param("department") Department department);
- 测试类
@Test
public void testPage(){
//把pageinfo封装好返回前端页面
Integer pageNo =3;
Integer pageSize =3;
PageInfo<Department> pageInfo = new PageInfo<>();
pageInfo.setPageNo(pageNo);
pageInfo.setPageSize(pageSize);
List<Department> list = departmentMapper.getPage(new Department().setDname("c"), (pageNo - 1) * pageSize, pageSize);
pageInfo.setRows(list);
Integer count = departmentMapper.getCount(new Department().setDname("c"));//拿到总条数
pageInfo.setTotalCount(count);
pageInfo.setPages();
System.out.println(pageInfo);
}2.采用pagehelper插件
官网:https://pagehelper.github.io/docs/howtouse/
快速入门
- 引入jar包(两个),当然也可以用maven的方式引入


maven的方式引入
<!--*****************************引入分页插件********************************-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.10</version>
</dependency>
<!-- pagehelper 依赖 -->
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>2.1</version>
</dependency>
<!--*****************************引入分页插件********************************-->
- 配置插件
- 可以在mybatisconfig里配置,但我不推荐
<!--
plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
properties?, settings?,
typeAliases?, typeHandlers?,
objectFactory?,objectWrapperFactory?,
plugins?,
environments?, databaseIdProvider?, mappers?
-->
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
<property name="param1" value="value1"/>
</plugin>
</plugins>- 采用在spring的配置文件里配置
<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations">
<list>
<value>classpath:mapper/*.xml</value>
</list>
</property>
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<!--使用下面的方式配置参数,一行配置一个 -->
<props>
<prop key="helperDialect">mysql</prop>
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>- 测试类
@Test
public void testPageHelper(){
PageHelper.startPage(4,3,"id desc");
List<Department> departmentList = departmentMapper.getAll();
PageInfo<Department> pageInfo = new PageInfo<>(departmentList,3);
System.out.println(pageInfo);
}3.对比两种方式
用插件的优点:代码少了很多,考虑了很多安全性的问题,功能也比传统的强大
4.对于带有collection的分页注意
这种因为有重复数据,所以要改造成子查询的方式进行分页
<resultMap id="employeeAndDepartmentAndSkill" type="com.jf3q.c55.datashow.pojo.Employee">
<id property="id" column="id"></id>
<result property="account" column="account"></result>
<result property="realname" column="realname"></result>
<result property="phone" column="phone"></result>
<result property="sex" column="sex"></result>
<result property="idcardPositive" column="idcardPositive"></result>
<result property="idcardNegative" column="idcardNegative"></result>
<result property="description" column="description"></result>
<result property="faceimg" column="faceimg"></result>
<result property="birthday" column="birthday"></result>
<result property="did" column="did"></result>
<association property="department" javaType="com.jf3q.c55.datashow.pojo.Department">
<id property="id" column="did"></id>
<result property="dname" column="dname"></result>
</association>
<collection property="skills" ofType="com.jf3q.c55.datashow.pojo.Skill" select="selectSkill" column="id"/>
</resultMap>在collection里加一个select="selectSkill" column="id"
子查询的代码
<resultMap id="SkillMap" type="com.jf3q.c55.datashow.pojo.Skill">
<id column="id" property="id"></id>
<result property="uid" column="uid"></result>
<result property="sname" column="sname"></result>
</resultMap>
<!--子查询-->
<select id="selectSkill" resultMap="SkillMap" parameterType="integer" >
select * from skill s
where s.uid = #{id}
</select>
好博客就要一起分享哦!分享海报
此处可发布评论
评论(3)展开评论
您可能感兴趣的博客
他的专栏
他感兴趣的技术


新业务
springboot学习
ssm框架课
vue学习
【带小白】java基础速成