commit
99762e6121
|
@ -129,6 +129,9 @@ public class BaseController {
|
|||
}
|
||||
BeanUtils.bindProperties(page, pageParamMap);
|
||||
}
|
||||
if(log.isTraceEnabled()){
|
||||
log.trace(JSON.stringify(page));
|
||||
}
|
||||
return page;
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
|||
import com.diboot.core.entity.BaseEntity;
|
||||
import com.diboot.core.service.BaseService;
|
||||
import com.diboot.core.util.BeanUtils;
|
||||
import com.diboot.core.util.JSON;
|
||||
import com.diboot.core.util.V;
|
||||
import com.diboot.core.vo.JsonResult;
|
||||
import com.diboot.core.vo.Status;
|
||||
import com.diboot.core.vo.Pagination;
|
||||
|
@ -61,14 +61,34 @@ public abstract class BaseCrudRestController extends BaseController {
|
|||
* @return JsonResult
|
||||
* @throws Exception
|
||||
*/
|
||||
protected <T> JsonResult getEntityListWithPaging(HttpServletRequest request, Wrapper queryWrapper, Class<T> clazz) throws Exception {
|
||||
protected JsonResult getEntityListWithPaging(HttpServletRequest request, Wrapper queryWrapper) throws Exception {
|
||||
// 构建分页
|
||||
Pagination pagination = buildPagination(request);
|
||||
// 查询当前页的数据
|
||||
List entityList = getService().getEntityList(queryWrapper, pagination);
|
||||
// 返回结果
|
||||
return new JsonResult(Status.OK, entityList).bindPagination(pagination);
|
||||
}
|
||||
|
||||
/***
|
||||
* 获取某VO资源的集合
|
||||
* <p>
|
||||
* url参数示例: /metadata/list?_pageSize=20&_pageIndex=1&_orderBy=itemValue&type=GENDAR
|
||||
* </p>
|
||||
* @param request
|
||||
* @return JsonResult
|
||||
* @throws Exception
|
||||
*/
|
||||
protected <T> JsonResult getVOListWithPaging(HttpServletRequest request, Wrapper queryWrapper, Class<T> clazz) throws Exception {
|
||||
// 构建分页
|
||||
Pagination pagination = buildPagination(request);
|
||||
log.debug(JSON.stringify(pagination));
|
||||
// 查询当前页的数据
|
||||
List entityList = getService().getEntityList(queryWrapper, pagination);
|
||||
// 转换为VO
|
||||
if(V.notEmpty(entityList) && !clazz.getName().equals(entityList.get(0).getClass().getName())){
|
||||
entityList = BeanUtils.convertList(entityList, clazz);
|
||||
}
|
||||
entityList = getService().getViewObjectList(entityList, clazz);
|
||||
// 返回结果
|
||||
return new JsonResult(Status.OK, entityList).bindPagination(pagination);
|
||||
}
|
||||
|
|
|
@ -37,11 +37,6 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||
public class BaseServiceImpl<M extends BaseCrudMapper<T>, T> extends ServiceImpl<M, T> implements BaseService<T> {
|
||||
private static final Logger log = LoggerFactory.getLogger(BaseServiceImpl.class);
|
||||
|
||||
/***
|
||||
* VO类与注解的缓存
|
||||
*/
|
||||
private static Map<String, Map<String, Annotation>> CLASS_ANNOTATION_MAP = new ConcurrentHashMap<>();
|
||||
|
||||
/***
|
||||
* 获取当前的Mapper对象
|
||||
* @return
|
||||
|
@ -183,6 +178,7 @@ public class BaseServiceImpl<M extends BaseCrudMapper<T>, T> extends ServiceImpl
|
|||
@Override
|
||||
public List<KeyValue> getKeyValueList(Wrapper queryWrapper) {
|
||||
String sqlSelect = queryWrapper.getSqlSelect();
|
||||
// 最多支持3个属性:k, v, ext
|
||||
if(V.isEmpty(sqlSelect) || S.countMatches(sqlSelect, Cons.SEPARATOR_COMMA) > 2){
|
||||
log.error("调用错误: getKeyValueList必须用select依次指定返回的Key,Value, ext键值字段,如: new QueryWrapper<Metadata>().lambda().select(Metadata::getItemName, Metadata::getItemValue)");
|
||||
return Collections.emptyList();
|
||||
|
@ -275,10 +271,10 @@ public class BaseServiceImpl<M extends BaseCrudMapper<T>, T> extends ServiceImpl
|
|||
return null;
|
||||
}
|
||||
IPage<T> page = new Page<T>()
|
||||
.setCurrent(pagination.get_pageIndex())
|
||||
.setSize(pagination.get_pageSize())
|
||||
.setCurrent(pagination.getPageIndex())
|
||||
.setSize(pagination.getPageSize())
|
||||
// 如果前端传递过来了缓存的总数,则本次不再count统计
|
||||
.setTotal(pagination.get_totalCount() > 0? -1 : pagination.get_totalCount())
|
||||
.setTotal(pagination.getTotalCount() > 0? -1 : pagination.getTotalCount())
|
||||
.setAscs(S.toSnakeCase(pagination.getAscList()))
|
||||
.setDescs(S.toSnakeCase(pagination.getDescList()));
|
||||
return page;
|
||||
|
|
|
@ -1,54 +0,0 @@
|
|||
package com.diboot.core.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 集合批次迭代
|
||||
* @author Mazhicheng
|
||||
* @version v2.0
|
||||
* @date 2019/01/01
|
||||
*/
|
||||
public class BatchIterator<E> implements Iterator<List<E>> {
|
||||
/**
|
||||
* 每批次集合数量
|
||||
*/
|
||||
private int batchSize;
|
||||
/***
|
||||
* 原始list
|
||||
*/
|
||||
private List<E> originalList;
|
||||
private int index = 0;
|
||||
private List<E> result;
|
||||
private int total = 0;
|
||||
|
||||
public BatchIterator(List<E> originalList, int batchSize) {
|
||||
if (batchSize <= 0) {
|
||||
return;
|
||||
}
|
||||
this.batchSize = batchSize;
|
||||
this.originalList = originalList;
|
||||
this.total = V.notEmpty(originalList)? originalList.size() : 0;
|
||||
result = new ArrayList<>(batchSize);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return index < total;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<E> next() {
|
||||
result.clear();
|
||||
for (int i = 0; i < batchSize && index < total; i++) {
|
||||
result.add(originalList.get(index++));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
throw new UnsupportedOperationException("BatchIterator.remove未实现!");
|
||||
}
|
||||
}
|
|
@ -135,42 +135,44 @@ public class BeanUtils {
|
|||
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
|
||||
for (PropertyDescriptor descriptor : propertyDescriptors) {
|
||||
String propertyName = descriptor.getName();
|
||||
if (propMap.containsKey(propertyName)){
|
||||
if (!propMap.containsKey(propertyName)){
|
||||
continue;
|
||||
}
|
||||
Object value = propMap.get(propertyName);
|
||||
Class type = descriptor.getWriteMethod().getParameterTypes()[0];
|
||||
Object[] args = new Object[1];
|
||||
String fieldType = type.getSimpleName();
|
||||
String fieldType = type.getName();
|
||||
// 类型不一致,需转型
|
||||
if(!value.getClass().getTypeName().equals(fieldType)){
|
||||
if(value instanceof String){
|
||||
// String to Date
|
||||
if(fieldType.equalsIgnoreCase(Date.class.getSimpleName())){
|
||||
if(fieldType.equalsIgnoreCase(Date.class.getName())){
|
||||
args[0] = D.fuzzyConvert((String)value);
|
||||
}
|
||||
// Map中的String型转换为其他型
|
||||
else if(fieldType.equalsIgnoreCase(Boolean.class.getSimpleName())){
|
||||
else if(fieldType.equalsIgnoreCase(Boolean.class.getName())){
|
||||
args[0] = V.isTrue((String)value);
|
||||
}
|
||||
else if (fieldType.equalsIgnoreCase(Integer.class.getSimpleName()) || "int".equals(fieldType)) {
|
||||
else if (fieldType.equalsIgnoreCase(Integer.class.getName()) || "int".equals(fieldType)) {
|
||||
args[0] = Integer.parseInt((String)value);
|
||||
}
|
||||
else if (fieldType.equalsIgnoreCase(Long.class.getSimpleName())) {
|
||||
else if (fieldType.equalsIgnoreCase(Long.class.getName())) {
|
||||
args[0] = Long.parseLong((String)value);
|
||||
}
|
||||
else if (fieldType.equalsIgnoreCase(Double.class.getSimpleName())) {
|
||||
else if (fieldType.equalsIgnoreCase(Double.class.getName())) {
|
||||
args[0] = Double.parseDouble((String)value);
|
||||
}
|
||||
else if (fieldType.equalsIgnoreCase(Float.class.getSimpleName())) {
|
||||
else if (fieldType.equalsIgnoreCase(Float.class.getName())) {
|
||||
args[0] = Float.parseFloat((String)value);
|
||||
}
|
||||
else{
|
||||
args[0] = value;
|
||||
log.warn("类型不一致,暂无法自动绑定,请手动转型一致后调用!字段类型="+fieldType);
|
||||
log.warn("类型不一致,暂无法自动绑定,请手动转型一致后调用!字段类型: {} vs {} ", value.getClass().getTypeName(), fieldType);
|
||||
}
|
||||
}
|
||||
else{
|
||||
args[0] = value;
|
||||
log.warn("类型不一致,且Map中的value非String类型,暂无法自动绑定,请手动转型一致后调用!value="+value);
|
||||
log.warn("类型不一致,且Map中的value非String类型,暂无法自动绑定,请手动转型一致后调用! {} vs {} ", value.getClass().getTypeName(), fieldType);
|
||||
}
|
||||
}
|
||||
else{
|
||||
|
@ -179,7 +181,6 @@ public class BeanUtils {
|
|||
descriptor.getWriteMethod().invoke(model, args);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e){
|
||||
log.warn("复制Map属性到Model异常: " + e.getMessage(), e);
|
||||
}
|
||||
|
@ -462,15 +463,22 @@ public class BeanUtils {
|
|||
* @param <E>
|
||||
*/
|
||||
public static <E> void bindPropValueOfList(String setterFieldName, List<E> fromList, String getterFieldName, Map valueMatchMap){
|
||||
if(V.isEmpty(fromList)){
|
||||
if(V.isEmpty(fromList) || V.isEmpty(valueMatchMap)){
|
||||
return;
|
||||
}
|
||||
try{
|
||||
for(E object : fromList){
|
||||
Object fieldValue = getProperty(object, getterFieldName);
|
||||
Object value = null;
|
||||
if(valueMatchMap.containsKey(fieldValue)){
|
||||
value = valueMatchMap.get(fieldValue);
|
||||
}
|
||||
else{
|
||||
// 获取到当前的属性值
|
||||
String fieldValue = getStringProperty(object, getterFieldName);
|
||||
String fieldValueStr = getStringProperty(object, getterFieldName);
|
||||
// 获取到当前的value
|
||||
Object value = valueMatchMap.get(fieldValue);
|
||||
value = valueMatchMap.get(fieldValueStr);
|
||||
}
|
||||
// 赋值
|
||||
setProperty(object, setterFieldName, value);
|
||||
}
|
||||
|
|
|
@ -19,13 +19,25 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||
public class Encryptor {
|
||||
private static final Logger log = LoggerFactory.getLogger(Encryptor.class);
|
||||
|
||||
/**
|
||||
* 算法
|
||||
*/
|
||||
private static final String KEY_ALGORITHM = "AES";
|
||||
private static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5PADDING";
|
||||
private static final String KEY_DEFAULT = V.notEmpty(BaseConfig.getProperty("diboot.encryptor.seed"))? BaseConfig.getProperty("diboot.encryptor.seed") : "Dibo2017M";
|
||||
/**
|
||||
* 默认加密seed(可通过配置文件)
|
||||
*/
|
||||
private static final String KEY_DEFAULT = V.notEmpty(BaseConfig.getProperty("diboot.encryptor.seed"))? BaseConfig.getProperty("diboot.encryptor.seed") : "DibootV2";
|
||||
|
||||
private static final String KEY_FILL = "abcdefghijklmnop";
|
||||
// 加密Cipher缓存
|
||||
|
||||
/**
|
||||
* 加密Cipher缓存
|
||||
*/
|
||||
private static Map<String, Cipher> encryptorMap = new ConcurrentHashMap<>();
|
||||
// 解密Cipher缓存
|
||||
/**
|
||||
* 解密Cipher缓存
|
||||
*/
|
||||
private static Map<String, Cipher> decryptorMap = new ConcurrentHashMap<>();
|
||||
|
||||
/**
|
||||
|
|
|
@ -19,11 +19,19 @@ import java.util.Map;
|
|||
public class JSON extends JSONObject{
|
||||
private static final Logger log = LoggerFactory.getLogger(JSON.class);
|
||||
|
||||
/**
|
||||
* 序列化配置
|
||||
*/
|
||||
private static SerializeConfig serializeConfig = new SerializeConfig();
|
||||
static {
|
||||
serializeConfig.put(Date.class, new SimpleDateFormatSerializer(D.FORMAT_DATETIME_Y4MDHM));
|
||||
}
|
||||
|
||||
/**
|
||||
* 将Java对象转换为Json String
|
||||
* @param object
|
||||
* @return
|
||||
*/
|
||||
public static String stringify(Object object){
|
||||
return toJSONString(object, serializeConfig);
|
||||
}
|
||||
|
|
|
@ -293,20 +293,4 @@ public class S extends StringUtils{
|
|||
return null;
|
||||
}
|
||||
|
||||
/***
|
||||
* 批量替换关键字
|
||||
* @param text
|
||||
* @param searchList
|
||||
* @param replacementList
|
||||
* @return
|
||||
*/
|
||||
public static String replaceEach(String text, List<String> searchList, List<String> replacementList){
|
||||
if(V.isEmpty(searchList) || V.isEmpty(replacementList)){
|
||||
return text;
|
||||
}
|
||||
String[] searchArray = searchList.toArray(new String[searchList.size()]);
|
||||
String[] replacementArray = replacementList.toArray(new String[replacementList.size()]);
|
||||
return replaceEach(text, searchArray, replacementArray);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ public class SqlExecutor {
|
|||
log.warn("查询参数集合数量过多, size={},请检查调用是否合理!", params.size());
|
||||
}
|
||||
}
|
||||
log.debug("==>\tSQL: "+sql);
|
||||
log.debug("==> SQL: "+sql);
|
||||
try(SqlSession session = sqlSessionFactory.openSession(); Connection conn = session.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)){
|
||||
if(V.notEmpty(params)){
|
||||
for(int i=0; i<params.size(); i++){
|
||||
|
@ -60,7 +60,7 @@ public class SqlExecutor {
|
|||
}
|
||||
rs.close();
|
||||
}
|
||||
log.debug("<==\t"+JSON.stringify(mapList));
|
||||
log.debug("<== "+JSON.stringify(mapList));
|
||||
return mapList;
|
||||
}
|
||||
catch(Exception e){
|
||||
|
@ -98,7 +98,6 @@ public class SqlExecutor {
|
|||
|
||||
/**
|
||||
* 执行查询和合并结果并将结果Map的key类型转成String
|
||||
*
|
||||
* @param sql
|
||||
* @param params
|
||||
* @return
|
||||
|
|
|
@ -156,7 +156,7 @@ public class V {
|
|||
}
|
||||
boolean valid = str.matches("^1\\d{10}$");
|
||||
if(!valid){
|
||||
valid = str.matches("^0\\d{2,3}-?\\d{7,8}$");
|
||||
valid = str.matches("^[0|4]\\d{2,3}-?\\d{7,8}$");
|
||||
}
|
||||
return valid;
|
||||
}
|
||||
|
|
|
@ -54,7 +54,7 @@ public class Pagination implements Serializable {
|
|||
set_pageIndex(pageIndex);
|
||||
}
|
||||
|
||||
public int get_pageIndex() {
|
||||
public int getPageIndex() {
|
||||
return _pageIndex;
|
||||
}
|
||||
|
||||
|
@ -62,7 +62,7 @@ public class Pagination implements Serializable {
|
|||
this._pageIndex = _pageIndex;
|
||||
}
|
||||
|
||||
public int get_pageSize() {
|
||||
public int getPageSize() {
|
||||
return _pageSize;
|
||||
}
|
||||
|
||||
|
@ -74,7 +74,7 @@ public class Pagination implements Serializable {
|
|||
this._pageSize = _pageSize;
|
||||
}
|
||||
|
||||
public long get_totalCount() {
|
||||
public long getTotalCount() {
|
||||
return _totalCount;
|
||||
}
|
||||
|
||||
|
@ -127,7 +127,7 @@ public class Pagination implements Serializable {
|
|||
* 获取总的页数
|
||||
* @return
|
||||
*/
|
||||
public int get_totalPage() {
|
||||
public int getTotalPage() {
|
||||
if(_totalCount <= 0){
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,95 @@
|
|||
package diboot.core.test.util;
|
||||
|
||||
import com.diboot.core.entity.Metadata;
|
||||
import com.diboot.core.util.BeanUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* BeanUtils测试
|
||||
* @author Mazhicheng
|
||||
* @version v2.0
|
||||
* @date 2019/06/02
|
||||
*/
|
||||
public class BeanUtilsTest {
|
||||
|
||||
@Test
|
||||
public void testCopyBean(){
|
||||
String itemName = "在职";
|
||||
Metadata metadata1 = new Metadata();
|
||||
metadata1.setType("STATUS");
|
||||
metadata1.setItemName(itemName);
|
||||
|
||||
Metadata metadata2 = new Metadata();
|
||||
BeanUtils.copyProperties(metadata1, metadata2);
|
||||
Assert.assertTrue(metadata2.getItemName().equals(itemName));
|
||||
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("type", "STATUS");
|
||||
map.put("itemName",itemName);
|
||||
Metadata metadata3 = new Metadata();
|
||||
BeanUtils.bindProperties(metadata3, map);
|
||||
Assert.assertTrue(metadata2.getItemName().equals(itemName));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetProperty(){
|
||||
Metadata metadata1 = new Metadata();
|
||||
metadata1.setId(1001L);
|
||||
|
||||
// getProperty
|
||||
Object id = BeanUtils.getProperty(metadata1, "id");
|
||||
Assert.assertTrue(id instanceof Long);
|
||||
// getStringProperty
|
||||
Assert.assertTrue(BeanUtils.getStringProperty(metadata1, "id").equals("1001"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testConvert(){
|
||||
List<Metadata> metadataList = new ArrayList<>();
|
||||
for(long id=1001; id<1005; id++){
|
||||
Metadata metadata1 = new Metadata();
|
||||
metadata1.setId(id);
|
||||
metadataList.add(metadata1);
|
||||
}
|
||||
List<Long> metaIdList = BeanUtils.collectToList(metadataList, Metadata::getId);
|
||||
Assert.assertTrue(metaIdList.size() == 4);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetterSetter(){
|
||||
Assert.assertEquals(BeanUtils.convertToFieldName(Metadata::getItemName), "itemName");
|
||||
Assert.assertEquals(BeanUtils.convertToFieldName(Metadata::setItemName), "itemName");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBindProp(){
|
||||
List<Metadata> metadataList = new ArrayList<>();
|
||||
for(long id=1001; id<1005; id++){
|
||||
Metadata metadata1 = new Metadata();
|
||||
metadata1.setId(id);
|
||||
metadataList.add(metadata1);
|
||||
}
|
||||
Map<String, String> map = new HashMap<>();
|
||||
map.put("1001", "在职");
|
||||
map.put("1002", "在职");
|
||||
map.put("1003", "离职");
|
||||
BeanUtils.bindPropValueOfList(Metadata::setItemName, metadataList, Metadata::getId, map);
|
||||
Assert.assertEquals(metadataList.get(0).getItemName(), "在职");
|
||||
Assert.assertEquals(metadataList.get(2).getItemName(), "离职");
|
||||
|
||||
Map<Long, String> map2 = new HashMap<>();
|
||||
map2.put(1001L, "在职");
|
||||
map2.put(1002L, "在职");
|
||||
map2.put(1003L, "离职");
|
||||
BeanUtils.bindPropValueOfList("itemName", metadataList, "id", map2);
|
||||
Assert.assertEquals(metadataList.get(0).getItemName(), "在职");
|
||||
Assert.assertEquals(metadataList.get(2).getItemName(), "离职");
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package diboot.core.test.util;
|
||||
|
||||
import com.diboot.core.util.D;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 日期单元测试
|
||||
* @author Mazhicheng
|
||||
* @version 1.0
|
||||
* @date 2019/06/02
|
||||
*/
|
||||
public class DTest {
|
||||
|
||||
@Test
|
||||
public void testFuzzyConvert(){
|
||||
String[] dateStrArray = {
|
||||
"2019-06-02 13:35",
|
||||
"2019年6月2日 13:35:00",
|
||||
"2019/6/2 13:35:34:000"
|
||||
};
|
||||
for(String dateStr : dateStrArray){
|
||||
Date date = D.fuzzyConvert(dateStr);
|
||||
Assert.assertTrue(date != null);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
package diboot.core.test.util;
|
||||
|
||||
import com.diboot.core.util.Encryptor;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* <Description>
|
||||
*
|
||||
* @author Mazhicheng
|
||||
* @version 1.0
|
||||
* @date 2019/06/02
|
||||
*/
|
||||
public class EncryptorTest {
|
||||
|
||||
@Test
|
||||
public void testEncrypt(){
|
||||
String text = "Hello World";
|
||||
String encryptText = Encryptor.encrypt(text);
|
||||
System.out.println(encryptText);
|
||||
// 加密后长度
|
||||
Assert.assertTrue(encryptText.length() >= 24);
|
||||
// 解密
|
||||
Assert.assertTrue(Encryptor.decrypt(encryptText).equals(text));
|
||||
|
||||
String seed = "ABCDEF";
|
||||
encryptText = Encryptor.encrypt(text, seed);
|
||||
System.out.println(encryptText);
|
||||
// 加密后长度
|
||||
Assert.assertTrue(encryptText.length() >= 24);
|
||||
// 解密
|
||||
Assert.assertTrue(Encryptor.decrypt(encryptText, seed).equals(text));
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
package diboot.core.test.util;
|
||||
|
||||
import com.diboot.core.util.PropertiesUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* 配置文件读取测试
|
||||
* @author Mazhicheng
|
||||
* @version 1.0
|
||||
* @date 2019/06/02
|
||||
*/
|
||||
public class PropertiesTest {
|
||||
|
||||
@Test
|
||||
public void testGetString(){
|
||||
String str1 = PropertiesUtils.get("spring.datasource.url");
|
||||
String str2 = PropertiesUtils.get("spring.datasource.url", "application.properties");
|
||||
Assert.assertNotNull(str1);
|
||||
Assert.assertNotNull(str2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetNumber(){
|
||||
Integer num = PropertiesUtils.getInteger("spring.datasource.hikari.maximum-pool-size");
|
||||
Assert.assertTrue(num > 0 );
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package diboot.core.test.util;
|
||||
|
||||
import com.diboot.core.util.S;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* S工具类测试
|
||||
* @author Mazhicheng
|
||||
* @version 1.0
|
||||
* @date 2019/06/02
|
||||
*/
|
||||
public class STest {
|
||||
|
||||
@Test
|
||||
public void testToSnakeCase(){
|
||||
String str = "myOrgName";
|
||||
String snakeCaseStr = "my_org_name";
|
||||
Assert.assertEquals(S.toSnakeCase(str), snakeCaseStr);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCamelCase(){
|
||||
String snakeCaseStr = "my_org_name";
|
||||
String camelCaseStr = "myOrgName";
|
||||
Assert.assertEquals(S.toLowerCaseCamel(snakeCaseStr), camelCaseStr);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCapFirst(){
|
||||
String text = "helloWorld";
|
||||
Assert.assertEquals(S.capFirst(text), "HelloWorld");
|
||||
Assert.assertEquals(S.uncapFirst("HelloWorld"), text);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
package diboot.core.test.util;
|
||||
|
||||
import com.diboot.core.util.S;
|
||||
import com.diboot.core.util.V;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* V校验工具类测试
|
||||
* @author Mazhicheng
|
||||
* @version 1.0
|
||||
* @date 2019/06/02
|
||||
*/
|
||||
public class VTest {
|
||||
|
||||
@Test
|
||||
public void testEmpty(){
|
||||
String text1 = null;
|
||||
Assert.assertTrue(S.isEmpty(text1));
|
||||
text1 = "";
|
||||
Assert.assertTrue(S.isEmpty(text1));
|
||||
text1 = " ";
|
||||
Assert.assertFalse(S.isEmpty(text1));
|
||||
|
||||
List<Long> list = new ArrayList<>();
|
||||
Assert.assertTrue(V.isEmpty(list));
|
||||
list.add(1L);
|
||||
Assert.assertTrue(V.notEmpty(list));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsEmail(){
|
||||
String text1 = "jsdjfjsdf@126.com";
|
||||
String text2 = "jsdjfjsdf.126.com";
|
||||
String text3 = "jsdjfjsdf@126";
|
||||
Assert.assertTrue(V.isEmail(text1));
|
||||
|
||||
Assert.assertFalse(V.isEmail(text2));
|
||||
Assert.assertFalse(V.isEmail(text3));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsPhone(){
|
||||
String text1 = "17712345678";
|
||||
String text2 = "0512-12345678";
|
||||
String text3 = "40012345678";
|
||||
Assert.assertTrue(V.isPhone(text1));
|
||||
Assert.assertTrue(V.isPhone(text2));
|
||||
Assert.assertTrue(V.isPhone(text3));
|
||||
|
||||
String text4 = "177123456789";
|
||||
Assert.assertFalse(V.isPhone(text4));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEquals(){
|
||||
Long val1 = 128L, val2 = 128L;
|
||||
Assert.assertFalse(val1 == val2);
|
||||
Assert.assertTrue(V.equals(val1, val2));
|
||||
|
||||
List<Long> list1 = new ArrayList<>(), list2 = new ArrayList<>();
|
||||
list1.add(127L);
|
||||
list1.add(128L);
|
||||
list2.add(127L);
|
||||
list2.add(128L);
|
||||
|
||||
Assert.assertTrue(V.equals(list1, list2));
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -34,23 +34,23 @@ public class DepartmentController extends BaseCrudRestController {
|
|||
private DepartmentService departmentService;
|
||||
|
||||
/***
|
||||
* 默认的分页实现
|
||||
* 默认Entity的分页实现
|
||||
* <p>
|
||||
* url参数示例: /list?_pageSize=20&_pageIndex=1&_orderBy=itemValue&type=GENDAR
|
||||
* url参数示例: /list?_pageSize=20&_pageIndex=1&_orderBy=id&code=TST
|
||||
* </p>
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public JsonResult getDefaultVOList(HttpServletRequest request) throws Exception{
|
||||
public JsonResult getEntityList(HttpServletRequest request) throws Exception{
|
||||
QueryWrapper<Department> queryWrapper = buildQuery(request);
|
||||
return super.getEntityListWithPaging(request, queryWrapper, DepartmentVO.class);
|
||||
return super.getEntityListWithPaging(request, queryWrapper);
|
||||
}
|
||||
|
||||
/***
|
||||
* 默认的分页实现
|
||||
* 自定义VO的分页实现
|
||||
* <p>
|
||||
* url参数示例: /listVo?page.size=20&page.index=1&page.orderBy=itemValue&type=GENDAR
|
||||
* url参数示例: /listVo?_pageSize=20&_pageIndex=1&_orderBy=id&code=TST
|
||||
* </p>
|
||||
* @return
|
||||
* @throws Exception
|
||||
|
@ -58,11 +58,7 @@ public class DepartmentController extends BaseCrudRestController {
|
|||
@GetMapping("/listVo")
|
||||
public JsonResult getCustomVOList(HttpServletRequest request) throws Exception{
|
||||
QueryWrapper<Department> queryWrapper = buildQuery(request);
|
||||
// 查询当前页的数据
|
||||
List entityList = departmentService.getEntityList(queryWrapper);
|
||||
List voList = departmentService.getViewObjectList(entityList, DepartmentVO.class);
|
||||
// 返回结果
|
||||
return new JsonResult(Status.OK, voList);
|
||||
return super.getVOListWithPaging(request, queryWrapper, DepartmentVO.class);
|
||||
}
|
||||
|
||||
@GetMapping("/kv")
|
||||
|
|
|
@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|||
import com.diboot.core.controller.BaseCrudRestController;
|
||||
import com.diboot.core.service.BaseService;
|
||||
import com.diboot.core.vo.JsonResult;
|
||||
import com.diboot.core.vo.Pagination;
|
||||
import com.diboot.core.vo.Status;
|
||||
import com.diboot.example.entity.User;
|
||||
import com.diboot.example.service.UserService;
|
||||
|
@ -28,9 +29,9 @@ public class UserController extends BaseCrudRestController {
|
|||
private UserService userService;
|
||||
|
||||
/***
|
||||
* 默认的分页实现
|
||||
* 默认Entity的分页实现
|
||||
* <p>
|
||||
* url参数示例: /list?_pageSize=20&_pageIndex=1&_orderBy=itemValue&type=GENDAR
|
||||
* url参数示例: /list?_pageSize=20&_pageIndex=1&_orderBy=username&gender=M
|
||||
* </p>
|
||||
* @return
|
||||
* @throws Exception
|
||||
|
@ -38,13 +39,13 @@ public class UserController extends BaseCrudRestController {
|
|||
@GetMapping("/list")
|
||||
public JsonResult getDefaultVOList(HttpServletRequest request) throws Exception{
|
||||
QueryWrapper<User> queryWrapper = buildQuery(request);
|
||||
return super.getEntityListWithPaging(request, queryWrapper, UserVO.class);
|
||||
return super.getEntityListWithPaging(request, queryWrapper);
|
||||
}
|
||||
|
||||
/***
|
||||
* 默认的分页实现
|
||||
* 自定义VO的分页实现
|
||||
* <p>
|
||||
* url参数示例: /listVo?page.size=20&page.index=1&page.orderBy=itemValue&type=GENDAR
|
||||
* url参数示例: /listVo?_pageSize=20&_pageIndex=1&_orderBy=username&gender=M
|
||||
* </p>
|
||||
* @return
|
||||
* @throws Exception
|
||||
|
@ -52,11 +53,7 @@ public class UserController extends BaseCrudRestController {
|
|||
@GetMapping("/listVo")
|
||||
public JsonResult getCustomVOList(HttpServletRequest request) throws Exception{
|
||||
QueryWrapper<User> queryWrapper = buildQuery(request);
|
||||
// 查询当前页的数据
|
||||
List entityList = userService.getEntityList(queryWrapper);
|
||||
List voList = userService.getViewObjectList(entityList, UserVO.class);
|
||||
// 返回结果
|
||||
return new JsonResult(Status.OK, voList);
|
||||
return super.getVOListWithPaging(request, queryWrapper, UserVO.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in New Issue