valid 校验
public class ValidUtils {
public static String validParam(BindingResult bindingResult) {
return bindingResult.getAllErrors().stream()
.map(DefaultMessageSourceResolvable::getDefaultMessage)
.collect(Collectors.joining(","));
}
}
sql
oracle
<when test="name != null and name!=''">
AND name like '%'||#{name }||'%'
</when>
mysql
<when test="name != null and name!=''">
AND name like CONCAT('%',#{name},'%')
</when>
<foreach collection="list" item="employeeId" index="index"
open="(" close=")" separator=",">
#{employeeId}
</foreach>
不存在插入 存在更新
INSERT INTO `demo`.`account_tbl` ( `id`, `user_id`, `money`, `create_time`, `lang`, `x`, `years`, `dates` )
VALUES
( 12, '2', 20, '2022-05-23 11:30:42', 21, '21', 2002, NULL ) ON DUPLICATE KEY UPDATE id=id;
批量插入大量数据
创建存储过程 运行 输入 in_count 数量
CREATE PROCEDURE prod(IN in_count INT)
BEGIN
DECLARE COUNT INT DEFAULT 0;
WHILE COUNT < in_count DO
insert demo select * from demo;
SET COUNT = COUNT + 1;
END WHILE;
#SELECT SUM;
END;
查询每一条最早时间的数据
SELECT point_num, create_time FROM 表明 GROUP BY point_num
mongodb
更新数据
db.getCollection('biz_monitor_data')
.find({})
.forEach( function(item) {
var message = item['monitor_point_num'];
message = message.replace(/^230506016799/, '141033028139');
//print(message) // 打印
db.getCollection('biz_monitor_data').updateOne({"_id":item['_id']},{$set:{"monitor_point_num":message}}); // 更新
});
创建索引
db.getCollection("biz_monitor_date_record").createIndex({ monitor_point_num: 1, record_time: 1 }, { unique: true })
db.getCollection('biz_monitor_data')
.find({"monitor_point_num":"23050501691408000013"})
.forEach( function(item) {
var message = item['monitor_point_num'];
message = message.replace(/^230505016914/, '2305050169141');
//print(message) 打印
db.getCollection('biz_monitor_data').updateOne({"_id":item['_id']},{$set:{"monitor_point_num":message}}); 更新
});
db.getCollection('biz_monitor_data')
.find({})
.forEach( function(item) {
var message = item['monitor_point_num'];
message = message.replace(/^230506016799/, '141033028139');
//print(message) // 打印
db.getCollection('biz_monitor_data').updateOne({"_id":item['_id']},{$set:{"monitor_point_num":message}}); // 更新
});
var specifiedDate = new Date('2024-04-21T00:00:00Z');
db.getCollection("biz_monitor_data").find({'create_time': { "$lt" : specifiedDate}})
java
/**
* 包装request的inputStream可重复读的
*
* @author ruan
*/
@Profile({"dev", "test"})
@Component
public class ReqLogFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, @NotNull HttpServletResponse response, @NotNull FilterChain chain) throws ServletException, IOException {
String contentType = request.getContentType();
if (contentType != null && contentType.contains(MediaType.APPLICATION_JSON_VALUE)) {
HttpServletRequest requestWrapper = new ContentCachingRequestWrapper(request);
chain.doFilter(requestWrapper, response);
} else {
chain.doFilter(request, response);
}
}
}
通用异常
/**
* 全局异常处理器
*
* @author Lion Li
*/
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 权限码异常
*/
@ExceptionHandler(NotPermissionException.class)
public R<Void> handleNotPermissionException(NotPermissionException e, HttpServletRequest request) {
String requestURI = request.getRequestURI();
log.error("请求地址'{}',权限码校验失败'{}'", requestURI, e.getMessage());
return R.fail(HttpStatus.HTTP_FORBIDDEN, "没有访问权限,请联系管理员授权");
}
/**
* 角色权限异常
*/
@ExceptionHandler(NotRoleException.class)
public R<Void> handleNotRoleException(NotRoleException e, HttpServletRequest request) {
String requestURI = request.getRequestURI();
log.error("请求地址'{}',角色权限校验失败'{}'", requestURI, e.getMessage());
return R.fail(HttpStatus.HTTP_FORBIDDEN, "没有访问权限,请联系管理员授权");
}
/**
* 认证失败
*/
@ExceptionHandler(NotLoginException.class)
public R<Void> handleNotLoginException(NotLoginException e, HttpServletRequest request) {
String requestURI = request.getRequestURI();
log.error("请求地址'{}',认证失败'{}',无法访问系统资源", requestURI, e.getMessage());
return R.fail(HttpStatus.HTTP_UNAUTHORIZED, "认证失败,无法访问系统资源");
}
/**
* 请求方式不支持
*/
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
public R<Void> handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e,
HttpServletRequest request) {
String requestURI = request.getRequestURI();
log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod());
return R.fail(e.getMessage());
}
/**
* 主键或UNIQUE索引,数据重复异常
*/
@ExceptionHandler(DuplicateKeyException.class)
public R<Void> handleDuplicateKeyException(DuplicateKeyException e, HttpServletRequest request) {
String requestURI = request.getRequestURI();
log.error("请求地址'{}',数据库中已存在记录'{}'", requestURI, e.getMessage());
return R.fail("数据库中已存在该记录,请联系管理员确认");
}
/**
* Mybatis系统异常 通用处理
*/
@ExceptionHandler(MyBatisSystemException.class)
public R<Void> handleCannotFindDataSourceException(MyBatisSystemException e, HttpServletRequest request) {
String requestURI = request.getRequestURI();
String message = e.getMessage();
if (message.contains("CannotFindDataSourceException")) {
log.error("请求地址'{}', 未找到数据源", requestURI);
return R.fail("未找到数据源,请联系管理员确认");
}
log.error("请求地址'{}', Mybatis系统异常", requestURI, e);
return R.fail(message);
}
/**
* 业务异常
*/
@ExceptionHandler(ServiceException.class)
public R<Void> handleServiceException(ServiceException e, HttpServletRequest request) {
log.error(e.getMessage(), e);
Integer code = e.getCode();
return ObjectUtil.isNotNull(code) ? R.fail(code.intValue(), e.getMessage()) : R.fail(e.getMessage());
}
/**
* 拦截未知的运行时异常
*/
@ExceptionHandler(RuntimeException.class)
public R<Void> handleRuntimeException(RuntimeException e, HttpServletRequest request) {
String requestURI = request.getRequestURI();
log.error("请求地址'{}',发生未知异常.", requestURI, e);
return R.fail(e.getMessage());
}
/**
* 系统异常
*/
@ExceptionHandler(Exception.class)
public R<Void> handleException(Exception e, HttpServletRequest request) {
String requestURI = request.getRequestURI();
log.error("请求地址'{}',发生系统异常.", requestURI, e);
return R.fail(e.getMessage());
}
/**
* 自定义验证异常
*/
@ExceptionHandler(BindException.class)
public R<Void> handleBindException(BindException e) {
log.error(e.getMessage(), e);
String message = e.getAllErrors().stream()
.map(DefaultMessageSourceResolvable::getDefaultMessage)
.collect(Collectors.joining(", "));
return R.fail(message);
}
/**
* 自定义验证异常
*/
@ExceptionHandler(ConstraintViolationException.class)
public R<Void> constraintViolationException(ConstraintViolationException e) {
log.error(e.getMessage(), e);
String message = e.getConstraintViolations().stream()
.map(ConstraintViolation::getMessage)
.collect(Collectors.joining(", "));
return R.fail(message);
}
/**
* 自定义验证异常
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public R<Void> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
log.error(e.getMessage(), e);
String message = e.getBindingResult().getFieldError().getDefaultMessage();
return R.fail(message);
}
/**
* 演示模式异常
*/
@ExceptionHandler(DemoModeException.class)
public R<Void> handleDemoModeException(DemoModeException e) {
return R.fail("演示模式,不允许操作");
}
}
异常类
/**
* 业务异常
*
* @author ruoyi
*/
public final class ServiceException extends RuntimeException {
private static final long serialVersionUID = 1L;
/**
* 错误码
*/
private Integer code;
/**
* 错误提示
*/
private String message;
/**
* 错误明细,内部调试错误
* <p>
* 和 {@link CommonResult#getDetailMessage()} 一致的设计
*/
private String detailMessage;
/**
* 空构造方法,避免反序列化问题
*/
public ServiceException() {
}
public ServiceException(String message) {
this.message = message;
}
public ServiceException(String message, Integer code) {
this.message = message;
this.code = code;
}
public String getDetailMessage() {
return detailMessage;
}
@Override
public String getMessage() {
return message;
}
public Integer getCode() {
return code;
}
public ServiceException setMessage(String message) {
this.message = message;
return this;
}
public ServiceException setDetailMessage(String detailMessage) {
this.detailMessage = detailMessage;
return this;
}
}
java实现js Escape编码
public static String escape(String src) {
int i;
char j;
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length() * 6);
for (i = 0; i < src.length(); i++) {
j = src.charAt(i);
if (Character.isDigit(j) || Character.isLowerCase(j)
|| Character.isUpperCase(j))
tmp.append(j);
else if (j < 256) {
tmp.append("%");
if (j < 16)
tmp.append("0");
tmp.append(Integer.toString(j, 16));
} else {
tmp.append("%u");
tmp.append(Integer.toString(j, 16));
}
}
return tmp.toString();
}
public static String unescape(String src) {
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length());
int lastPos = 0, pos = 0;
char ch;
while (lastPos < src.length()) {
pos = src.indexOf("%", lastPos);
if (pos == lastPos) {
if (src.charAt(pos + 1) == 'u') {
ch = (char) Integer.parseInt(src
.substring(pos + 2, pos + 6), 16);
tmp.append(ch);
lastPos = pos + 6;
} else {
ch = (char) Integer.parseInt(src
.substring(pos + 1, pos + 3), 16);
tmp.append(ch);
lastPos = pos + 3;
}
} else {
if (pos == -1) {
tmp.append(src.substring(lastPos));
lastPos = src.length();
} else {
tmp.append(src.substring(lastPos, pos));
lastPos = pos;
}
}
}
return tmp.toString();
}
正则表达式
匹配数字
public static String toNumber(String str) {
String regEx = "[^0-9]";
Pattern p = Pattern.compile(regEx);
Matcher matcher = p.matcher(str);
return matcher.replaceAll("").trim();
}
文件读取
public class FileConvertUtils {
public static MultipartFile getMultipartFile(File file) {
try {
return new MockMultipartFile(file.getName(), new FileInputStream(file.getPath()));
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static void getAllFile(File fileInput, List<File> allFileList) {
// 获取文件列表
File[] fileList = fileInput.listFiles();
assert fileList != null;
for (File file : fileList) {
if (file.isDirectory()) {
// 递归处理文件夹
// 如果不想统计子文件夹则可以将下一行注释掉
getAllFile(file, allFileList);
} else {
// 如果是文件则将其加入到文件数组中
allFileList.add(file);
}
}
}
}
类字段取值 赋值
赋值
Class<?> clazz = obj.getClass();
try {
Field field = clazz.getDeclaredField(valueName);
field.setAccessible(true);
// 赋值检测值
field.set(obj, setValue(dataDTO));
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
去除括号跟括号的内容
public final static String REGEX_ALL_BRACKETS = "\\<.*?\\>|\\(.*?\\)|\\(.*?\\)|\\[.*?\\]|\\【.*?\\】|\\{.*?\\}";
String regexString = context.replaceAll(REGEX_ALL_BRACKETS, "");