Pre Merge pull request !123 from Sor1e/master
commit
510da15fae
@ -0,0 +1,28 @@
|
||||
package com.ruoyi.common.core.annotation.order;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Repeatable;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 自定义排序
|
||||
* 如何使用:
|
||||
* @DefaultOrder(column="createTime", orderType="desc", tableName="user")
|
||||
* class UserVO {
|
||||
* ...
|
||||
* }
|
||||
* startPage(UserVO.class)
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Target(ElementType.TYPE)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Repeatable(CustomOrders.class)
|
||||
public @interface CustomOrder {
|
||||
// 列名 驼峰最终会转换为下划线命名法作为最终排序列名。
|
||||
String column() default "";
|
||||
|
||||
// 列对应的表名
|
||||
String tableName() default "";
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package com.ruoyi.common.core.annotation.order;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 自定义排序组合注解
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Target({ElementType.TYPE})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Component
|
||||
public @interface CustomOrders {
|
||||
CustomOrder[] value();
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package com.ruoyi.common.core.annotation.order;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 默认排序
|
||||
* 如何使用:
|
||||
* @DefaultOrder(column="createTime", orderType="desc", tableName="user")
|
||||
* class UserVO {
|
||||
* ...
|
||||
* }
|
||||
* startPage(UserVO.class)
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Target(ElementType.TYPE)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface DefaultOrder {
|
||||
// 默认排序列 驼峰最终会转换为下划线命名法作为最终排序列名。
|
||||
String column() default "";
|
||||
// 排序类型, desc/asc
|
||||
String orderType() default "asc";
|
||||
// 表名, 可不指定
|
||||
String tableName() default "";
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package com.ruoyi.common.core.annotation.order;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 字段表别名
|
||||
* 如何使用:
|
||||
* class UserVO {
|
||||
* ...
|
||||
* @TableAlias("dept")
|
||||
* private String deptName;
|
||||
* ...
|
||||
* }
|
||||
* startPage(UserVO.class)
|
||||
* 查询多表关联时, 指定表别名, 即可简单实现完成对应的字段排序。
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Target(ElementType.FIELD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface TableAlias {
|
||||
String value() default "";
|
||||
}
|
@ -0,0 +1,125 @@
|
||||
package com.ruoyi.common.core.web.controller;
|
||||
|
||||
import com.github.pagehelper.Page;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.ruoyi.common.core.annotation.order.CustomOrder;
|
||||
import com.ruoyi.common.core.annotation.order.DefaultOrder;
|
||||
import com.ruoyi.common.core.annotation.order.TableAlias;
|
||||
import com.ruoyi.common.core.web.domain.BaseEntity;
|
||||
import com.ruoyi.common.core.web.page.PageDomain;
|
||||
import com.ruoyi.common.core.web.page.TableSupport;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.MockedStatic;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class BaseControllerTest {
|
||||
|
||||
@Test
|
||||
void testStartPageByDefaultOrder()
|
||||
{
|
||||
@DefaultOrder(tableName = "user", column = "userName")
|
||||
class UserVO {
|
||||
private String userName;
|
||||
}
|
||||
PageDomain pageDomain = new PageDomain();
|
||||
pageDomain.setPageNum(10);
|
||||
pageDomain.setPageSize(20);
|
||||
|
||||
MockedStatic<TableSupport> mocked = Mockito.mockStatic(TableSupport.class);
|
||||
mocked.when(TableSupport::buildPageRequest).thenReturn(
|
||||
pageDomain
|
||||
);
|
||||
new BaseController().startPage(UserVO.class);
|
||||
Page<Object> localPage = PageHelper.getLocalPage();
|
||||
String orderBy = localPage.getOrderBy();
|
||||
assertEquals("user.user_name asc", orderBy);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testStartPageByDefaultOrder2()
|
||||
{
|
||||
@DefaultOrder(tableName = "user", column = "user_name")
|
||||
class UserVO {
|
||||
private String userName;
|
||||
}
|
||||
PageDomain pageDomain = new PageDomain();
|
||||
pageDomain.setPageNum(10);
|
||||
pageDomain.setPageSize(20);
|
||||
|
||||
MockedStatic<TableSupport> mocked = Mockito.mockStatic(TableSupport.class);
|
||||
mocked.when(TableSupport::buildPageRequest).thenReturn(
|
||||
pageDomain
|
||||
);
|
||||
new BaseController().startPage(UserVO.class);
|
||||
Page<Object> localPage = PageHelper.getLocalPage();
|
||||
String orderBy = localPage.getOrderBy();
|
||||
assertEquals("user.user_name asc", orderBy);
|
||||
}
|
||||
@Test
|
||||
void testStartPageByTableAlias()
|
||||
{
|
||||
class UserVO {
|
||||
@TableAlias("user")
|
||||
private String userName;
|
||||
}
|
||||
PageDomain pageDomain = new PageDomain();
|
||||
pageDomain.setPageNum(10);
|
||||
pageDomain.setPageSize(20);
|
||||
pageDomain.setOrderByColumn("userName");
|
||||
MockedStatic<TableSupport> mocked = Mockito.mockStatic(TableSupport.class);
|
||||
mocked.when(TableSupport::buildPageRequest).thenReturn(
|
||||
pageDomain
|
||||
);
|
||||
new BaseController().startPage(UserVO.class);
|
||||
Page<Object> localPage = PageHelper.getLocalPage();
|
||||
String orderBy = localPage.getOrderBy();
|
||||
assertEquals("user.user_name asc", orderBy);
|
||||
}
|
||||
@Test
|
||||
void testStartPageByCustomOrder()
|
||||
{
|
||||
@CustomOrder(tableName = "user", column = "createTime")
|
||||
class UserVO extends BaseEntity {
|
||||
private String userName;
|
||||
}
|
||||
PageDomain pageDomain = new PageDomain();
|
||||
pageDomain.setPageNum(10);
|
||||
pageDomain.setPageSize(20);
|
||||
pageDomain.setOrderByColumn("createTime");
|
||||
pageDomain.setIsAsc("desc");
|
||||
|
||||
MockedStatic<TableSupport> mocked = Mockito.mockStatic(TableSupport.class);
|
||||
mocked.when(TableSupport::buildPageRequest).thenReturn(
|
||||
pageDomain
|
||||
);
|
||||
new BaseController().startPage(UserVO.class);
|
||||
Page<Object> localPage = PageHelper.getLocalPage();
|
||||
String orderBy = localPage.getOrderBy();
|
||||
assertEquals("user.create_time desc", orderBy);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testStartPageByCustomOrder2()
|
||||
{
|
||||
@CustomOrder(tableName = "user", column = "create_time")
|
||||
class UserVO extends BaseEntity {
|
||||
private String userName;
|
||||
}
|
||||
PageDomain pageDomain = new PageDomain();
|
||||
pageDomain.setPageNum(10);
|
||||
pageDomain.setPageSize(20);
|
||||
pageDomain.setOrderByColumn("createTime");
|
||||
pageDomain.setIsAsc("desc");
|
||||
|
||||
MockedStatic<TableSupport> mocked = Mockito.mockStatic(TableSupport.class);
|
||||
mocked.when(TableSupport::buildPageRequest).thenReturn(
|
||||
pageDomain
|
||||
);
|
||||
new BaseController().startPage(UserVO.class);
|
||||
Page<Object> localPage = PageHelper.getLocalPage();
|
||||
String orderBy = localPage.getOrderBy();
|
||||
assertEquals("user.create_time desc", orderBy);
|
||||
}
|
||||
}
|
Loading…
Reference in new issue