|
@@ -1,7 +1,14 @@
|
|
|
package com.baomidou.mybatisplus.test;
|
|
|
|
|
|
+import com.alibaba.fastjson2.JSON;
|
|
|
+import com.alibaba.fastjson2.JSONB;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.metadata.OrderItem;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
|
|
+import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
+import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
+import com.google.gson.Gson;
|
|
|
import org.apache.ibatis.reflection.property.PropertyCopier;
|
|
|
import org.junit.jupiter.api.Assertions;
|
|
|
import org.junit.jupiter.api.Test;
|
|
@@ -11,15 +18,20 @@ import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.cglib.beans.BeanCopier;
|
|
|
|
|
|
import java.util.Collections;
|
|
|
+import java.util.List;
|
|
|
|
|
|
/**
|
|
|
* @author nieqiurong 2020/3/20.
|
|
|
*/
|
|
|
class PageTest {
|
|
|
|
|
|
+ private final ObjectMapper objectMapper = new ObjectMapper();
|
|
|
+
|
|
|
+ private final Gson gson = new Gson();
|
|
|
+
|
|
|
@Test
|
|
|
@EnabledOnJre(JRE.JAVA_8)
|
|
|
- void testCopy(){
|
|
|
+ void testCopy() {
|
|
|
Page page1 = new Page(2, 10, 100, false);
|
|
|
page1.setOptimizeCountSql(false);
|
|
|
page1.setOrders(Collections.singletonList(OrderItem.asc("test")));
|
|
@@ -52,4 +64,107 @@ class PageTest {
|
|
|
Assertions.assertEquals(10, page4.getSize());
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ void testPageToJson() throws JsonProcessingException {
|
|
|
+ var page = new Page<>(1, 10, 2000);
|
|
|
+ page.setOrders(List.of(OrderItem.asc("a")));
|
|
|
+ //page无法序列化排序等其他属性 {"records":[],"total":2000,"size":10,"current":1,"pages":200}
|
|
|
+ assertPage(page);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testPageDtoToJson() throws JsonProcessingException {
|
|
|
+ var page = new PageDTO<>(1, 10, 100);
|
|
|
+ assertPageDto(page);
|
|
|
+
|
|
|
+ page = new PageDTO<>(1, 10, 100);
|
|
|
+ page.setOptimizeCountSql(false);
|
|
|
+ assertPageDto(page);
|
|
|
+
|
|
|
+ page = new PageDTO<>(1, 10, 100);
|
|
|
+ page.setSearchCount(false);
|
|
|
+ assertPageDto(page);
|
|
|
+
|
|
|
+ page = new PageDTO<>(1, 10, 100);
|
|
|
+ page.setOptimizeJoinOfCountSql(false);
|
|
|
+ assertPageDto(page);
|
|
|
+
|
|
|
+ page = new PageDTO<>(1, 10, 100);
|
|
|
+ page.setRecords(List.of("1", "2", "3"));
|
|
|
+ assertPageDto(page);
|
|
|
+
|
|
|
+ page = new PageDTO<>(1, 10, 100);
|
|
|
+ page.setRecords(List.of("1", "2", "3"));
|
|
|
+ assertPageDto(page);
|
|
|
+
|
|
|
+ page = new PageDTO<>(1, 10, 100);
|
|
|
+ page.setMaxLimit(1000L);
|
|
|
+ page.setRecords(List.of("1", "2", "3"));
|
|
|
+ assertPageDto(page);
|
|
|
+
|
|
|
+ page = new PageDTO<>(1, 10, 100);
|
|
|
+ page.setRecords(List.of("1", "2", "3"));
|
|
|
+ page.setCountId("123");
|
|
|
+ assertPageDto(page);
|
|
|
+
|
|
|
+ page = new PageDTO<>(1, 10, 100);
|
|
|
+ page.setOrders(OrderItem.descs("a","b"));
|
|
|
+ assertPageDto(page);
|
|
|
+
|
|
|
+ page = new PageDTO<>(1, 10, 100);
|
|
|
+ page.setOrders(OrderItem.ascs("a","b"));
|
|
|
+ assertPageDto(page);
|
|
|
+
|
|
|
+ page = new PageDTO<>(1, 10, 100);
|
|
|
+ page.setRecords(List.of("1", "2", "3"));
|
|
|
+ page.setOrders(OrderItem.ascs("a","b"));
|
|
|
+ assertPageDto(page);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void assertPage(Page<?> source) throws JsonProcessingException {
|
|
|
+ toConvert(source, Page.class).forEach(target -> {
|
|
|
+ Assertions.assertEquals(source.getCurrent(), target.getCurrent());
|
|
|
+ Assertions.assertEquals(source.getTotal(), target.getTotal());
|
|
|
+ Assertions.assertEquals(source.getSize(), target.getSize());
|
|
|
+ Assertions.assertEquals(source.countId(), target.countId());
|
|
|
+ Assertions.assertEquals(source.getRecords().size(), target.getRecords().size());
|
|
|
+ Assertions.assertEquals(source.getPages(), target.getPages());
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ private <T extends IPage<?>> List<T> toConvert(T source, Class<T> tClass) throws JsonProcessingException {
|
|
|
+ return List.of(
|
|
|
+ objectMapper.readValue(objectMapper.writeValueAsString(source), tClass),
|
|
|
+ gson.fromJson(gson.toJson(source), tClass),
|
|
|
+ JSON.parseObject(JSON.toJSONString(source), tClass),
|
|
|
+ JSONB.parseObject(JSONB.toBytes(source), tClass),
|
|
|
+ com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson.JSON.toJSONString(source), tClass)
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ private void assertPageDto(PageDTO<?> source) throws JsonProcessingException {
|
|
|
+ toConvert(source, PageDTO.class).forEach(target -> {
|
|
|
+ Assertions.assertEquals(source.toString(), target.toString());
|
|
|
+ Assertions.assertEquals(source.getCurrent(), target.getCurrent());
|
|
|
+ Assertions.assertEquals(source.getTotal(), target.getTotal());
|
|
|
+ Assertions.assertEquals(source.getSize(), target.getSize());
|
|
|
+ Assertions.assertEquals(source.countId(), target.getCountId());
|
|
|
+ Assertions.assertEquals(source.countId(), target.countId());
|
|
|
+ Assertions.assertEquals(source.searchCount(), target.isSearchCount());
|
|
|
+ Assertions.assertEquals(source.searchCount(), target.searchCount());
|
|
|
+ Assertions.assertEquals(source.optimizeCountSql(), target.isOptimizeCountSql());
|
|
|
+ Assertions.assertEquals(source.optimizeCountSql(), target.optimizeCountSql());
|
|
|
+ Assertions.assertEquals(source.optimizeJoinOfCountSql(), target.optimizeJoinOfCountSql());
|
|
|
+ Assertions.assertEquals(source.optimizeJoinOfCountSql(), target.isOptimizeJoinOfCountSql());
|
|
|
+ Assertions.assertEquals(source.getRecords().size(), target.getRecords().size());
|
|
|
+ Assertions.assertEquals(source.maxLimit(), target.getMaxLimit());
|
|
|
+ Assertions.assertEquals(source.maxLimit(), target.maxLimit());
|
|
|
+ Assertions.assertEquals(source.getOrders().size(), target.getOrders().size());
|
|
|
+ Assertions.assertEquals(source.getOrders().size(), target.orders().size());
|
|
|
+ Assertions.assertEquals(source.getPages(), target.getPages());
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
}
|