From 69521fd7ed5a0ab688447a7194f0ad169fcc6533 Mon Sep 17 00:00:00 2001 From: p2x9nfpei <2196435763@qq.com> Date: Mon, 28 Apr 2025 23:23:36 +0800 Subject: [PATCH] ADD file via upload --- MPUtil.java | 179 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 MPUtil.java diff --git a/MPUtil.java b/MPUtil.java new file mode 100644 index 0000000..50944ce --- /dev/null +++ b/MPUtil.java @@ -0,0 +1,179 @@ +package com.utils; // 声明工具类所在包 + +import java.util.Arrays; // 导入数组工具类 +import java.util.HashMap; // 导入HashMap类 +import java.util.Iterator; // 导入迭代器接口 +import java.util.Map; // 导入Map接口 + +import org.apache.commons.lang3.StringUtils; // 导入字符串工具类 + +import cn.hutool.core.bean.BeanUtil; // 导入Bean工具类 + +import com.baomidou.mybatisplus.mapper.Wrapper; // 导入MyBatis-Plus条件构造器 + +public class MPUtil { // MyBatis-Plus工具类 + public static final char UNDERLINE = '_'; // 下划线常量 + + // 带前缀的AllEQ条件转换 + public static Map allEQMapPre(Object bean,String pre) { + Map map =BeanUtil.beanToMap(bean); // 将Bean转为Map + return camelToUnderlineMap(map,pre); // 转换键名并返回 + } + + // AllEQ条件转换 + public static Map allEQMap(Object bean) { + Map map =BeanUtil.beanToMap(bean); // 将Bean转为Map + return camelToUnderlineMap(map,""); // 转换键名并返回 + } + + // 带前缀的LIKE条件构造 + public static Wrapper allLikePre(Wrapper wrapper,Object bean,String pre) { + Map map =BeanUtil.beanToMap(bean); // 将Bean转为Map + Map result = camelToUnderlineMap(map,pre); // 转换键名 + return genLike(wrapper,result); // 生成LIKE条件 + } + + // LIKE条件构造 + public static Wrapper allLike(Wrapper wrapper,Object bean) { + Map result = BeanUtil.beanToMap(bean, true, true); // 将Bean转为Map(忽略空值) + return genLike(wrapper,result); // 生成LIKE条件 + } + + // 生成LIKE条件 + public static Wrapper genLike(Wrapper wrapper,Map param) { + Iterator> it = param.entrySet().iterator(); // 获取迭代器 + int i=0; // 计数器 + while (it.hasNext()) { // 遍历Map + if(i>0) wrapper.and(); // 多个条件用AND连接 + Map.Entry entry = it.next(); // 获取键值对 + String key = entry.getKey(); // 获取字段名 + String value = (String) entry.getValue(); // 获取字段值 + wrapper.like(key, value); // 添加LIKE条件 + i++; // 计数器递增 + } + return wrapper; // 返回条件构造器 + } + + // LIKE或EQ条件构造 + public static Wrapper likeOrEq(Wrapper wrapper,Object bean) { + Map result = BeanUtil.beanToMap(bean, true, true); // 将Bean转为Map(忽略空值) + return genLikeOrEq(wrapper,result); // 生成LIKE或EQ条件 + } + + // 生成LIKE或EQ条件 + public static Wrapper genLikeOrEq(Wrapper wrapper,Map param) { + Iterator> it = param.entrySet().iterator(); // 获取迭代器 + int i=0; // 计数器 + while (it.hasNext()) { // 遍历Map + if(i>0) wrapper.and(); // 多个条件用AND连接 + Map.Entry entry = it.next(); // 获取键值对 + String key = entry.getKey(); // 获取字段名 + if(entry.getValue().toString().contains("%")) { // 判断是否包含%通配符 + wrapper.like(key, entry.getValue().toString().replace("%", "")); // 添加LIKE条件 + } else { + wrapper.eq(key, entry.getValue()); // 添加EQ条件 + } + i++; // 计数器递增 + } + return wrapper; // 返回条件构造器 + } + + // 全等条件构造 + public static Wrapper allEq(Wrapper wrapper,Object bean) { + Map result = BeanUtil.beanToMap(bean, true, true); // 将Bean转为Map(忽略空值) + return genEq(wrapper,result); // 生成EQ条件 + } + + // 生成EQ条件 + public static Wrapper genEq(Wrapper wrapper,Map param) { + Iterator> it = param.entrySet().iterator(); // 获取迭代器 + int i=0; // 计数器 + while (it.hasNext()) { // 遍历Map + if(i>0) wrapper.and(); // 多个条件用AND连接 + Map.Entry entry = it.next(); // 获取键值对 + String key = entry.getKey(); // 获取字段名 + wrapper.eq(key, entry.getValue()); // 添加EQ条件 + i++; // 计数器递增 + } + return wrapper; // 返回条件构造器 + } + + // BETWEEN条件构造 + public static Wrapper between(Wrapper wrapper,Map params) { + for(String key : params.keySet()) { // 遍历参数Map + String columnName = ""; // 列名变量 + if(key.endsWith("_start")) { // 判断是否是起始值 + columnName = key.substring(0, key.indexOf("_start")); // 提取列名 + if(StringUtils.isNotBlank(params.get(key).toString())) { // 判断值非空 + wrapper.ge(columnName, params.get(key)); // 添加大于等于条件 + } + } + if(key.endsWith("_end")) { // 判断是否是结束值 + columnName = key.substring(0, key.indexOf("_end")); // 提取列名 + if(StringUtils.isNotBlank(params.get(key).toString())) { // 判断值非空 + wrapper.le(columnName, params.get(key)); // 添加小于等于条件 + } + } + } + return wrapper; // 返回条件构造器 + } + + // 排序条件构造 + public static Wrapper sort(Wrapper wrapper,Map params) { + String order = ""; // 排序方式变量 + if(params.get("order") != null && StringUtils.isNotBlank(params.get("order").toString())) { // 获取排序方式 + order = params.get("order").toString(); // 设置排序方式 + } + if(params.get("sort") != null && StringUtils.isNotBlank(params.get("sort").toString())) { // 获取排序字段 + if(order.equalsIgnoreCase("desc")) { // 判断是否降序 + wrapper.orderDesc(Arrays.asList(params.get("sort"))); // 添加降序条件 + } else { + wrapper.orderAsc(Arrays.asList(params.get("sort"))); // 添加升序条件 + } + } + return wrapper; // 返回条件构造器 + } + + // 驼峰转下划线方法 + public static String camelToUnderline(String param) { + if (param == null || "".equals(param.trim())) { // 参数检查 + return ""; // 返回空字符串 + } + int len = param.length(); // 获取字符串长度 + StringBuilder sb = new StringBuilder(len); // 创建字符串构建器 + for (int i = 0; i < len; i++) { // 遍历字符串 + char c = param.charAt(i); // 获取当前字符 + if (Character.isUpperCase(c)) { // 判断是否大写字母 + sb.append(UNDERLINE); // 添加下划线 + sb.append(Character.toLowerCase(c)); // 添加小写字母 + } else { + sb.append(c); // 直接添加字符 + } + } + return sb.toString(); // 返回转换结果 + } + + // 测试方法 + public static void main(String[] ages) { + System.out.println(camelToUnderline("ABCddfANM")); // 测试驼峰转下划线 + } + + // Map键名驼峰转下划线 + public static Map camelToUnderlineMap(Map param, String pre) { + Map newMap = new HashMap(); // 创建新Map + Iterator> it = param.entrySet().iterator(); // 获取迭代器 + while (it.hasNext()) { // 遍历原Map + Map.Entry entry = it.next(); // 获取键值对 + String key = entry.getKey(); // 获取键名 + String newKey = camelToUnderline(key); // 转换键名格式 + if (pre.endsWith(".")) { // 判断前缀是否以点结尾 + newMap.put(pre + newKey, entry.getValue()); // 添加带前缀的键值对 + } else if (StringUtils.isEmpty(pre)) { // 判断前缀是否为空 + newMap.put(newKey, entry.getValue()); // 添加无前缀的键值对 + } else { + newMap.put(pre + "." + newKey, entry.getValue()); // 添加带前缀的键值对 + } + } + return newMap; // 返回新Map + } +} \ No newline at end of file