Spring Boot 集成MyBatis和Pagehelper分页插件

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

Spring Boot+Mybatis+Pagehelper分页_SpringBoot

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 style="color:rgb(153,153,136); font-style:italic"><!-- 添加Spring Boot的父类依赖,这样当前项目就是Spring Boot项目了。 spring-boot-starter-parent是一个特殊的starter,他用来
提供相关的maven默认依赖, 使用它之后,常用的依赖可以省去version标签 --></span></br>
<span style="color:navy"><<span style="">parent</span>></span></br>
<span style="color:navy"><<span style="">groupId</span>></span>org.springframework.boot<span style="color:navy"></<span style="">groupId</span>></span></br>
<span style="color:navy"><<span style="">artifactId</span>></span>spring-boot-starter-parent<span style="color:navy"></<span style="">artifactId</span>></span></br>
<span style="color:navy"><<span style="">version</span>></span>1.5.3.RELEASE<span style="color:navy"></<span style="">version</span>></span></br>
<span style="color:navy"><<span style="">relativePath</span>/></span> <span style="color:rgb(153,153,136); font-style:italic"><!-- lookup parent from repository --></span></br>
<span style="color:navy"></<span style="">parent</span>></span></br></br>

<span style="color:navy"><<span style="">properties</span>></span></br>
<span style="color:navy"><<span style="">project.build.sourceEncoding</span>></span>UTF-8<span style="color:navy"></<span style="">project.build.sourceEncoding</span>></span></br>
<span style="color:navy"><<span style="">project.reporting.outputEncoding</span>></span>UTF-8<span style="color:navy"></<span style="">project.reporting.outputEncoding</span>></span></br>
<span style="color:navy"><<span style="">java.version</span>></span>1.8<span style="color:navy"></<span style="">java.version</span>></span></br>
<span style="color:navy"></<span style="">properties</span>></span></br></br>

<span style="color:navy"><<span style="">dependencies</span>></span></br>
<span style="color:navy"><<span style="">dependency</span>></span></br>
<span style="color:navy"><<span style="">groupId</span>></span>org.springframework.boot<span style="color:navy"></<span style="">groupId</span>></span></br>
<span style="color:navy"><<span style="">artifactId</span>></span>spring-boot-starter<span style="color:navy"></<span style="">artifactId</span>></span></br>
<span style="color:navy"></<span style="">dependency</span>></span></br>
<span style="color:navy"><<span style="">dependency</span>></span></br>
<span style="color:navy"><<span style="">groupId</span>></span>org.springframework.boot<span style="color:navy"></<span style="">groupId</span>></span></br>
<span style="color:navy"><<span style="">artifactId</span>></span>spring-boot-starter-web<span style="color:navy"></<span style="">artifactId</span>></span></br>
<span style="color:navy"><<span style="">dependency</span>></span></br>
<span style="color:navy"><<span style="">groupId</span>></span>mysql<span style="color:navy"></<span style="">groupId</span>></span></br>
<span style="color:navy"><<span style="">artifactId</span>></span>mysql-connector-java<span style="color:navy"></<span style="">artifactId</span>></span></br>
<span style="color:navy"></<span style="">dependency</span>></span></br></br>

<span style="color:navy"><<span style="">dependency</span>></span></br>
<span style="color:navy"><<span style="">groupId</span>></span>org.mybatis.spring.boot<span style="color:navy"></<span style="">groupId</span>></span></br>
<span style="color:navy"><<span style="">artifactId</span>></span>mybatis-spring-boot-starter<span style="color:navy"></<span style="">artifactId</span>></span></br>
<span style="color:navy"><<span style="">version</span>></span>1.3.0<span style="color:navy"></<span style="">version</span>></span></br>
<span style="color:navy"></<span style="">dependency</span>></span></br>
<span style="color:rgb(153,153,136); font-style:italic"><!--pagehelper --></span></br>
<span style="color:navy"><<span style="">dependency</span>></span></br>
<span style="color:navy"><<span style="">groupId</span>></span>com.github.pagehelper<span style="color:navy"></<span style="">groupId</span>></span></br>
<span style="color:navy"><<span style="">artifactId</span>></span>pagehelper-spring-boot-starter<span style="color:navy"></<span style="">artifactId</span>></span></br>
<span style="color:navy"><<span style="">version</span>></span>1.1.1<span style="color:navy"></<span style="">version</span>></span></br>
<span style="color:navy"></<span style="">dependency</span>></span></br></br>

<span style="color:navy"><<span style="">dependency</span>></span></br>
<span style="color:navy"><<span style="">groupId</span>></span>com.alibaba<span style="color:navy"></<span style="">groupId</span>></span></br>
<span style="color:navy"><<span style="">artifactId</span>></span>fastjson<span style="color:navy"></<span style="">artifactId</span>></span></br>
<span style="color:navy"><<span style="">version</span>></span>1.2.31<span style="color:navy"></<span style="">version</span>></span></br>
<span style="color:navy"></<span style="">dependency</span>></span></br></br>

<span style="color:navy"><<span style="">dependency</span>></span></br>
<span style="color:navy"><<span style="">groupId</span>></span>org.springframework.boot<span style="color:navy"></<span style="">groupId</span>></span></br>
<span style="color:navy"><<span style="">artifactId</span>></span>spring-boot-starter-test<span style="color:navy"></<span style="">artifactId</span>></span></br>
<span style="color:navy"><<span style="">scope</span>></span>test<span style="color:navy"></<span style="">scope</span>></span></br>
<span style="color:navy"></<span style="">dependency</span>></span></br>
<span style="color:navy"></<span style="">dependencies</span>></span></br></br>

<span style="color:navy"><<span style="">build</span>></span></br>
<span style="color:navy"><<span style="">plugins</span>></span></br>
<span style="color:navy"><<span style="">plugin</span>></span></br>
<span style="color:navy"><<span style="">groupId</span>></span>org.springframework.boot<span style="color:navy"></<span style="">groupId</span>></span></br>
<span style="color:navy"><<span style="">artifactId</span>></span>spring-boot-maven-plugin<span style="color:navy"></<span style="">artifactId</span>></span></br>
<span style="color:navy"></<span style="">plugin</span>></span></br>
<span style="color:navy"></<span style="">plugins</span>></span></br>
<span style="color:navy"></<span style="">build</span>></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 style=""><span style="font-weight:700">int</span> <span style="color:rgb(153,0,0); font-weight:700">deleteByPrimaryKey</span><span style="">(Long id)</span></span>;</br></br>

<span style=""><span style="font-weight:700">int</span> <span style="color:rgb(153,0,0); font-weight:700">insert</span><span style="">(Person record)</span></span>;</br></br>

<span style=""><span style="font-weight:700">int</span> <span style="color:rgb(153,0,0); font-weight:700">insertSelective</span><span style="">(Person record)</span></span>;</br>

<span style="">Person <span style="color:rgb(153,0,0); font-weight:700">selectByPrimaryKey</span><span style="">(Long id)</span></span>;</br></br>

<span style=""><span style="font-weight:700">int</span> <span style="color:rgb(153,0,0); font-weight:700">updateByPrimaryKeySelective</span><span style="">(Person record)</span></span>;</br></br>

<span style=""><span style="font-weight:700">int</span> <span style="color:rgb(153,0,0); font-weight:700">updateByPrimaryKey</span><span style="">(Person record)</span></span>;</br></br>

<span style="color:rgb(153,153,136); font-style:italic">/**</br>
* 获取所有数据</br>
* <span style="color:rgb(221,17,68)">@return</span></br>
*/</span></br>
<span style="">List<Person> <span style="color:rgb(153,0,0); font-weight:700">findAll</span><span style="">()</span></span>;</br>

<span style="color:rgb(153,153,136); font-style:italic">/**</br>
* 分页查询数据</br>
* <span style="color:rgb(221,17,68)">@return</span></br>
*/</span></br>
<span style="">Page<Person> <span style="color:rgb(153,0,0); font-weight:700">findByPage</span><span style="">()</span></span>;</br>

}


实体类

package com.xiaolyuh.domain.model;
public class Person {

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


/**

* 名称

*/
private String name;
<span style="color:rgb(153,153,136); font-style:italic">/**</br>
* 年龄</br>
*/</span></br>
<span style="font-weight:700">private</span> Integer age;</br>

<span style="color:rgb(153,153,136); font-style:italic">/**</br>
* 地址</br>
*/</span></br>
<span style="font-weight:700">private</span> String address;</br>

<span style=""><span style="font-weight:700">public</span> Long <span style="color:rgb(153,0,0); font-weight:700">getId</span><span style="">()</span> </span>{</br>
<span style="font-weight:700">return</span> id;</br>
}</br>

<span style=""><span style="font-weight:700">public</span> <span style="font-weight:700">void</span> <span style="color:rgb(153,0,0); font-weight:700">setId</span><span style="">(Long id)</span> </span>{</br>
<span style="font-weight:700">this</span>.id = id;</br>
}</br>

<span style=""><span style="font-weight:700">public</span> String <span style="color:rgb(153,0,0); font-weight:700">getName</span><span style="">()</span> </span>{</br>
<span style="font-weight:700">return</span> name;</br>
}</br>

<span style=""><span style="font-weight:700">public</span> <span style="font-weight:700">void</span> <span style="color:rgb(153,0,0); font-weight:700">setName</span><span style="">(String name)</span> </span>{</br>
<span style="font-weight:700">this</span>.name = name;</br>
}</br></br>

<span style=""><span style="font-weight:700">public</span> Integer <span style="color:rgb(153,0,0); font-weight:700">getAge</span><span style="">()</span> </span>{</br>
<span style="font-weight:700">return</span> age;</br>
}</br>

<span style=""><span style="font-weight:700">public</span> <span style="font-weight:700">void</span> <span style="color:rgb(153,0,0); font-weight:700">setAge</span><span style="">(Integer age)</span> </span>{</br>
<span style="font-weight:700">this</span>.age = age;</br>
}</br></br>

<span style=""><span style="font-weight:700">public</span> String <span style="color:rgb(153,0,0); font-weight:700">getAddress</span><span style="">()</span> </span>{</br>
<span style="font-weight:700">return</span> address;</br>
}</br></br>

<span style=""><span style="font-weight:700">public</span> <span style="font-weight:700">void</span> <span style="color:rgb(153,0,0); font-weight:700">setAddress</span><span style="">(String address)</span> </span>{</br>
<span 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/>

新增分页的多项属性


@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  style="font-weight:700">this</span>.pages = page.getPages();</br>
<span style="font-weight:700">this</span>.list = page;</br>
<span style="font-weight:700">this</span>.total = page.getTotal();</br>

} else if (list instanceof Collection) {

this.pageNum = 1;

this.pageSize = list.size();

<span  style="font-weight:700">this</span>.pages = <span  style="color:teal">1</span>;</br>
<span style="font-weight:700">this</span>.list = list;</br>
<span 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 style="">@Autowired</span></br>
<span style="font-weight:700">private</span> PersonService personService;</br>

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

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

<span style="">@Test</span>
<span style=""><span style="font-weight:700">public</span> <span style="font-weight:700">void</span> <span style="color:rgb(153,0,0); font-weight:700">testFindAll</span><span style="">()</span> </span>{</br>
List<Person> persons = personService.findAll();</br></br>

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

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

<span style="">@Test</span></br>
<span style=""><span style="font-weight:700">public</span> <span style="font-weight:700">void</span> <span style="color:rgb(153,0,0); font-weight:700">testCacheByPage</span><span style="">()</span> </span>{</br>
<span style="font-weight:700">long</span> begin = System.currentTimeMillis();</br>
List<Person> persons = personService.findAll();</br>
<span style="font-weight:700">long</span> ing = System.currentTimeMillis();</br>
personService.findAll();</br>
<span style="font-weight:700">long</span> end = System.currentTimeMillis();</br>
logger.debug(<span style="color:rgb(221,17,68)">"第一次请求时间:"</span> + (ing - begin) + <span style="color:rgb(221,17,68)">"ms"</span>);</br>
logger.debug(<span style="color:rgb(221,17,68)">"第二次请求时间:"</span> + (end - ing) + <span 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>