下面是“利用Spring MVC+Mybatis实现Mysql分页数据查询的过程详解”的完整攻略。
准备工作
在实现分页查询之前,我们需要完成一些准备工作:
- 创建一个Spring MVC项目,并引入Mybatis、MySQL相关依赖。
- 创建数据库表,并插入一些测试数据。
实现分页查询
编写Mapper接口
我们先编写一个Mybatis的Mapper接口,其中包含一个分页查询的方法:
public interface UserMapper {
List<User> listUsers(@Param("offset") int offset, @Param("pageSize") int pageSize);
}
编写Mapper XML文件
在Mapper XML文件中实现分页查询的具体逻辑:
<select id="listUsers" resultMap="BaseResultMap">
select *
from user
order by id
limit #{offset}, #{pageSize}
</select>
其中,offset
表示查询起始位置,pageSize
表示每页的数据条数。
编写Service接口及实现类
在Service接口中定义分页查询的方法:
public interface UserService {
PageData<User> listUsers(int pageNo, int pageSize);
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public PageData<User> listUsers(int pageNo, int pageSize) {
int offset = (pageNo - 1) * pageSize;
List<User> userList = userMapper.listUsers(offset, pageSize);
int totalCount = userMapper.countUsers();
return new PageData<>(pageNo, pageSize, userList, totalCount);
}
}
其中,PageData
为分页数据的封装类,用于记录当前页、每页的数据条数、总记录数以及查询出的数据。UserMapper
为Mybatis的Mapper接口。
编写Controller
最后在Controller中处理分页查询的请求:
@Controller
@RequestMapping("/user")
public class UserController {
private static final int DEFAULT_PAGE_SIZE = 20;
@Autowired
private UserService userService;
@RequestMapping("/list")
public String listUsers(@RequestParam(value = "pageNo", defaultValue = "1") int pageNo,
@RequestParam(value = "pageSize", defaultValue = DEFAULT_PAGE_SIZE + "") int pageSize,
Model model) {
PageData<User> pageData = userService.listUsers(pageNo, pageSize);
model.addAttribute("pageData", pageData);
return "user/list";
}
}
其中,@RequestParam
注解用于获取分页参数pageNo
和pageSize
。Model
是Spring MVC提供的一个数据模型,在Controller中用于传递数据到视图。userService
为之前定义的Service实现类。
示例
我们模拟实现一个简单的用户管理功能,通过分页查询显示用户信息。
public class User {
private int id;
private String name;
private int age;
private String email;
// 省略getter和setter
}
@WebServlet(name = "UserServlet", urlPatterns = "/user")
public class UserServlet extends HttpServlet {
private static final int DEFAULT_PAGE_SIZE = 20;
private UserService userService = new UserServiceImpl();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int pageNo = getPageNo(request);
int pageSize = getPageSize(request);
PageData<User> pageData = userService.listUsers(pageNo, pageSize);
request.setAttribute("pageData", pageData);
request.getRequestDispatcher("/WEB-INF/views/user/list.jsp").forward(request, response);
}
private int getPageNo(HttpServletRequest request) {
String pageNoStr = request.getParameter("pageNo");
return pageNoStr == null ? 1 : Integer.parseInt(pageNoStr);
}
private int getPageSize(HttpServletRequest request) {
String pageSizeStr = request.getParameter("pageSize");
return pageSizeStr == null ? DEFAULT_PAGE_SIZE : Integer.parseInt(pageSizeStr);
}
}
总结
通过以上的实现过程,我们实现了Spring MVC与Mybatis结合实现Mysql分页数据查询的功能。其中,通过Mapper接口和Mapper XML文件实现了查询逻辑,Service实现了业务逻辑,而Controller则完成了请求的处理和结果的返回。通过这样的分层架构,使得项目代码结构更加清晰,也更便于后续的维护。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用Spring MVC+Mybatis实现Mysql分页数据查询的过程详解 - Python技术站