• Spring Boot+Mybatis+Pagehelper分页


    Spring Boot 集成MyBatis和Pagehelper分页插件

    mybatis-spring-boot-starter依赖树如下:

    image

    pom配置


    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.xiaolyuh</groupId>
    <artifactId>spring-boot-student-mybatis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>spring-boot-student-mybatis</name>

    <span class="hljs-comment" style="color:rgb(153,153,136); font-style:italic">&lt;!-- 添加Spring Boot的父类依赖,这样当前项目就是Spring Boot项目了。 spring-boot-starter-parent是一个特殊的starter,他用来
        提供相关的maven默认依赖, 使用它之后,常用的依赖可以省去version标签 --&gt;</span></br>
    <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">parent</span>&gt;</span></br>
        <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">groupId</span>&gt;</span>org.springframework.boot<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">groupId</span>&gt;</span></br>
        <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">artifactId</span>&gt;</span>spring-boot-starter-parent<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">artifactId</span>&gt;</span></br>
        <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">version</span>&gt;</span>1.5.3.RELEASE<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">version</span>&gt;</span></br>
        <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">relativePath</span>/&gt;</span> <span class="hljs-comment" style="color:rgb(153,153,136); font-style:italic">&lt;!-- lookup parent from repository --&gt;</span></br>
    <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">parent</span>&gt;</span></br></br>
    
    <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">properties</span>&gt;</span></br>
        <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">project.build.sourceEncoding</span>&gt;</span>UTF-8<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">project.build.sourceEncoding</span>&gt;</span></br>
        <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">project.reporting.outputEncoding</span>&gt;</span>UTF-8<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">project.reporting.outputEncoding</span>&gt;</span></br>
        <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">java.version</span>&gt;</span>1.8<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">java.version</span>&gt;</span></br>
    <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">properties</span>&gt;</span></br></br>
    
    <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">dependencies</span>&gt;</span></br>
        <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">dependency</span>&gt;</span></br>
            <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">groupId</span>&gt;</span>org.springframework.boot<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">groupId</span>&gt;</span></br>
            <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">artifactId</span>&gt;</span>spring-boot-starter<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">artifactId</span>&gt;</span></br>
        <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">dependency</span>&gt;</span></br>
        <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">dependency</span>&gt;</span></br>
            <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">groupId</span>&gt;</span>org.springframework.boot<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">groupId</span>&gt;</span></br>
            <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">artifactId</span>&gt;</span>spring-boot-starter-web<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">artifactId</span>&gt;</span></br>
        <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">dependency</span>&gt;</span></br>
            <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">groupId</span>&gt;</span>mysql<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">groupId</span>&gt;</span></br>
            <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">artifactId</span>&gt;</span>mysql-connector-java<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">artifactId</span>&gt;</span></br>
        <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">dependency</span>&gt;</span></br></br>
    
        <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">dependency</span>&gt;</span></br>
            <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">groupId</span>&gt;</span>org.mybatis.spring.boot<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">groupId</span>&gt;</span></br>
            <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">artifactId</span>&gt;</span>mybatis-spring-boot-starter<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">artifactId</span>&gt;</span></br>
            <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">version</span>&gt;</span>1.3.0<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">version</span>&gt;</span></br>
        <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">dependency</span>&gt;</span></br>
        <span class="hljs-comment" style="color:rgb(153,153,136); font-style:italic">&lt;!--pagehelper --&gt;</span></br>
        <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">dependency</span>&gt;</span></br>
            <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">groupId</span>&gt;</span>com.github.pagehelper<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">groupId</span>&gt;</span></br>
            <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">artifactId</span>&gt;</span>pagehelper-spring-boot-starter<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">artifactId</span>&gt;</span></br>
            <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">version</span>&gt;</span>1.1.1<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">version</span>&gt;</span></br>
        <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">dependency</span>&gt;</span></br></br>
    
        <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">dependency</span>&gt;</span></br>
            <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">groupId</span>&gt;</span>com.alibaba<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">groupId</span>&gt;</span></br>
            <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">artifactId</span>&gt;</span>fastjson<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">artifactId</span>&gt;</span></br>
            <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">version</span>&gt;</span>1.2.31<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">version</span>&gt;</span></br>
        <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">dependency</span>&gt;</span></br></br>
    
        <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">dependency</span>&gt;</span></br>
            <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">groupId</span>&gt;</span>org.springframework.boot<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">groupId</span>&gt;</span></br>
            <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">artifactId</span>&gt;</span>spring-boot-starter-test<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">artifactId</span>&gt;</span></br>
            <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">scope</span>&gt;</span>test<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">scope</span>&gt;</span></br>
        <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">dependency</span>&gt;</span></br>
    <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">dependencies</span>&gt;</span></br></br>
    
    <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">build</span>&gt;</span></br>
        <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">plugins</span>&gt;</span></br>
            <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">plugin</span>&gt;</span></br>
                <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">groupId</span>&gt;</span>org.springframework.boot<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">groupId</span>&gt;</span></br>
                <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">artifactId</span>&gt;</span>spring-boot-maven-plugin<span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">artifactId</span>&gt;</span></br>
            <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">plugin</span>&gt;</span></br>
        <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">plugins</span>&gt;</span></br>
    <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">build</span>&gt;</span></br></br>
    

    </project>

    application.properties配置

    server.port=80
    # 数据源配置
    spring.datasource.url=jdbc:mysql://localhost:3306/ssb_test
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.username=root
    spring.datasource.password=root
    #连接池配置
    #spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource

    #mybatis

    #entity扫描的包名

    mybatis.type-aliases-package=com.xiaolyuh.domain.model

    #Mapper.xml所在的位置

    mybatis.mapper-locations=classpath:/mybaits/Mapper.xml

    #pagehelper分页插件配置

    pagehelper.helperDialect=mysql

    pagehelper.reasonable=true

    pagehelper.supportMethodsArguments=true

    pagehelper.params=count=countSql

    #日志配置

    logging.level.com.xiaolyuh=debug

    logging.level.org.springframework.web=debug

    logging.level.org.springframework.transaction=debug

    logging.level.org.mybatis=debug


    debug=false



    除了上面常见的两项配置,还有:

    mybatis.config-location=mybatis-config.xml配置文件的路径
    mybatis.type-handlers-package=扫描typeHandlers的包
    mybatis.check-config-location=检查配置文件是否存在
    mybatis.executor-type=设置执行模式(SIMPLE, REUSE, BATCH),默认为SIMPLE

    Mapping XML文件

    在resources文件夹下创建mybaits/PersonMapper.xml文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    <mapper namespace="com.xiaolyuh.domain.mapper.PersonMapper" >
    <resultMap id="BaseResultMap" type="com.xiaolyuh.domain.model.Person" >
    <!--
    WARNING - @mbggenerated
    This element is automatically generated by MyBatis Generator, do not modify.
    -->

    <id column="id" property="id" jdbcType="BIGINT" />
    <result column="name" property="name" jdbcType="VARCHAR" />
    <result column="age" property="age" jdbcType="INTEGER" />
    <result column="address" property="address" jdbcType="VARCHAR" />
    </resultMap>
    <sql id="Base_Column_List" > <!--
    WARNING - @mbggenerated
    This element is automatically generated by MyBatis Generator, do not modify.
    -->

    id, name, age, address </sql>
    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
    <!--
    WARNING - @mbggenerated
    This element is automatically generated by MyBatis Generator, do not modify.
    -->

    select
    <include refid="Base_Column_List" />
    from person
    where id = #{id,jdbcType=BIGINT}
    </select>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
    <!--
    WARNING - @mbggenerated
    This element is automatically generated by MyBatis Generator, do not modify.
    -->

    delete from person
    where id = #{id,jdbcType=BIGINT}
    </delete>
    <insert id="insert" parameterType="com.xiaolyuh.domain.model.Person" >
    <!--
    WARNING - @mbggenerated
    This element is automatically generated by MyBatis Generator, do not modify.
    -->

    <selectKey resultType="java.lang.Long" keyProperty="id" order="AFTER" >
    SELECT LAST_INSERT_ID()
    </selectKey>
    insert into person (name, age, address
    )
    values (#{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER}, #{address,jdbcType=VARCHAR}
    )
    </insert>
    <insert id="insertSelective" parameterType="com.xiaolyuh.domain.model.Person" >
    <!--
    WARNING - @mbggenerated
    This element is automatically generated by MyBatis Generator, do not modify.
    -->

    <selectKey resultType="java.lang.Long" keyProperty="id" order="AFTER" >
    SELECT LAST_INSERT_ID()
    </selectKey>
    insert into person
    <trim prefix="(" suffix=")" suffixOverrides="," >
    <if test="name != null" >
    name,
    </if>
    <if test="age != null" >
    age,
    </if>
    <if test="address != null" >
    address,
    </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
    <if test="name != null" > #{name,jdbcType=VARCHAR},
    </if>
    <if test="age != null" >
    #{age,jdbcType=INTEGER},
    </if>
    <if test="address != null" >
    #{address,jdbcType=VARCHAR},
    </if>
    </trim>
    </insert>
    <update id="updateByPrimaryKeySelective" parameterType="com.xiaolyuh.domain.model.Person" >
    <!--
    WARNING - @mbggenerated
    This element is automatically generated by MyBatis Generator, do not modify.
    -->

    update person
    <set >
    <if test="name != null" >
    name = #{name,jdbcType=VARCHAR},
    </if>
    <if test="age != null" >
    age = #{age,jdbcType=INTEGER},
    </if>
    <if test="address != null" >
    address = #{address,jdbcType=VARCHAR},
    </if>
    </set>
    where id = #{id,jdbcType=BIGINT}
    </update>
    <update id="updateByPrimaryKey" parameterType="com.xiaolyuh.domain.model.Person" >
    <!--
    WARNING - @mbggenerated
    This element is automatically generated by MyBatis Generator, do not modify.
    -->

    update person
    set name = #{name,jdbcType=VARCHAR},
    age = #{age,jdbcType=INTEGER},
    address = #{address,jdbcType=VARCHAR}
    where id = #{id,jdbcType=BIGINT}
    </update>

    <select id="findAll" resultMap="BaseResultMap">

    select

    <include refid="Base_Column_List" />
    from person

    </select>

    <select id="findByPage" resultMap="BaseResultMap">

    select

    <include refid="Base_Column_List" />

    from person

    </select>

    </mapper>

    DAO层Mapper类

    在Mapper接口上需要加上@Mapper注解,@Mapper注解声明成mybatis Dao层的Bean。也可以在配置类上使用@MapperScan("com.xiaolyuh.domain.mapper")注解声明。

    package com.xiaolyuh.domain.mapper;
    

    import com.github.pagehelper.Page;

    import com.xiaolyuh.domain.model.Person;

    import org.apache.ibatis.annotations.Mapper;

    import java.util.List;

    @Mapper//声明成mybatis Dao层的Bean,也可以在配置类上使用@MapperScan("com.xiaolyuh.domain.mapper")注解声明

    public interface PersonMapper
    {

    <span class="hljs-function" style=""><span class="hljs-keyword" style="font-weight:700">int</span> <span class="hljs-title" style="color:rgb(153,0,0); font-weight:700">deleteByPrimaryKey</span><span class="hljs-params" style="">(Long id)</span></span>;</br></br>
    
    <span class="hljs-function" style=""><span class="hljs-keyword" style="font-weight:700">int</span> <span class="hljs-title" style="color:rgb(153,0,0); font-weight:700">insert</span><span class="hljs-params" style="">(Person record)</span></span>;</br></br>
    
    <span class="hljs-function" style=""><span class="hljs-keyword" style="font-weight:700">int</span> <span class="hljs-title" style="color:rgb(153,0,0); font-weight:700">insertSelective</span><span class="hljs-params" style="">(Person record)</span></span>;</br>
    
    <span class="hljs-function" style="">Person <span class="hljs-title" style="color:rgb(153,0,0); font-weight:700">selectByPrimaryKey</span><span class="hljs-params" style="">(Long id)</span></span>;</br></br>
    
    <span class="hljs-function" style=""><span class="hljs-keyword" style="font-weight:700">int</span> <span class="hljs-title" style="color:rgb(153,0,0); font-weight:700">updateByPrimaryKeySelective</span><span class="hljs-params" style="">(Person record)</span></span>;</br></br>
    
    <span class="hljs-function" style=""><span class="hljs-keyword" style="font-weight:700">int</span> <span class="hljs-title" style="color:rgb(153,0,0); font-weight:700">updateByPrimaryKey</span><span class="hljs-params" style="">(Person record)</span></span>;</br></br>
    
    <span class="hljs-comment" style="color:rgb(153,153,136); font-style:italic">/**</br>
     * 获取所有数据</br>
     * <span class="hljs-doctag" style="color:rgb(221,17,68)">@return</span></br>
     */</span></br>
    <span class="hljs-function" style="">List&lt;Person&gt; <span class="hljs-title" style="color:rgb(153,0,0); font-weight:700">findAll</span><span class="hljs-params" style="">()</span></span>;</br>
    
    <span class="hljs-comment" style="color:rgb(153,153,136); font-style:italic">/**</br>
     * 分页查询数据</br>
     * <span class="hljs-doctag" style="color:rgb(221,17,68)">@return</span></br>
     */</span></br>
    <span class="hljs-function" style="">Page&lt;Person&gt; <span class="hljs-title" style="color:rgb(153,0,0); font-weight:700">findByPage</span><span class="hljs-params" style="">()</span></span>;</br>
    

    }

    实体类

    package com.xiaolyuh.domain.model;
    

    public class Person {

    <span class="hljs-keyword" style="font-weight:700">private</span> Long id;</br>
    

    /**
    * 名称
    */

    private String name;
    <span class="hljs-comment" style="color:rgb(153,153,136); font-style:italic">/**</br>
     * 年龄</br>
     */</span></br>
    <span class="hljs-keyword" style="font-weight:700">private</span> Integer age;</br>
    
    <span class="hljs-comment" style="color:rgb(153,153,136); font-style:italic">/**</br>
     * 地址</br>
     */</span></br>
    <span class="hljs-keyword" style="font-weight:700">private</span> String address;</br>
    
    <span class="hljs-function" style=""><span class="hljs-keyword" style="font-weight:700">public</span> Long <span class="hljs-title" style="color:rgb(153,0,0); font-weight:700">getId</span><span class="hljs-params" style="">()</span> </span>{</br>
        <span class="hljs-keyword" style="font-weight:700">return</span> id;</br>
    }</br>
    
    <span class="hljs-function" style=""><span class="hljs-keyword" style="font-weight:700">public</span> <span class="hljs-keyword" style="font-weight:700">void</span> <span class="hljs-title" style="color:rgb(153,0,0); font-weight:700">setId</span><span class="hljs-params" style="">(Long id)</span> </span>{</br>
        <span class="hljs-keyword" style="font-weight:700">this</span>.id = id;</br>
    }</br>
    
    <span class="hljs-function" style=""><span class="hljs-keyword" style="font-weight:700">public</span> String <span class="hljs-title" style="color:rgb(153,0,0); font-weight:700">getName</span><span class="hljs-params" style="">()</span> </span>{</br>
        <span class="hljs-keyword" style="font-weight:700">return</span> name;</br>
    }</br>
    
    <span class="hljs-function" style=""><span class="hljs-keyword" style="font-weight:700">public</span> <span class="hljs-keyword" style="font-weight:700">void</span> <span class="hljs-title" style="color:rgb(153,0,0); font-weight:700">setName</span><span class="hljs-params" style="">(String name)</span> </span>{</br>
        <span class="hljs-keyword" style="font-weight:700">this</span>.name = name;</br>
    }</br></br>
    
    <span class="hljs-function" style=""><span class="hljs-keyword" style="font-weight:700">public</span> Integer <span class="hljs-title" style="color:rgb(153,0,0); font-weight:700">getAge</span><span class="hljs-params" style="">()</span> </span>{</br>
        <span class="hljs-keyword" style="font-weight:700">return</span> age;</br>
    }</br>
    
    <span class="hljs-function" style=""><span class="hljs-keyword" style="font-weight:700">public</span> <span class="hljs-keyword" style="font-weight:700">void</span> <span class="hljs-title" style="color:rgb(153,0,0); font-weight:700">setAge</span><span class="hljs-params" style="">(Integer age)</span> </span>{</br>
        <span class="hljs-keyword" style="font-weight:700">this</span>.age = age;</br>
    }</br></br>
    
    <span class="hljs-function" style=""><span class="hljs-keyword" style="font-weight:700">public</span> String <span class="hljs-title" style="color:rgb(153,0,0); font-weight:700">getAddress</span><span class="hljs-params" style="">()</span> </span>{</br>
        <span class="hljs-keyword" style="font-weight:700">return</span> address;</br>
    }</br></br>
    
    <span class="hljs-function" style=""><span class="hljs-keyword" style="font-weight:700">public</span> <span class="hljs-keyword" style="font-weight:700">void</span> <span class="hljs-title" style="color:rgb(153,0,0); font-weight:700">setAddress</span><span class="hljs-params" style="">(String address)</span> </span>{</br>
        <span class="hljs-keyword" style="font-weight:700">this</span>.address = address;</br>
    }</br>
    

    }

    Service层

    接口

    package com.xiaolyuh.service;
    

    import com.github.pagehelper.Page;

    import com.xiaolyuh.domain.model.Person;

    import java.util.List;

    /**

    • Created by yuhao.wang on 2017/6/19.

      */

      public interface PersonService
      {

      List<Person> findAll();

      /**

      • 分页查询
      • @param pageNo 页号
      • @param pageSize 每页显示记录数
      • @return

        */

        Page<Person> findByPage(int pageNo, int pageSize);

      void insert(Person person);


      }

实现类

package com.xiaolyuh.service.impl;

import com.github.pagehelper.Page;

import com.github.pagehelper.PageHelper;

import com.xiaolyuh.domain.mapper.PersonMapper;

import com.xiaolyuh.domain.model.Person;

import com.xiaolyuh.service.PersonService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**

  • Created by yuhao.wang on 2017/6/19.

    */

    @Service

    @Transactional(readOnly = true)

    public class PersonServiceImpl
    implements PersonService
    {

    @Autowired

    private PersonMapper personMapper;

    @Override

    public List<Person> findAll() {

    return personMapper.findAll();

    }

    @Override

    public Page<Person> findByPage(int pageNo, int pageSize) {

    PageHelper.startPage(pageNo, pageSize);

    return personMapper.findByPage();

    }

    @Override

    @Transactional

    public void insert(Person person) {

    personMapper.insert(person);

    }

}

分页的包装类PageInfo

需要把Page包装成PageInfo对象才能序列化。该插件也默认实现了一个PageInfo

package com.xiaolyuh.page;

import java.io.Serializable;

import java.util.Collection;

import java.util.List;

import com.github.pagehelper.Page;

/**

  • 对Page<E>结果进行包装

  • <p/>

  • 新增分页的多项属性,主要参考:http://bbs.csdn.net/topics/360010907

  • @author liuzh/abel533/isea533

  • @version 3.3.0

  • @since 3.2.2

  • 项目地址 : http://git.oschina.net/free/Mybatis_PageHelper

    */

    @SuppressWarnings({"rawtypes", "unchecked"})
    public class PageInfo<T> implements Serializable {
    private static final long serialVersionUID = 1L;

    //当前页

    private int pageNum;

    //每页的数量

    private int pageSize;

    //总记录数

    private long total;

    //总页数

    private int pages;

    //结果集

    private List<T> list;
    //是否为第一页

    private boolean isFirstPage = false;

    //是否为最后一页

    private boolean isLastPage = false;

    public PageInfo() {

    }

    /**

    • 包装Page对象

    • @param list

      */

      public PageInfo(List<T> list) {
      if (list instanceof Page) {

      Page page = (Page) list;

      this.pageNum = page.getPageNum();

      this.pageSize = page.getPageSize();

       <span class="hljs-keyword" style="font-weight:700">this</span>.pages = page.getPages();</br>
       <span class="hljs-keyword" style="font-weight:700">this</span>.list = page;</br>
       <span class="hljs-keyword" style="font-weight:700">this</span>.total = page.getTotal();</br>
      

      } else if (list instanceof Collection) {

      this.pageNum = 1;

      this.pageSize = list.size();

       <span class="hljs-keyword" style="font-weight:700">this</span>.pages = <span class="hljs-number" style="color:teal">1</span>;</br>
       <span class="hljs-keyword" style="font-weight:700">this</span>.list = list;</br>
       <span class="hljs-keyword" style="font-weight:700">this</span>.total = list.size();</br></br>
      

      }

      if (list instanceof Collection) {

      //判断页面边界

      judgePageBoudary();

      }

      }

    /**

    • 判定页面边界
      */
      private void judgePageBoudary() {

      isFirstPage = pageNum == 1;

      isLastPage = pageNum == pages;

      }

    public int getPageNum() {

    return pageNum;

    }



    public void setPageNum(int pageNum) {

    this.pageNum = pageNum;

    }

    public int getPageSize() {

    return pageSize;

    }

    public void setPageSize(int pageSize) {

    this.pageSize = pageSize;

    }

    public long getTotal() {

    return total;

    }

    public void setTotal(long total) {

    this.total = total;

    }

    public int getPages() {

    return pages;

    }

    public void setPages(int pages) {

    this.pages = pages;

    }

    public List<T> getList() {

    return list;

    }

    public void setList(List<T> list) {

    this.list = list;

    }

    public boolean isIsFirstPage() {

    return isFirstPage;

    }

    public void setIsFirstPage(boolean isFirstPage) {

    this.isFirstPage = isFirstPage;

    }

    public boolean isIsLastPage() {

    return isLastPage;

    }

    public void setIsLastPage(boolean isLastPage) {

    this.isLastPage = isLastPage;

    }

    @Override
    public String toString() {
    final StringBuffer sb = new StringBuffer("PageInfo{");
    sb.append("pageNum=").append(pageNum);

    sb.append(", pageSize=").append(pageSize);

    sb.append(", total=").append(total);

    sb.append(", pages=").append(pages);

    sb.append(", list=").append(list);

    sb.append(", isFirstPage=").append(isFirstPage);

    sb.append(", isLastPage=").append(isLastPage);

    sb.append(", navigatepageNums=");

    sb.append('}');

    return sb.toString();

    }

    }

测试类

package com.xiaolyuh;

import com.github.pagehelper.Page;

import com.xiaolyuh.domain.model.Person;

import com.xiaolyuh.page.PageInfo;

import com.xiaolyuh.service.PersonService;

import org.junit.Assert;

import org.junit.Before;

import org.junit.Test;

import org.junit.runner.RunWith;

import com.alibaba.fastjson.JSON;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit4.SpringRunner;



import java.util.List;

@RunWith(SpringRunner.class)

@SpringBootTest

public class PersonMapperTests {



private Logger logger = LoggerFactory.getLogger(PersonMapperTests.class);

<span class="hljs-annotation" style="">@Autowired</span></br>
<span class="hljs-keyword" style="font-weight:700">private</span> PersonService personService;</br>

<span class="hljs-annotation" style="">@Before</span></br>
<span class="hljs-function" style=""><span class="hljs-keyword" style="font-weight:700">public</span> <span class="hljs-keyword" style="font-weight:700">void</span> <span class="hljs-title" style="color:rgb(153,0,0); font-weight:700">testInsert</span><span class="hljs-params" style="">()</span> </span>{</br>
	Person person = <span class="hljs-keyword" style="font-weight:700">new</span> Person();</br>
	person.setName(<span class="hljs-string" style="color:rgb(221,17,68)">"测试"</span>);</br>
	person.setAddress(<span class="hljs-string" style="color:rgb(221,17,68)">"address"</span>);</br>
	person.setAge(<span class="hljs-number" style="color:teal">10</span>);</br>
	personService.insert(person);</br></br>

	Assert.assertNotNull(person.getId());</br>
	logger.debug(JSON.toJSONString(person));</br>
}</br>

<span class="hljs-annotation" style="">@Test</span>
<span class="hljs-function" style=""><span class="hljs-keyword" style="font-weight:700">public</span> <span class="hljs-keyword" style="font-weight:700">void</span> <span class="hljs-title" style="color:rgb(153,0,0); font-weight:700">testFindAll</span><span class="hljs-params" style="">()</span> </span>{</br>
	List&lt;Person&gt; persons = personService.findAll();</br></br>

	Assert.assertNotNull(persons);</br>
	logger.debug(JSON.toJSONString(persons));</br>
}</br>

<span class="hljs-annotation" style="">@Test</span></br>
<span class="hljs-function" style=""><span class="hljs-keyword" style="font-weight:700">public</span> <span class="hljs-keyword" style="font-weight:700">void</span> <span class="hljs-title" style="color:rgb(153,0,0); font-weight:700">testFindByPage</span><span class="hljs-params" style="">()</span> </span>{</br>
	Page&lt;Person&gt; persons = personService.findByPage(<span class="hljs-number" style="color:teal">1</span>, <span class="hljs-number" style="color:teal">2</span>);</br>
	<span class="hljs-comment" style="color:rgb(153,153,136); font-style:italic">// 需要把Page包装成PageInfo对象才能序列化。该插件也默认实现了一个PageInfo</span></br>
	PageInfo&lt;Person&gt; pageInfo = <span class="hljs-keyword" style="font-weight:700">new</span> PageInfo&lt;&gt;(persons);</br>
	Assert.assertNotNull(persons);</br>
	logger.debug(pageInfo.toString());</br>
	logger.debug(JSON.toJSONString(pageInfo));</br>
}</br></br>

<span class="hljs-annotation" style="">@Test</span></br>
<span class="hljs-function" style=""><span class="hljs-keyword" style="font-weight:700">public</span> <span class="hljs-keyword" style="font-weight:700">void</span> <span class="hljs-title" style="color:rgb(153,0,0); font-weight:700">testCacheByPage</span><span class="hljs-params" style="">()</span> </span>{</br>
	<span class="hljs-keyword" style="font-weight:700">long</span> begin = System.currentTimeMillis();</br>
	List&lt;Person&gt; persons = personService.findAll();</br>
	<span class="hljs-keyword" style="font-weight:700">long</span> ing = System.currentTimeMillis();</br>
	personService.findAll();</br>
	<span class="hljs-keyword" style="font-weight:700">long</span> end = System.currentTimeMillis();</br>
	logger.debug(<span class="hljs-string" style="color:rgb(221,17,68)">"第一次请求时间:"</span> + (ing - begin) + <span class="hljs-string" style="color:rgb(221,17,68)">"ms"</span>);</br>
	logger.debug(<span class="hljs-string" style="color:rgb(221,17,68)">"第二次请求时间:"</span> + (end - ing) + <span class="hljs-string" style="color:rgb(221,17,68)">"ms"</span>);</br></br>

	Assert.assertNotNull(persons);</br>
	logger.debug(persons.toString());</br>
	logger.debug(JSON.toJSONString(persons));</br>
}</br>

}

  </div>
  • 相关阅读:
    在 Xcode 6 中使用矢量图( iPhone 6 置配 UI)
    在Xcode中使用Git进行源码版本控制
    UIAlertController Changes in iOS 8
    iOS8需要兼容的内容
    iOS8中提示框的使用UIAlertController(UIAlertView和UIActionSheet二合一)
    一些被提问频率最高的12个php面试题,以及对应的常规回答。
    MYSQL 优化常用方法(转载)
    mysql 性能优化方案 (转)
    练手mysqlbinlog日志恢复数据(centos6.5 64,mysql5.1)
    cnblogs博客申请完毕,以后再这里安家落户
  • 原文地址:https://www.cnblogs.com/jpfss/p/8392806.html
  • Copyright © 2020-2023  润新知