利用Spring MVC+Mybatis实现Mysql分页数据查询的过程详解

下面是“利用Spring MVC+Mybatis实现Mysql分页数据查询的过程详解”的完整攻略。

下面是“利用Spring MVC+Mybatis实现Mysql分页数据查询的过程详解”的完整攻略。

准备工作

在实现分页查询之前,我们需要完成一些准备工作:

  1. 创建一个Spring MVC项目,并引入Mybatis、MySQL相关依赖。
  2. 创建数据库表,并插入一些测试数据。

实现分页查询

编写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注解用于获取分页参数pageNopageSizeModel是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分页数据查询的过程详解

基础教程推荐