SpringMvc+Maven框架下简单分页实现

SpringMvc+Maven框架下简单分页实现

分页是开发中最基本但必不可少的部分,之前在学校也没有那么多数据,一直以来对分页也没怎么重视,都是用别人现成的,最近自己尝试着写了个分页模块,顺便记录下方便之后使用。具体实现主要从以下几个部分实现:

1.分页实体类

首先我们需要一个工具类,如下内容所示:

package com.cn.hnust.pojo;
import java.io.Serializable;

/**
* 分页
*/
public class Page implements Serializable {

private static final long serialVersionUID = -3198048449643774660L;

private int pageNow = 1; // 当前页数

private int pageSize = 4; // 每页显示记录的条数

private int totalCount; // 总的记录条数

private int totalPageCount; // 总的页数

@SuppressWarnings("unused")
private int startPos; // 开始位置,从0开始

@SuppressWarnings("unused")
private boolean hasFirst;// 是否有首页

@SuppressWarnings("unused")
private boolean hasPre;// 是否有前一页

@SuppressWarnings("unused")
private boolean hasNext;// 是否有下一页

@SuppressWarnings("unused")
private boolean hasLast;// 是否有最后一页

/**
* 通过构造函数 传入  总记录数  和  当前页
* @param totalCount
* @param pageNow
*/
public Page(int totalCount, int pageNow) {
this.totalCount = totalCount;
this.pageNow = pageNow;
}

/**
* 取得总页数,总页数=总记录数/总页数
* @return
*/
public int getTotalPageCount() {
totalPageCount = getTotalCount() / getPageSize();
return (totalCount % pageSize == 0) ? totalPageCount: totalPageCount + 1;
}

public void setTotalPageCount(int totalPageCount) {
this.totalPageCount = totalPageCount;
}

public int getPageNow() {
return pageNow;
}

public void setPageNow(int pageNow) {
this.pageNow = pageNow;
}

public int getPageSize() {
return pageSize;
}

public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}

public int getTotalCount() {
return totalCount;
}

public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
/**
* 取得选择记录的初始位置
* @return
*/
public int getStartPos() {
return (pageNow - 1) * pageSize;
}

public void setStartPos(int startPos) {
this.startPos = startPos;
}

/**
* 是否是第一页
* @return
*/
public boolean isHasFirst() {
return (pageNow == 1) ? false : true;
}

public void setHasFirst(boolean hasFirst) {
this.hasFirst = hasFirst;
}
/**
* 是否有首页
* @return
*/
public boolean isHasPre() {
// 如果有首页就有前一页,因为有首页就不是第一页
return isHasFirst() ? true : false;
}

public void setHasPre(boolean hasPre) {
this.hasPre = hasPre;
}
/**
* 是否有下一页
* @return
*/
public boolean isHasNext() {
// 如果有尾页就有下一页,因为有尾页表明不是最后一页
return isHasLast() ? true : false;
}

public void setHasNext(boolean hasNext) {
this.hasNext = hasNext;
}

/**
* 是否有尾页
* @return
*/
public boolean isHasLast() {
// 如果不是最后一页就有尾页
return (pageNow == getTotalCount()) ? false : true;
}

public void setHasLast(boolean hasLast) {
this.hasLast = hasLast;
}

}

2.Mybatis xml 文件配置

在有了上述分页实体之后,接下来就需要在Mybatis XXmapper.xml文件中配置查询语句,具体思路是:
a. 查询出所有符合条件的结果总数
b.将查到的结果总数通过分页实体的构造函数传入,然后计算出分页参数
c.根据分页参数查询结果集返回

  • 查询所有符合条件的记录条数
 <select id="getCounts" resultType="int" parameterType="java.util.Map">
    SELECT COUNT(*) FROM book
    WHERE XX=查询条件
  </select>
  • 根据分页参数查询符合条件的list
<select id="getBookByPage" resultMap="BaseResultMap"> 
   select 
   <include refid="Base_Column_List" />
    ,
    <include refid="Blob_Column_List" />
    from book WHERE (1=1
    <include refid="bookParams" />  这里自己的查询条件)
    order by Id DESC 
    limit #{startPos--起始下标},#{pageSize--每页数量} 
  </select> 

3.Controller –Service–Dao 层调用代码

  • Controller 层代码
@RequestMapping("/getBookByPage")
    public String getBookByPage(HttpServletRequest request, Model model,Book book, HttpSession session, Type type, Subtype sub) {
        List<Book> bookList = new ArrayList<Book>();
        int counts;// 分页记录总数
        String pageNow = request.getParameter("pageNow");
        String countString = request.getParameter("allcount");
        Page page = null;
        // 判断分页参数
        Book bookParams = (Book) session.getAttribute("bookParams");
        if (countString != null) {
            counts = Integer.parseInt(countString);
            book = bookParams;
        } else {
            counts = bookService.getCounts(book);

        }
        // 添加查询条件id name author publish type subtype
        // System.out.println(book.getName() + "|" + book.getAuthor() + "|"
        // + book.getPublish() + "|" + book.getType() + "|"
        // + book.getSubtype());
        Map<String, Object> condition = new HashMap<String, Object>();
        condition.put("id", book.getId());
        condition.put("name", book.getName());
        condition.put("publish", book.getPublish());
        condition.put("type", book.getType());
        condition.put("subtype", book.getSubtype());
        if (pageNow != null && pageNow != "") {
            page = new Page(counts, Integer.parseInt(pageNow));
        } else {
            page = new Page(counts, 1);
        }
        condition.put("startPos", page.getStartPos());
        condition.put("pageSize", page.getPageSize());
        bookList = this.bookService.getBookByPage(condition);
        // System.out.println("list.size():" + bookList.size());
        model.addAttribute("bookList", bookList);
        model.addAttribute("page", page);
        model.addAttribute("bookParams", book);
        session.setAttribute("bookParams", book);
        model.addAttribute("url", "/book/getBookByPage");
        // 下面判断是否从删除页面跳转过来
        String deleted = (String) session.getAttribute("bookDeleted");
        // System.out.println(deleted);
        if (deleted != null) {
            model.addAttribute("bookDeleted", deleted);
            session.removeAttribute("bookDeleted");
        }
        model.addAttribute("subList", subList);
        return "book/list";
    }
  • Service 层代码
@Resource
    private BookDao bookDao;

    public int getCounts(Book book) {
        // TODO Auto-generated method stub
        return bookDao.getCounts(book);
    }

    public List<Book> getBookByPage(Map condition) {
        // TODO Auto-generated method stub
        return bookDao.getBookByPage(condition);
    }
  • Dao 层代码
 int getCounts(Book book);
 List <Book>  getBookByPage(Map condition);

4.前端jsp页面代码

前端页面page,公用jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<form action='<c:url value="${url}"></c:url>' method="post" id="pageTurnForm">
<c:if test="${page != null && page.totalPageCount >= 1}">
<tr >
<td colspan="11">
<div class="fr" style="margin-bottom:10px;">
  <button type="button"  id="sub" class="btn btn-default" onclick="javascript:jumpToPage();"  style="float:right">跳转<!-- 跳转 --></button>

    <input type="text" id="jump" class="form-control input-mini input-inline  " maxlenght="5" style=" float:right;text-align:center; margin: 0px 6px 0px 0px;">

    <div class="btn-group" style="float:right">
        <c:choose>  

             <c:when test="${page.pageNow == 1}">
                <button type="button" class="btn btn-default"  disabled="disabled">&nbsp;<i class="fa  fa-angle-double-left"></i></button>

             </c:when>      
            <c:otherwise>
            <button type="button" class="btn btn-default" onclick="javascript:prevousPage();">&nbsp;<i class="fa  fa-angle-double-left"></i></button>
            </c:otherwise>  
        </c:choose>

        <button type="button" class="btn btn-default" disabled="disabled" onclick="javascript:jumpToPage();">第 ${page.pageNow} / ${page.totalPageCount}  页</button>
                <c:choose>  

             <c:when test="${page.pageNow == page.totalPageCount}">
                <button type="button" class="btn btn-default"  disabled="disabled" >&nbsp;<i class="fa  fa-angle-double-right"></i></button>
             </c:when>      
            <c:otherwise>
                <button type="button" class="btn btn-default" onclick="javascript:nextPage();">&nbsp;<i class="fa  fa-angle-double-right"></i></button>
            </c:otherwise>  
        </c:choose>
    </div>

</div>
</td>
</tr>
</c:if>
        <c:if test="${page == null || page.totalCount == 0}">
        <tr>
            <td colspan="11" class="alert-danger"><i class="fa fa-info-circle"></i> 无相关查询结果!
        </tr>
        </c:if>
        <input type="hidden" id="pageNow" name="pageNow"/>
        <input type="hidden" id="allcount" name="allcount" value="${page.totalCount}"/>

        </form>
        <script type="text/javascript">
        function jumpToPage(){
            var jump=$("#jump").val();
            var pageNow=${page.pageNow};
            var pageTotal=${page.totalPageCount};
                if(jump==""||jump>pageTotal||jump<1||isNaN(jump)){
                    showAlertModel("提示信息","请输入正确的页码!",null);
                    return false;
                }else{
                    $("#pageNow").val(jump);
                    $("#pageTurnForm").submit();
                }
        }
        function nextPage(){
            var pageNow=${page.pageNow};
            var pageTotal=${page.totalCount};
            $("#pageNow").val(parseInt(pageNow)+1);
            $("#pageTurnForm").submit();
        }
        function prevousPage(){
            var pageNow=${page.pageNow};
            var pageTotal=${page.totalCount};
            $("#pageNow").val(parseInt(pageNow)-1);
            $("#pageTurnForm").submit();
        }
        /*处理回车事件*/
        jQuery(document).ready(function() {
            $("#jump").keydown(function(event){
                if(event.keyCode == 13){
                    $("#sub").click();
                    return false;
                }else{

                }
            });
        });
        </script>

至此,分页功能已经完成,效果图如下:

这里写图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Spring+SpringMVC+MyBatis框架技术整合是目前Java企业级应用开发中最为流行的技术组合之一。在这个技术组合中,Spring负责IoC和AOP,SpringMVC则是MVC框架,而MyBatis则是ORM框架。 下面是一个简单的整合案例: 1. 首先,我们需要创建一个Maven项目,并添加Spring、SpringMVC和MyBatis的依赖: ```xml <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.3.RELEASE</version> </dependency> <!-- Spring MVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.3.RELEASE</version> </dependency> <!-- MyBatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.5</version> </dependency> ``` 2. 接着,我们需要配置Spring、SpringMVC和MyBatis的配置文件。在这里,我们使用注解方式配置Spring和SpringMVC,而使用XML方式配置MyBatis。 Spring配置文件: ```java @Configuration @ComponentScan(basePackages = "com.example") @EnableWebMvc public class AppConfig { // ... 配置其他Bean @Bean public DataSource dataSource() { // 配置数据源 return new DriverManagerDataSource(); } @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); // 配置MyBatis插件 Interceptor[] plugins = {pageHelper()}; sessionFactory.setPlugins(plugins); // 配置MyBatis映射文件 sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources("classpath*:mapper/*.xml")); return sessionFactory.getObject(); } @Bean public MapperScannerConfigurer mapperScannerConfigurer() { MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer(); scannerConfigurer.setBasePackage("com.example.mapper"); scannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); return scannerConfigurer; } @Bean public PageInterceptor pageHelper() { PageInterceptor pageInterceptor = new PageInterceptor(); Properties properties = new Properties(); properties.setProperty("helperDialect", "mysql"); pageInterceptor.setProperties(properties); return pageInterceptor; } } ``` SpringMVC配置文件: ```java @Configuration public class WebConfig implements WebMvcConfigurer { // ... 配置其他内容 @Bean public ViewResolver viewResolver() { // 配置视图解析器 InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/views/"); viewResolver.setSuffix(".jsp"); return viewResolver; } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // 配置静态资源 registry.addResourceHandler("/static/**") .addResourceLocations("/static/"); } @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } } ``` MyBatis配置文件: ```xml <configuration> <typeAliases> <!-- 配置别名 --> <package name="com.example.model"/> </typeAliases> <mappers> <!-- 配置映射文件 --> <mapper resource="mapper/userMapper.xml"/> </mappers> <!-- 配置分页插件 --> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="helperDialect" value="mysql"/> </plugin> </plugins> </configuration> ``` 3. 接着,我们需要创建Controller和Mapper接口以及对应的视图和映射文件。这里我们以用户管理为例: UserController.java: ```java @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping(value = "/list", method = RequestMethod.GET) public String list(Model model) { List<User> users = userService.getAllUsers(); model.addAttribute("users", users); return "user/list"; } @RequestMapping(value = "/add", method = RequestMethod.GET) public String addForm() { return "user/add"; } @RequestMapping(value = "/add", method = RequestMethod.POST) public String add(User user) { userService.addUser(user); return "redirect:/user/list"; } @RequestMapping(value = "/edit/{id}", method = RequestMethod.GET) public String editForm(@PathVariable("id") Long id, Model model) { User user = userService.getUserById(id); model.addAttribute("user", user); return "user/edit"; } @RequestMapping(value = "/edit", method = RequestMethod.POST) public String edit(User user) { userService.updateUser(user); return "redirect:/user/list"; } @RequestMapping(value = "/delete/{id}", method = RequestMethod.GET) public String delete(@PathVariable("id") Long id) { userService.deleteUser(id); return "redirect:/user/list"; } } ``` UserMapper.java: ```java public interface UserMapper { List<User> getAllUsers(); User getUserById(Long id); void addUser(User user); void updateUser(User user); void deleteUser(Long id); } ``` userMapper.xml: ```xml <mapper namespace="com.example.mapper.UserMapper"> <resultMap id="userMap" type="com.example.model.User"> <id property="id" column="id" /> <result property="name" column="name" /> <result property="age" column="age" /> </resultMap> <select id="getAllUsers" resultMap="userMap"> SELECT * FROM user </select> <select id="getUserById" resultMap="userMap"> SELECT * FROM user WHERE id = #{id} </select> <insert id="addUser" useGeneratedKeys="true" keyProperty="id"> INSERT INTO user(name, age) VALUES(#{name}, #{age}) </insert> <update id="updateUser"> UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id} </update> <delete id="deleteUser"> DELETE FROM user WHERE id = #{id} </delete> </mapper> ``` 4. 最后,我们需要配置web.xml文件,启动Spring容器和SpringMVC DispatcherServlet。 web.xml: ```xml <web-app> <display-name>MyApp</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/config/spring/appConfig.java</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/config/spring/webConfig.java</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> ``` 这样,我们就完成了Spring+SpringMVC+MyBatis框架技术的整合。在实际开发中,我们可以根据需求进行修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值