zoukankan      html  css  js  c++  java
  • Mybatis 分页实现

     一、插件 PageHelper(推荐使用) 原理:利用Mybatis的拦截器,截获需要分页的sql语句,在语句后面加分页条件,及获取总记录数等属性。

      注意 插件属性类

      参考一

      参考二

      实例:

        第一步:在pom.xml中添加PageHelper关联的jar 

    <dependency>
               <groupId>com.github.pagehelper</groupId>
               <artifactId>pagehelper</artifactId>
             <version>5.0.0</version>
    </dependency>

        第二步:在mybatis-config.xml   mybatis的配置文件中添加PageHelper插件及属性。

        

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE configuration
     3     PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     4     "http://mybatis.org/dtd/mybatis-3-config.dtd">
     5 
     6 <configuration>
     7 
     8     <settings>
     9         <setting name="logImpl" value="LOG4J"/>
    10         <setting name="cacheEnabled" value="true"/>
    11         <setting name="mapUnderscoreToCamelCase" value="true"/>
    12         <setting name="aggressiveLazyLoading" value="false"/>
    13     </settings>
    14     
    15     <plugins>
    16          <!-- com.github.pagehelper.PageHelper为PageHelper类所在包名 -->
    17         <plugin interceptor="com.github.pagehelper.PageInterceptor">
    18             <!-- 4.0.0以后版本可以不设置该参数 -->
    19             <!--<property name="dialect" value="mysql"/>-->
    20             <!-- 该参数默认为false -->
    21             <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
    22             <!-- 和startPage中的pageNum效果一样-->
    23             <property name="offsetAsPageNum" value="true"/>
    24             <!-- 该参数默认为false -->
    25             <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
    26             <property name="rowBoundsWithCount" value="true"/>
    27             <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
    28             <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
    29             <property name="pageSizeZero" value="true"/>
    30             <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
    31             <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
    32             <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
    33             <property name="reasonable" value="true"/>
    34             <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
    35             <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
    36             <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 -->
    37             <!-- 不理解该含义的前提下,不要随便复制该配置 -->
    38             <!--<property name="params" value="pageNum=start;pageSize=limit;"/>-->
    39             <!-- 支持通过Mapper接口参数来传递分页参数 -->
    40             <!--<property name="supportMethodsArguments" value="true"/>-->
    41             <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
    42             <!--<property name="returnPageInfo" value="check"/>-->
    43         </plugin>
    44       </plugins>
    45 
    46 </configuration>

      在spring的配置文件中applicationContext.xml要有mybatis-config.xml配置文件的引入

      

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
        xsi:schemaLocation="http://www/springframework.org/schema/context http://www/springframework.org/schema/context/spring-context.xsd
            http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
         <!--spring  -->
         <context:component-scan base-package="com.watermelon.web.service.impl"/> 
         
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="addToConfig" value="true"/>
            <property name="basePackage" value="com.watermelon.web.mapper"/>
        </bean>
        
         <!-- spring自动扫描 包下面的带注解的类,并注册到Sping的bean容器中 service.impl
        <context:component-scan base-package="com.watermelon.web.service.impl"></context:component-scan>-->
        <!-- mybatis-spring:scan 会扫描com.watermelon.dao包下面的所有接口当作Spring的bean配置 
        <mybatis-spring:scan base-package="com.watermelon.web.mapper"/>-->
    
        <bean id="dataSource" class="org.apache.ibatis.datasource.pooled.PooledDataSource">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/simple"/>
            <property name="username" value="root"/>
            <property name="password" value="123456"/>
        </bean>
        
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="configLocation" value="classpath:mybatis-config.xml"/>
            <property name="dataSource" ref="dataSource"/>
            <property name="mapperLocations">
                <array>
                    <value>classpath:com/watermelon/web/mapper/*.xml</value>
                </array>
            </property>
            <property name="typeAliasesPackage" value="com.watermelon.web.model"/>
        </bean>
    
     
         
    
        <aop:aspectj-autoproxy/>
    
        <aop:config>
            <aop:pointcut id="appService" expression="execution(* com.watermelon.*.service..*Service*.*(..))"/>
            <aop:advisor advice-ref="txAdvice" pointcut-ref="appService"/>
        </aop:config>
    
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                <tx:method name="select*" read-only="true"/>
                <tx:method name="find*" read-only="true"/>
                <tx:method name="get*" read-only="true"/>
                <tx:method name="*"/>
            </tx:attributes>
        </tx:advice>
    
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>
        
    </beans>

        第三步:

          

    @RequestMapping("/page")
        public ModelAndView dictsByPage(@RequestParam(required=true,defaultValue="1") Integer page,
                @RequestParam(required=false,defaultValue="10") Integer pageSize) {
            ModelAndView mv = new ModelAndView("dicts");
            //设置起始页,及每页显示的记录数
            PageHelper.startPage(page, pageSize);
            //null为分页条件
            List<SysDict> list = dictService.selectBySysDictPage(null);
             
            PageInfo<SysDict> p=new PageInfo<SysDict>(list);
            //返回分页参数
            mv.addObject("page", p);
            //返回查询的记录行的集合
            mv.addObject("dicts", list);
            return mv;
        }

      

  • 相关阅读:
    git本地仓库基本使用(Repository)
    归途
    PowerDesigner逆向工程导入MYSQL数据库总结(转载)
    协程
    os.path.split 和 os.path.splitext
    转载)Linux平台下安装 python 模块包
    Java之map使用方法
    Java学习(JDBC java连接数据库)
    python -- 找出列表list中的重复元素
    JAVA打印变量类型
  • 原文地址:https://www.cnblogs.com/watermelonban/p/7629889.html
Copyright © 2011-2022 走看看