Spring Boot 集成MyBatis和Pagehelper分页插件

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

pom配置


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

  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  3. <modelVersion>4.0.0</modelVersion>

  4. <groupId>com.xiaolyuh</groupId>

  5. <artifactId>spring-boot-student-mybatis</artifactId>

  6. <version>0.0.1-SNAPSHOT</version>

  7. <packaging>jar</packaging>

  8. <name>spring-boot-student-mybatis</name>

  9. <span class="hljs-comment" style="color:rgb(153,153,136); font-style:italic">&lt;!-- 添加Spring Boot的父类依赖,这样当前项目就是Spring Boot项目了。 spring-boot-starter-parent是一个特殊的starter,他用来
  10.     提供相关的maven默认依赖, 使用它之后,常用的依赖可以省去version标签 --&gt;</span></br>
  11. <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">parent</span>&gt;</span></br>
  12.     <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>
  13.     <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>
  14.     <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>
  15.     <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>
  16. <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">parent</span>&gt;</span></br></br>
  17. <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">properties</span>&gt;</span></br>
  18.     <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>
  19.     <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>
  20.     <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>
  21. <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">properties</span>&gt;</span></br></br>
  22. <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">dependencies</span>&gt;</span></br>
  23.     <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">dependency</span>&gt;</span></br>
  24.         <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>
  25.         <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>
  26.     <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">dependency</span>&gt;</span></br>
  27.     <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">dependency</span>&gt;</span></br>
  28.         <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>
  29.         <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>
  30.     <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">dependency</span>&gt;</span></br>
  31.         <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>
  32.         <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>
  33.     <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">dependency</span>&gt;</span></br></br>
  34.     <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">dependency</span>&gt;</span></br>
  35.         <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>
  36.         <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>
  37.         <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>
  38.     <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">dependency</span>&gt;</span></br>
  39.     <span class="hljs-comment" style="color:rgb(153,153,136); font-style:italic">&lt;!--pagehelper --&gt;</span></br>
  40.     <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">dependency</span>&gt;</span></br>
  41.         <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>
  42.         <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>
  43.         <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>
  44.     <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">dependency</span>&gt;</span></br></br>
  45.     <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">dependency</span>&gt;</span></br>
  46.         <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>
  47.         <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>
  48.         <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>
  49.     <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">dependency</span>&gt;</span></br></br>
  50.     <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">dependency</span>&gt;</span></br>
  51.         <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>
  52.         <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>
  53.         <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>
  54.     <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">dependency</span>&gt;</span></br>
  55. <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">dependencies</span>&gt;</span></br></br>
  56. <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">build</span>&gt;</span></br>
  57.     <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">plugins</span>&gt;</span></br>
  58.         <span class="hljs-tag" style="color:navy">&lt;<span class="hljs-title" style="">plugin</span>&gt;</span></br>
  59.             <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>
  60.             <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>
  61.         <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">plugin</span>&gt;</span></br>
  62.     <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">plugins</span>&gt;</span></br>
  63. <span class="hljs-tag" style="color:navy">&lt;/<span class="hljs-title" style="">build</span>&gt;</span></br></br>
  64. </project>

application.properties配置

  1. server.port=80
  2. # 数据源配置
  3. spring.datasource.url=jdbc:mysql://localhost:3306/ssb_test
  4. spring.datasource.driver-class-name=com.mysql.jdbc.Driver

  5. spring.datasource.username=root

  6. spring.datasource.password=root

  7. #连接池配置

  8. #spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource

  9. #mybatis


  10. #entity扫描的包名


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


  12. #Mapper.xml所在的位置


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

  14. #pagehelper分页插件配置


  15. pagehelper.helperDialect=mysql


  16. pagehelper.reasonable=true


  17. pagehelper.supportMethodsArguments=true


  18. pagehelper.params=count=countSql

  19. #日志配置


  20. logging.level.com.xiaolyuh=debug


  21. logging.level.org.springframework.web=debug


  22. logging.level.org.springframework.transaction=debug


  23. logging.level.org.mybatis=debug


  24. debug=false




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

  1. mybatis.config-location=mybatis-config.xml配置文件的路径

  2. mybatis.type-handlers-package=扫描typeHandlers的包

  3. mybatis.check-config-location=检查配置文件是否存在

  4. mybatis.executor-type=设置执行模式(SIMPLE, REUSE, BATCH),默认为SIMPLE

Mapping XML文件

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

  1. <?xml version="1.0" encoding="UTF-8" ?>

  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

  3. <mapper namespace="com.xiaolyuh.domain.mapper.PersonMapper" >

  4. <resultMap id="BaseResultMap" type="com.xiaolyuh.domain.model.Person" >

  5. <!--

  6. WARNING - @mbggenerated

  7. This element is automatically generated by MyBatis Generator, do not modify.

  8. -->

  9. <id column="id" property="id" jdbcType="BIGINT" />

  10. <result column="name" property="name" jdbcType="VARCHAR" />

  11. <result column="age" property="age" jdbcType="INTEGER" />

  12. <result column="address" property="address" jdbcType="VARCHAR" />

  13. </resultMap>

  14. <sql id="Base_Column_List" >
  15. <!--

  16. WARNING - @mbggenerated

  17. This element is automatically generated by MyBatis Generator, do not modify.

  18. -->

  19. id, name, age, address
  20. </sql>

  21. <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >

  22. <!--

  23. WARNING - @mbggenerated

  24. This element is automatically generated by MyBatis Generator, do not modify.

  25. -->

  26. select

  27. <include refid="Base_Column_List" />

  28. from person

  29. where id = #{id,jdbcType=BIGINT}

  30. </select>

  31. <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >

  32. <!--

  33. WARNING - @mbggenerated

  34. This element is automatically generated by MyBatis Generator, do not modify.

  35. -->

  36. delete from person

  37. where id = #{id,jdbcType=BIGINT}

  38. </delete>

  39. <insert id="insert" parameterType="com.xiaolyuh.domain.model.Person" >

  40. <!--

  41. WARNING - @mbggenerated

  42. This element is automatically generated by MyBatis Generator, do not modify.

  43. -->

  44. <selectKey resultType="java.lang.Long" keyProperty="id" order="AFTER" >

  45. SELECT LAST_INSERT_ID()

  46. </selectKey>

  47. insert into person (name, age, address

  48. )

  49. values (#{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER}, #{address,jdbcType=VARCHAR}

  50. )

  51. </insert>

  52. <insert id="insertSelective" parameterType="com.xiaolyuh.domain.model.Person" >

  53. <!--

  54. WARNING - @mbggenerated

  55. This element is automatically generated by MyBatis Generator, do not modify.

  56. -->

  57. <selectKey resultType="java.lang.Long" keyProperty="id" order="AFTER" >

  58. SELECT LAST_INSERT_ID()

  59. </selectKey>

  60. insert into person

  61. <trim prefix="(" suffix=")" suffixOverrides="," >

  62. <if test="name != null" >

  63. name,

  64. </if>

  65. <if test="age != null" >

  66. age,

  67. </if>

  68. <if test="address != null" >

  69. address,

  70. </if>

  71. </trim>

  72. <trim prefix="values (" suffix=")" suffixOverrides="," >

  73. <if test="name != null" >
  74. #{name,jdbcType=VARCHAR},

  75. </if>

  76. <if test="age != null" >

  77. #{age,jdbcType=INTEGER},

  78. </if>

  79. <if test="address != null" >

  80. #{address,jdbcType=VARCHAR},

  81. </if>

  82. </trim>

  83. </insert>

  84. <update id="updateByPrimaryKeySelective" parameterType="com.xiaolyuh.domain.model.Person" >

  85. <!--

  86. WARNING - @mbggenerated

  87. This element is automatically generated by MyBatis Generator, do not modify.

  88. -->

  89. update person

  90. <set >

  91. <if test="name != null" >

  92. name = #{name,jdbcType=VARCHAR},

  93. </if>

  94. <if test="age != null" >

  95. age = #{age,jdbcType=INTEGER},

  96. </if>

  97. <if test="address != null" >

  98. address = #{address,jdbcType=VARCHAR},

  99. </if>

  100. </set>

  101. where id = #{id,jdbcType=BIGINT}

  102. </update>

  103. <update id="updateByPrimaryKey" parameterType="com.xiaolyuh.domain.model.Person" >

  104. <!--

  105. WARNING - @mbggenerated

  106. This element is automatically generated by MyBatis Generator, do not modify.

  107. -->

  108. update person

  109. set name = #{name,jdbcType=VARCHAR},

  110. age = #{age,jdbcType=INTEGER},

  111. address = #{address,jdbcType=VARCHAR}

  112. where id = #{id,jdbcType=BIGINT}

  113. </update>

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


  115. select


  116. <include refid="Base_Column_List" />

  117. from person


  118. </select>

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


  120. select


  121. <include refid="Base_Column_List" />


  122. from person


  123. </select>


  124. </mapper>

DAO层Mapper类

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

  1. package com.xiaolyuh.domain.mapper;
  2. import com.github.pagehelper.Page;


  3. import com.xiaolyuh.domain.model.Person;


  4. import org.apache.ibatis.annotations.Mapper;

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


  7. public interface PersonMapper
    {
  8. <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>
  9. <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>
  10. <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>
  11. <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>
  12. <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>
  13. <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>
  14. <span class="hljs-comment" style="color:rgb(153,153,136); font-style:italic">/**</br>
  15.  * 获取所有数据</br>
  16.  * <span class="hljs-doctag" style="color:rgb(221,17,68)">@return</span></br>
  17.  */</span></br>
  18. <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>
  19. <span class="hljs-comment" style="color:rgb(153,153,136); font-style:italic">/**</br>
  20.  * 分页查询数据</br>
  21.  * <span class="hljs-doctag" style="color:rgb(221,17,68)">@return</span></br>
  22.  */</span></br>
  23. <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>
  24. }

实体类

  1. package com.xiaolyuh.domain.model;
  2. public class Person {
  3. <span class="hljs-keyword" style="font-weight:700">private</span> Long id;</br>


  4. /**

  5. * 名称

  6. */

  7. private String name;

  8. <span class="hljs-comment" style="color:rgb(153,153,136); font-style:italic">/**</br>
  9.  * 年龄</br>
  10.  */</span></br>
  11. <span class="hljs-keyword" style="font-weight:700">private</span> Integer age;</br>
  12. <span class="hljs-comment" style="color:rgb(153,153,136); font-style:italic">/**</br>
  13.  * 地址</br>
  14.  */</span></br>
  15. <span class="hljs-keyword" style="font-weight:700">private</span> String address;</br>
  16. <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>
  17.     <span class="hljs-keyword" style="font-weight:700">return</span> id;</br>
  18. }</br>
  19. <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>
  20.     <span class="hljs-keyword" style="font-weight:700">this</span>.id = id;</br>
  21. }</br>
  22. <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>
  23.     <span class="hljs-keyword" style="font-weight:700">return</span> name;</br>
  24. }</br>
  25. <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>
  26.     <span class="hljs-keyword" style="font-weight:700">this</span>.name = name;</br>
  27. }</br></br>
  28. <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>
  29.     <span class="hljs-keyword" style="font-weight:700">return</span> age;</br>
  30. }</br>
  31. <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>
  32.     <span class="hljs-keyword" style="font-weight:700">this</span>.age = age;</br>
  33. }</br></br>
  34. <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>
  35.     <span class="hljs-keyword" style="font-weight:700">return</span> address;</br>
  36. }</br></br>
  37. <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>
  38.     <span class="hljs-keyword" style="font-weight:700">this</span>.address = address;</br>
  39. }</br>
  40. }

Service层

接口

  1. package com.xiaolyuh.service;
  2. import com.github.pagehelper.Page;


  3. import com.xiaolyuh.domain.model.Person;

  4. import java.util.List;

  5. /**
    • 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);



    • }

实现类

  1. package com.xiaolyuh.service.impl;
  2. import com.github.pagehelper.Page;


  3. import com.github.pagehelper.PageHelper;


  4. import com.xiaolyuh.domain.mapper.PersonMapper;


  5. import com.xiaolyuh.domain.model.Person;


  6. import com.xiaolyuh.service.PersonService;


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


  8. import org.springframework.stereotype.Service;


  9. import org.springframework.transaction.annotation.Transactional;

  10. import java.util.List;
  11. /**
    • 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);


    • }
  12. }

分页的包装类PageInfo

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

  1. package com.xiaolyuh.page;
  2. import java.io.Serializable;


  3. import java.util.Collection;


  4. import java.util.List;

  5. import com.github.pagehelper.Page;

  6. /**
    • 对Page<E>结果进行包装
    • <p/>
    • @author liuzh/abel533/isea533
    • @version 3.3.0
    • @since 3.2.2
    • */


    • @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();


    • }


    • }

测试类

  1. package com.xiaolyuh;
  2. import com.github.pagehelper.Page;


  3. import com.xiaolyuh.domain.model.Person;


  4. import com.xiaolyuh.page.PageInfo;


  5. import com.xiaolyuh.service.PersonService;


  6. import org.junit.Assert;


  7. import org.junit.Before;


  8. import org.junit.Test;


  9. import org.junit.runner.RunWith;


  10. import com.alibaba.fastjson.JSON;


  11. import org.slf4j.Logger;


  12. import org.slf4j.LoggerFactory;


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


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


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





  16. import java.util.List;

  17. @RunWith(SpringRunner.class)


  18. @SpringBootTest


  19. public class PersonMapperTests {





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

  21. <span class="hljs-annotation" style="">@Autowired</span></br>
  22. <span class="hljs-keyword" style="font-weight:700">private</span> PersonService personService;</br>
  23. <span class="hljs-annotation" style="">@Before</span></br>
  24. <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>
  25. 	Person person = <span class="hljs-keyword" style="font-weight:700">new</span> Person();</br>
  26. 	person.setName(<span class="hljs-string" style="color:rgb(221,17,68)">"测试"</span>);</br>
  27. 	person.setAddress(<span class="hljs-string" style="color:rgb(221,17,68)">"address"</span>);</br>
  28. 	person.setAge(<span class="hljs-number" style="color:teal">10</span>);</br>
  29. 	personService.insert(person);</br></br>
  30. 	Assert.assertNotNull(person.getId());</br>
  31. 	logger.debug(JSON.toJSONString(person));</br>
  32. }</br>
  33. <span class="hljs-annotation" style="">@Test</span>
  34. <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>
  35. 	List&lt;Person&gt; persons = personService.findAll();</br></br>
  36. 	Assert.assertNotNull(persons);</br>
  37. 	logger.debug(JSON.toJSONString(persons));</br>
  38. }</br>
  39. <span class="hljs-annotation" style="">@Test</span></br>
  40. <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>
  41. 	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>
  42. 	<span class="hljs-comment" style="color:rgb(153,153,136); font-style:italic">// 需要把Page包装成PageInfo对象才能序列化。该插件也默认实现了一个PageInfo</span></br>
  43. 	PageInfo&lt;Person&gt; pageInfo = <span class="hljs-keyword" style="font-weight:700">new</span> PageInfo&lt;&gt;(persons);</br>
  44. 	Assert.assertNotNull(persons);</br>
  45. 	logger.debug(pageInfo.toString());</br>
  46. 	logger.debug(JSON.toJSONString(pageInfo));</br>
  47. }</br></br>
  48. <span class="hljs-annotation" style="">@Test</span></br>
  49. <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>
  50. 	<span class="hljs-keyword" style="font-weight:700">long</span> begin = System.currentTimeMillis();</br>
  51. 	List&lt;Person&gt; persons = personService.findAll();</br>
  52. 	<span class="hljs-keyword" style="font-weight:700">long</span> ing = System.currentTimeMillis();</br>
  53. 	personService.findAll();</br>
  54. 	<span class="hljs-keyword" style="font-weight:700">long</span> end = System.currentTimeMillis();</br>
  55. 	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>
  56. 	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>
  57. 	Assert.assertNotNull(persons);</br>
  58. 	logger.debug(persons.toString());</br>
  59. 	logger.debug(JSON.toJSONString(persons));</br>
  60. }</br>
  61. }

  1. </div>

Spring Boot+Mybatis+Pagehelper分页的更多相关文章

  1. spring boot 整合pagehelper分页插件

    Spring Boot 整合pagehelper分页插件 测试环境: spring boot  版本 2.0.0.M7 mybatis starter 版本  1.3.1 jdk 1.8 ------ ...

  2. Spring Boot + MyBatis + Pagehelper 配置多数据源

    前言: 本文为springboot结合mybatis配置多数据源,在项目当中很多情况是使用主从数据源来读写分离,还有就是操作多库,本文介绍如何一个项目同时使用2个数据源. 也希望大家带着思考去学习!博 ...

  3. Spring boot Mybatis 整合(完整版)

    个人开源项目 springboot+mybatis+thymeleaf+docker构建的个人站点开源项目(集成了个人主页.个人作品.个人博客) 朋友自制的springboot接口文档组件swagge ...

  4. 【转】spring boot mybatis 读取配置文件

    spring boot mybatis 配置整理 一.加载mybatis的配置 1.手写配置,写死在代码里 import java.io.IOException; import java.util.P ...

  5. Spring Boot + MyBatis + Druid + Redis + Thymeleaf 整合小结

    Spring Boot + MyBatis + Druid + Redis + Thymeleaf 整合小结 这两天闲着没事想利用**Spring Boot**加上阿里的开源数据连接池**Druid* ...

  6. 详解spring boot mybatis全注解化

    本文重点介绍spring boot mybatis 注解化的实例代码 1.pom.xml //引入mybatis <dependency> <groupId>org.mybat ...

  7. (45). Spring Boot MyBatis连接Mysql数据库【从零开始学Spring Boot】

    大家在开发的时候,会喜欢jdbcTemplate操作数据库,有喜欢JPA操作数据库的,有喜欢MyBatis操作数据库的,对于这些我个人觉得哪个使用顺手就使用哪个就好了,并没有一定要使用哪个,个人在实际 ...

  8. spring boot + mybatis + layui + shiro后台权限管理系统

    后台管理系统 版本更新 后续版本更新内容 链接入口: springboot + shiro之登录人数限制.登录判断重定向.session时间设置:https://blog.51cto.com/wyai ...

  9. spring boot+mybatis搭建项目

    一.创建spring boot项目 1.File->New->Project 2.选择 Spring Initializr ,然后选择默认的 url 点击[Next]: 3.修改项目信息 ...

随机推荐

  1. WPF转换器

    1. 前文 在普遍的也业务系统中, 数据要驱动到操作的用户界面, 它实际储存的方式和表达方式会多种多样, 数据库存储的数字 0或1, 在界面用户看到显示只是 成功或失败, 或者存储的字符.或更多的格式 ...

  2. 洛谷 P2837 晚餐队列安排

    P2837 晚餐队列安排 题目背景 Usaco Feb08 Bronze 题目描述 为了避免餐厅过分拥挤,FJ要求奶牛们分2批就餐.每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想,所有第2批就餐 ...

  3. Javascript:存储和读取cookie

    Cookie是网页开发中的一项重要技术,用于在本地存储一些信息(如username,password.登录状态)以便用户下一次訪问时使用(或在其他页面使用). cookie的格式是键值对,多个键值对之 ...

  4. google 分屏 横屏模式 按home键界面错乱故障分析(二) 分屏的启动过程

    google 进入分屏后在横屏模式按home键界面错乱(二) 你确定你了解分屏的整个流程? imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quo ...

  5. WIN8.1的安装和打开"这台电脑"速度很慢的解决办法

    WIN8.1的安装和打开"这台电脑"速度很慢的解决办法 对于非服务器用的电脑,如果电脑的内存在2G或更高,首推的操作系统是 WINDOWS8.1 64位企业版,用了就知道,没有比这流畅懂事的操作系统. ...

  6. mahout算法库(四)

    mahout算法库 分为三大块 1.聚类算法 2.协同过滤算法(一般用于推荐) 协同过滤算法也可以称为推荐算法!!! 3.分类算法 算法类 算法名 中文名 分类算法               Log ...

  7. jmeter响应数据中文乱码问题

    进入jmeter安装文件目录:D:\Program File\apache-jmeter-2.13\apache-jmeter-2.13\bin\ 修改jmeter.properties文件,在最下方 ...

  8. setInterval 传参数

    <script type="text/javascript" > window.onload=function(){ for(var i=1;i<3;i++){ ...

  9. setting-在设置中添加新的选项

    如下图的“通知栏调出方式” 具体实现如下 1.在 res/xml/settings_headers.xml 文件中添加如下内容 <preference-headers xmlns:android ...

  10. amaze样例页面分析(一)

    amaze样例页面分析(一) 一.总结 1.从审查(inspect)中是很清楚的可以弄清楚这些part之间的结构关系的 2.一者在于弄清楚他们之间的结构关系,二者在于知道结构的每一部分是干嘛的 3.i ...