最近在写java课设时需要做一个需邱分页操作,虽然可以使用分页插件,但还是想自己写一下,加深印象,忘记了做出整理记录一下。
分页查询时Sql语句使用limit关键字,需要传入开始索引和每页展示的条数。mybatis有两种传参方式。
一、顺序传参
Sql中的参数使用arg0,arg1...或param1,param2...表示参数的顺序。此方法可读性较低,在开发中不建议使用。
- 持久层的写法
//分页查询信息
List<Student> findPage(int start,int pagesize);
- 映射文件(SSM项目中在resource目录下报名路径要与持久层一致)
- 映射文件约束
<?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="edu.beihua.dao.StudentDao">
<!--顺序传参-->
<select id="findPage" resultType="edu.beihua.domain.Student">
select * from student limit #{arg0},#{arg1}
</select>
</mapper>
- 在mybatis核心文件中配置映射文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--mybaties配置文件--> <!-- 注册映射文件 --> <mappers> <mapper resource="edu/beihua/dao/StudentDao.xml"></mapper> </mappers> <!-- 或者以上可以用这种写法代替 --> <select id="findPage" resultType="edu.beihua.domain.Student"> select * from student limit #{param1},#{param2} </select> </configuration>
- 项目结构
第二种:@Param传参
- 持久层接口方法
//第二中分页实现
List<Student> findPage1(
@Param("startIndex") int startIndex,
@Param("pageSize")int pageSize);
- 映射文件中
<select id="findPage1" resultType="edu.beihua.domain.Student">
select * from student limit #{startIndex},#{pageSize}
</select>
第三种:POJO传参
自定义POJO类,该类的属性就是要传递的参数,在SQL语句中绑定参数时使用POJO的属性名作为参数名即可。此方式推荐使用。
- 建立实体PageQuery
public class PageQuery {
private int startIndex;
private int pageSize;
//省略构造器 set/get方法
}
- 编写持久层接口
//第三种POJO传参
List<Student> findPage2(PageQuery pageQuery);
- 映射文件
<!--POJO传参-->
<select id="findPage2"
resultType="edu.beihua.domain.Student"
parameterType="edu.beihua.domain.PageQuery">
select * from student limit #{startIndex},#{pageSize}
</select>
第四种:Map传参
如果不想自定义POJO,可以使用Map作为传递参数的载体,在SQL语句中绑定参数时使用Map的Key作为参数名即可。此方法推荐使用。
- 持久层
//Map集合传参
List<Student> findPage3(Map<String,Object> params);
- 映射文件
<!--Map传参-->
<select id="findPage3" resultType="edu.beihua.domain.Student"
parameterType="map">
select * from student limit #{startIndex},#{pageSize}
</select>
- 测试
Map<String,Object> params = new HashMap();
params.put("startIndex",0);
params.put("pageSize",4);
List<Student> page = studentDao.findPage3(params);
page.forEach(System.out::println);
以上就是常用的mybatis常用的分页查询啦!