下面我将为您详细讲解如何使用SpringMVC和MyBatis实现分页查询。
1. 创建分页类
在开始之前需要先创建一个分页类,用来存放分页查询所需的参数,如下:
public class PageInfo {
// 当前页码,默认为第一页
private int pageNum = 1;
// 每页显示的记录数,默认为10
private int pageSize = 10;
// 省略了get/set方法
}
2. 编写Mapper.xml
在Mapper.xml中,我们需要使用limit
关键字来实现分页查询,同时需要使用MyBatis提供的#{}
方式来获取查询的参数,具体如下:
<select id="queryUsers" parameterType="map" resultMap="userMap">
select * from user
<where>
<if test="name != null and name != ''">
and name = #{name}
</if>
</where>
order by id desc
limit #{start}, #{pageSize}
</select>
在上述代码中,start
和pageSize
为分页查询所需的参数,分别表示查询的起始位置和每页显示的记录数。其中,start
的计算公式为(pageNum-1)*pageSize
,代表从第几条记录开始查询。
3. 编写Mapper接口
接下来,在我们的Mapper接口中,定义如下方法:
public interface UserDao {
List<User> queryUsers(@Param("name") String name, @Param("start") int start, @Param("pageSize") int pageSize);
}
这个方法接受name
(用户姓名)、start
和pageSize
三个参数,其中前两个参数的类型分别为String
和int
类型。
4. 编写Service方法
在Service层中,我们需要调用Mapper接口中定义的方法来进行分页查询。我们可以将分页查询所需的参数封装到PageInfo
对象中,并将其作为方法的参数进行传递。例如:
@Service
public class UserService {
@Autowired
private UserDao userDao;
public List<User> queryUsers(String name, PageInfo pageInfo) {
int start = (pageInfo.getPageNum() - 1) * pageInfo.getPageSize();
return userDao.queryUsers(name, start, pageInfo.getPageSize());
}
}
5. 编写Controller方法
最后,在Controller中,我们将通过一个HTTP请求来触发分页查询。例如:
@RequestMapping("/users")
public String queryUsers(@RequestParam(required=false) String name, @RequestParam(required=false) Integer pageNum, Model model) {
if (pageNum == null) {
pageNum = 1;
}
PageInfo pageInfo = new PageInfo();
pageInfo.setPageNum(pageNum);
List<User> userList = userService.queryUsers(name, pageInfo);
model.addAttribute("userList", userList);
model.addAttribute("page", pageInfo);
return "userList";
}
在上述代码中,我们从HTTP请求中获取用户姓名和当前页码,在使用PageInfo
对象封装查询参数之后,调用UserService
的queryUsers
方法来进行分页查询,并将查询结果和分页信息设置到Model中,再通过View返回给用户。
示例说明
接下来,我们使用一个例子来说明如何在SpringMVC和MyBatis中实现分页查询。
例如,我们需要实现一个用户管理功能,在进行用户查询时支持分页查询。我们需要在查询页面中显示用户列表和分页信息,并提供用户姓名和当前页码两个查询参数。
1. 创建分页类
首先,在Commons模块中,我们定义了一个名为PageInfo
的分页类,如下:
public class PageInfo {
// 当前页码,默认为第一页
private int pageNum = 1;
// 每页显示的记录数,默认为10
private int pageSize = 10;
// 省略了get/set方法
}
2. 编写Mapper.xml
接下来,在User模块中,我们编写Mapper.xml文件来实现指定条件的分页查询,如下:
<select id="queryUsers" parameterType="map" resultMap="userMap">
select * from user
<where>
<if test="name != null and name != ''">
and name = #{name}
</if>
</where>
order by id desc
limit #{start}, #{pageSize}
</select>
在上述代码中,我们使用#{start}
和#{pageSize}
来获取计算后的查询参数,用于实现分页查询。
3. 编写Mapper接口
在User模块中,我们编写了一个名为UserDao
的查询接口,其中定义了分页查询的方法,如下:
public interface UserDao {
List<User> queryUsers(@Param("name") String name, @Param("start") int start, @Param("pageSize") int pageSize);
}
4. 编写Service方法
在User模块中,我们编写了一个名为UserService
的Service层类,在这个类中,我们调用了UserDao
中定义的方法来实现分页查询,如下:
@Service
public class UserService {
@Autowired
private UserDao userDao;
public List<User> queryUsers(String name, PageInfo pageInfo) {
int start = (pageInfo.getPageNum() - 1) * pageInfo.getPageSize();
return userDao.queryUsers(name, start, pageInfo.getPageSize());
}
}
5. 编写Controller方法
在UserController中,我们编写了一个名为queryUsers
的方法,这个方法接受了用户姓名和当前页码两个参数,用于调用Service层的方法来实现分页查询,如下:
@RequestMapping("/users")
public String queryUsers(@RequestParam(required=false) String name, @RequestParam(required=false) Integer pageNum, Model model) {
if (pageNum == null) {
pageNum = 1;
}
PageInfo pageInfo = new PageInfo();
pageInfo.setPageNum(pageNum);
List<User> userList = userService.queryUsers(name, pageInfo);
model.addAttribute("userList", userList);
model.addAttribute("page", pageInfo);
return "userList";
}
在上述代码中,我们设置了默认的当前页码为1(当页面第一次加载时,没有传入当前页码参数pageNum),然后使用PageInfo
对象封装查询参数,调用UserService
的queryUsers
方法进行分页查询,最后将分页结果设置到Model中,返回给用户。
综上所述,通过以上步骤,我们可以在SpringMVC和MyBatis中实现分页查询。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springmvc+mybatis 做分页sql 语句实例代码 - Python技术站