package com.jsrj.base.util;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.beanutils.NestedNullException;
import org.apache.commons.beanutils.PropertyUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeanWrapperImpl;
import java.beans.PropertyDescriptor;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.CodeSource;
import java.security.ProtectionDomain;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* <p>方法 BeanUtil : <p>
* <p>说明:通用的工具类</p>
* <pre>
* @author D.chen.g
* @date 2017/3/11 21:53
* </pre>
*/
public class BeanUtil {
private final static Logger log = LoggerFactory.getLogger(BeanUtil.class);
/**
* 用于定义Hibernate Annotation中字段长度的属性名
*/
private static final String COLUMN_LENGTH = "length";
private static final String COLUMN_NULLABLE = "nullable";
/**
* Hibernate代理类名特征
*/
private static final String CGLIB_CLASS_SUFFIX = "$$EnhancerByCGLIB$$";
private static Map<Class<?>, PropertyDescriptor[]> pdMap = null;
/**
* <p>方法:getNullPropertyNames 获取空的属性数组 </p>
* <ul>
* <li> @param source 对象</li>
* <li>@return java.lang.String[] 空属性数组 </li>
* <li>@author D.chen.g </li>
* <li>@date 2019/2/26 9:24 </li>
* </ul>
*/
public static String[] getNullPropertyNames(Object source) {
final BeanWrapper src = new BeanWrapperImpl(source);
PropertyDescriptor[] pds = src.getPropertyDescriptors();
Set<String> emptyNames = new HashSet<String>();
for (PropertyDescriptor pd : pds) {
Object srcValue = src.getPropertyValue(pd.getName());
if (srcValue == null) {
emptyNames.add(pd.getName());
}
}
String[] result = new String[emptyNames.size()];
return emptyNames.toArray(result);
}
/**
* <p>方法:copyPropertiesIgnoreNull 把不为空的属性复制到新对象 </p>
* <ul>
* <li> @param src 源对象</li>
* <li> @param target 目的对象</li>
* <li>@return void </li>
* <li>@author D.chen.g </li>
* <li>@date 2019/2/26 9:26 </li>
* </ul>
*/
public static void copyPropertiesIgnoreNull(Object src, Object target) {
BeanUtils.copyProperties(src, target, getNullPropertyNames(src));
}
/**
* <p>方法:getBeanProperty 获取指定类中的属性 </p>
* <ul>
* <li> @param bean 对象</li>
* <li> @param property 属性</li>
* <li>@return java.lang.Object </li>
* <li>@author D.chen.g </li>
* <li>@date 2017/3/11 21:54 </li>
* </ul>
*/
public static Object getBeanProperty(Object bean, String property)
throws IllegalAccessException, InvocationTargetException,
NoSuchMethodException {
try {
return PropertyUtils.getProperty(bean, property);
} catch (NestedNullException e) {
return null;
}
}
/**
* 把最先转换成MAP
*
* @param source 源对象
* @param upperCase true 表示大写,false表示小写
*/
/**
* <p>方法:obj2Map 把对象转成Map对象 </p>
* <ul>
* <li> @param source 源对象</li>
* <li> @param upperCase 是否需要key大写,true大写,false小写</li>
* <li>@return java.util.Map<java.lang.String,java.lang.Object> </li>
* <li>@author D.chen.g </li>
* <li>@date 2017/3/11 21:55 </li>
* </ul>
*/
public static Map<String, Object> obj2Map(Object source, boolean upperCase) {
Map<String, Object> map = Maps.newHashMap();
Set<String> pns = getPropertiesName(source);
for (String s : pns) {
if (upperCase) {
map.put(s.toUpperCase(), getProperty(source, s));
} else {
map.put(s.toLowerCase(), getProperty(source, s));
}
}
return map;
}
/**
* <p>方法:obj2Map 对象转换为Map对象,Map对象中key为对象的属性名称 </p>
* <ul>
* <li> @param source 源对象</li>
* <li>@return java.util.Map<java.lang.String,java.lang.Object> </li>
* <li>@author D.chen.g </li>
* <li>@date 2019/12/28 14:51 </li>
* </ul>
*/
public static Map<String, Object> obj2Map(Object source) {
Map<String, Object> map = Maps.newHashMap();
Set<String> pns = getPropertiesName(source);
for (String s : pns) {
map.put(s.trim(), getProperty(source, s));
}
return map;
}
/**
* <p>方法:obj2Map 把对象中指定属性的值转换为Map对象,key为指定属性 </p>
* <ul>
* <li> @param source </li>
* <li> @param includePropeties TODO</li>
* <li>@return java.util.Map<java.lang.String,java.lang.Object> </li>
* <li>@author D.chen.g </li>
* <li>@date 2017/3/11 21:56 </li>
* </ul>
*/
public static Map<String, Object> obj2Map(Object source, String... includePropeties) {
Map<String, Object> map = Maps.newHashMap();
for (String s : includePropeties) {
map.put(s, getProperty(source, s));
}
return map;
}
/**
* <p>方法:obj2Map 传入类以及map对象,把类中的属性添加到map对象中</p>
* <ul>
* <li> @param source 对象</li>
* <li> @param ppt 需要整合的map对象</li>
* <li>@return void </li>
* <li>@author D.chen.g </li>
* <li>@date 2017/5/23 21:49 </li>
* </ul>
*/
public static void obj2Map(Object source, Map<String, Object> ppt) {
Set<String> keys = BeanUtil.getPropertiesName(source);
for (String s : keys) {
ppt.put(s, getProperty(source, s));
}
}
/**
* <p>方法:obj2Map 传入对象,map,指定的key列表,把指定的key列表转换到map对象中 </p>
* <ul>
* <li> @param source 对象</li>
* <li> @param ppt 传入的map对象</li>
* <li> @param keys 需要转换的key列表</li>
* <li>@return void </li>
* <li>@author D.chen.g </li>
* <li>@date 2019/12/28 14:56 </li>
* </ul>
*/
public static void obj2Map(Object source, Map<String, Object> ppt, String... keys) {
for (String s : keys) {
ppt.put(s, getProperty(source, s));
}
}
/**
* 如果是Hibernate代理类,则获得其父类,应就是真实的Model类
*
* @param clazz 原类
* @return Model类
*/
public static Class<?> getRealClassFromHibernate(Class<?> clazz) {
return clazz;
}
/**
* 设置bean对象property属性的值
*
* @param bean bean对象
* @param property 属性名称
* @param value 设置property的值
*/
public static void setProperty(Object bean, String property, Object value) {
try {
org.apache.commons.beanutils.BeanUtils.setProperty(bean, property, value);
} catch (Exception e) {
throw new RuntimeException("setProperty()出错!" + property, e);
}
}
/**
* <p>方法:setProperties 减少set方法,通过该方面,可以把指定key和对应obj值都设置到bean对象中 </p>
* <ul>
* <li> @param bean 需要设置的bean对象</li>
* <li> @param keys 属性名称,是bean对象中的属性一致</li>
* <li> @param vals 属性对象,于属性名称对应</li>
* <li>@return void </li>
没有合适的资源?快使用搜索试试~ 我知道了~
springboot+mybatis+sqlserver
共108个文件
java:65个
xml:12个
ds_store:8个
需积分: 48 44 下载量 36 浏览量
2021-04-12
11:07:28
上传
评论 1
收藏 135KB ZIP 举报
温馨提示
这是个人搭建的基础开发框架,比较简单,可以自由拓展。里面还包含了部分钉钉api,有问题请留言指教小弟
资源详情
资源评论
资源推荐
收起资源包目录
springboot+mybatis+sqlserver (108个子文件)
.DS_Store 10KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.gitignore 395B
.gitignore 395B
.gitignore 395B
.gitignore 395B
.gitignore 395B
.gitignore 395B
.gitignore 395B
demo.iml 12KB
base-service.iml 7KB
base-cache.iml 6KB
base-dao.iml 5KB
base-entity.iml 4KB
base-model.iml 4KB
BeanUtil.java 33KB
MapUtils.java 18KB
JsonUtils.java 17KB
DigitalUtils.java 17KB
HttpHeaders.java 12KB
Reflections.java 12KB
Page.java 12KB
DtalkUtil.java 11KB
CacheUtils.java 9KB
LogInterceptor.java 8KB
SQLHelper.java 8KB
HttpUtils.java 7KB
PaginationInterceptor.java 5KB
MapToBeanUtil.java 5KB
DateUtils.java 5KB
RedisTool.java 5KB
CrudService.java 4KB
PreparePaginationInterceptor.java 4KB
DataEntity.java 4KB
DemoApplicationTests.java 3KB
DataLongEntity.java 3KB
SQLServer2005Dialect.java 3KB
TransmitUserInfoFilter.java 3KB
SpringContextHolder.java 3KB
BaseInterceptor.java 2KB
CrudDao.java 2KB
DemoController.java 2KB
SQLServerDialect.java 2KB
BaseEntity.java 1KB
DaoTest.java 1KB
BaseStringIdEntity.java 1KB
TransmitUserInfoFeighClientIntercepter.java 1KB
TesttableService.java 1KB
BaseLongIdEntity.java 1KB
MybatisOrderConfig.java 1KB
Dialect.java 876B
EnableUserInfoTransmitterAutoConfiguration.java 750B
TreeDemoPO.java 702B
TextUtils.java 692B
HttpConstants.java 676B
UserInfo.java 672B
MyBatisDao.java 609B
TreeDemoService.java 606B
BoundSqlSqlSource.java 588B
TreeUtils.java 555B
UserInfoContext.java 551B
BaseTree.java 548B
ServiceException.java 543B
DemoApplication.java 502B
TesttablePO.java 450B
BaseService.java 397B
InitAccessToken.java 394B
ProcessinstanceCreateParam.java 380B
ConfigConstants.java 371B
CommonConstants.java 354B
EnableUserInfoTransmitter.java 345B
AccessTokenFlash.java 335B
Validate.java 319B
TesttableDao.java 289B
TreeDemoDao.java 286B
BaseController.java 281B
AttendanceParam.java 230B
Cat.java 221B
BaseDao.java 203B
ProcessIdsParam.java 199B
HELP.md 429B
HELP.md 429B
HELP.md 429B
HELP.md 429B
HELP.md 429B
HELP.md 429B
HELP.md 35B
application-dev.properties 3KB
application.properties 266B
application-prod.properties 0B
TreeDemoDao.xml 5KB
TesttableDao.xml 3KB
pom.xml 3KB
mybatis-config.xml 3KB
共 108 条
- 1
- 2
benyuanone
- 粉丝: 14
- 资源: 22
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于python实现的基于PyQt5和爬虫的小说阅读系统.zip
- 机械设计整经机上纱自动化sw20非常好的设计图纸100%好用.zip
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0