Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
hjx
2025-12-14 18:21:47 +08:00
13 changed files with 668 additions and 2 deletions
@@ -0,0 +1,57 @@
package com.mhd.basic.infrastructure.config;
import com.mhd.basic.infrastructure.util.CamelCaseUtils;
import org.apache.ibatis.executor.resultset.ResultSetHandler;
import org.apache.ibatis.plugin.*;
import org.springframework.stereotype.Component;
import java.sql.Statement;
import java.util.List;
import java.util.Map;
import java.util.Properties;
/**
* MyBatis插件:拦截Map类型结果,转换Key为驼峰
*/
@Intercepts({@Signature(
type = ResultSetHandler.class,
method = "handleResultSets",
args = {Statement.class}
)})
@Component
public class CamelCaseMapPlugin implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
// 执行原方法获取结果
Object result = invocation.proceed();
// 处理结果:如果是List且元素是Map,转换Key
if (result instanceof List<?>) {
List<Map<String, Object>> list = (List<Map<String, Object>>) result;
for (int i = 0; i < list.size(); i++) {
Object item = list.get(i);
if (item instanceof Map<?, ?>) {
@SuppressWarnings("unchecked")
Map<String, Object> map = (Map<String, Object>) item;
// 转换Key为驼峰
list.set(i, CamelCaseUtils.convertMapKeyToCamel(map));
}
}
}
return result;
}
@Override
public Object plugin(Object target) {
// 只拦截ResultSetHandler类型
if (target instanceof ResultSetHandler) {
return Plugin.wrap(target, this);
}
return target;
}
@Override
public void setProperties(Properties properties) {
// 可配置参数,此处无需处理
}
}
@@ -0,0 +1,54 @@
package com.mhd.basic.infrastructure.util;
import org.apache.commons.lang3.StringUtils;
import java.util.HashMap;
import java.util.Map;
/**
* 字符串工具类扩展:下划线/大写转驼峰
*/
public class CamelCaseUtils {
/**
* 大写下划线转驼峰(如:USER_NAME → userName
*/
public static String toCamelCase(String str) {
if (StringUtils.isBlank(str)) {
return str;
}
// 先转小写,再处理下划线
str = str.toLowerCase();
StringBuilder sb = new StringBuilder();
boolean nextUpperCase = false;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == '_') {
nextUpperCase = true;
} else {
if (nextUpperCase) {
sb.append(Character.toUpperCase(c));
nextUpperCase = false;
} else {
sb.append(c);
}
}
}
return sb.toString();
}
/**
* 批量转换Map的Key为驼峰
*/
public static <V> Map<String, V> convertMapKeyToCamel(Map<String, V> map) {
if (map == null || map.isEmpty()) {
return map;
}
Map<String, V> newMap = new HashMap<>(map.size());
for (Map.Entry<String, V> entry : map.entrySet()) {
String camelKey = toCamelCase(entry.getKey());
newMap.put(camelKey, entry.getValue());
}
return newMap;
}
}
@@ -0,0 +1,57 @@
package com.mhd.user.infrastructure.config;
import com.mhd.user.infrastructure.util.CamelCaseUtils;
import org.apache.ibatis.executor.resultset.ResultSetHandler;
import org.apache.ibatis.plugin.*;
import org.springframework.stereotype.Component;
import java.sql.Statement;
import java.util.List;
import java.util.Map;
import java.util.Properties;
/**
* MyBatis插件:拦截Map类型结果,转换Key为驼峰
*/
@Intercepts({@Signature(
type = ResultSetHandler.class,
method = "handleResultSets",
args = {Statement.class}
)})
@Component
public class CamelCaseMapPlugin implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
// 执行原方法获取结果
Object result = invocation.proceed();
// 处理结果:如果是List且元素是Map,转换Key
if (result instanceof List<?>) {
List<Map<String, Object>> list = (List<Map<String, Object>>) result;
for (int i = 0; i < list.size(); i++) {
Object item = list.get(i);
if (item instanceof Map<?, ?>) {
@SuppressWarnings("unchecked")
Map<String, Object> map = (Map<String, Object>) item;
// 转换Key为驼峰
list.set(i, CamelCaseUtils.convertMapKeyToCamel(map));
}
}
}
return result;
}
@Override
public Object plugin(Object target) {
// 只拦截ResultSetHandler类型
if (target instanceof ResultSetHandler) {
return Plugin.wrap(target, this);
}
return target;
}
@Override
public void setProperties(Properties properties) {
// 可配置参数,此处无需处理
}
}
@@ -0,0 +1,54 @@
package com.mhd.user.infrastructure.util;
import org.apache.commons.lang3.StringUtils;
import java.util.HashMap;
import java.util.Map;
/**
* 字符串工具类扩展:下划线/大写转驼峰
*/
public class CamelCaseUtils {
/**
* 大写下划线转驼峰(如:USER_NAME → userName
*/
public static String toCamelCase(String str) {
if (StringUtils.isBlank(str)) {
return str;
}
// 先转小写,再处理下划线
str = str.toLowerCase();
StringBuilder sb = new StringBuilder();
boolean nextUpperCase = false;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == '_') {
nextUpperCase = true;
} else {
if (nextUpperCase) {
sb.append(Character.toUpperCase(c));
nextUpperCase = false;
} else {
sb.append(c);
}
}
}
return sb.toString();
}
/**
* 批量转换Map的Key为驼峰
*/
public static <V> Map<String, V> convertMapKeyToCamel(Map<String, V> map) {
if (map == null || map.isEmpty()) {
return map;
}
Map<String, V> newMap = new HashMap<>(map.size());
for (Map.Entry<String, V> entry : map.entrySet()) {
String camelKey = toCamelCase(entry.getKey());
newMap.put(camelKey, entry.getValue());
}
return newMap;
}
}
@@ -0,0 +1,57 @@
package com.linke.finance.infrastructure.config;
import com.linke.finance.infrastructure.util.CamelCaseUtils;
import org.apache.ibatis.executor.resultset.ResultSetHandler;
import org.apache.ibatis.plugin.*;
import org.springframework.stereotype.Component;
import java.sql.Statement;
import java.util.List;
import java.util.Map;
import java.util.Properties;
/**
* MyBatis插件:拦截Map类型结果,转换Key为驼峰
*/
@Intercepts({@Signature(
type = ResultSetHandler.class,
method = "handleResultSets",
args = {Statement.class}
)})
@Component
public class CamelCaseMapPlugin implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
// 执行原方法获取结果
Object result = invocation.proceed();
// 处理结果:如果是List且元素是Map,转换Key
if (result instanceof List<?>) {
List<Map<String, Object>> list = (List<Map<String, Object>>) result;
for (int i = 0; i < list.size(); i++) {
Object item = list.get(i);
if (item instanceof Map<?, ?>) {
@SuppressWarnings("unchecked")
Map<String, Object> map = (Map<String, Object>) item;
// 转换Key为驼峰
list.set(i, CamelCaseUtils.convertMapKeyToCamel(map));
}
}
}
return result;
}
@Override
public Object plugin(Object target) {
// 只拦截ResultSetHandler类型
if (target instanceof ResultSetHandler) {
return Plugin.wrap(target, this);
}
return target;
}
@Override
public void setProperties(Properties properties) {
// 可配置参数,此处无需处理
}
}
@@ -0,0 +1,54 @@
package com.linke.finance.infrastructure.util;
import org.apache.commons.lang3.StringUtils;
import java.util.HashMap;
import java.util.Map;
/**
* 字符串工具类扩展:下划线/大写转驼峰
*/
public class CamelCaseUtils {
/**
* 大写下划线转驼峰(如:USER_NAME → userName
*/
public static String toCamelCase(String str) {
if (StringUtils.isBlank(str)) {
return str;
}
// 先转小写,再处理下划线
str = str.toLowerCase();
StringBuilder sb = new StringBuilder();
boolean nextUpperCase = false;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == '_') {
nextUpperCase = true;
} else {
if (nextUpperCase) {
sb.append(Character.toUpperCase(c));
nextUpperCase = false;
} else {
sb.append(c);
}
}
}
return sb.toString();
}
/**
* 批量转换Map的Key为驼峰
*/
public static <V> Map<String, V> convertMapKeyToCamel(Map<String, V> map) {
if (map == null || map.isEmpty()) {
return map;
}
Map<String, V> newMap = new HashMap<>(map.size());
for (Map.Entry<String, V> entry : map.entrySet()) {
String camelKey = toCamelCase(entry.getKey());
newMap.put(camelKey, entry.getValue());
}
return newMap;
}
}
@@ -0,0 +1,57 @@
package com.linke.product.domain.config;
import com.linke.product.domain.util.CamelCaseUtils;
import org.apache.ibatis.executor.resultset.ResultSetHandler;
import org.apache.ibatis.plugin.*;
import org.springframework.stereotype.Component;
import java.sql.Statement;
import java.util.List;
import java.util.Map;
import java.util.Properties;
/**
* MyBatis插件:拦截Map类型结果,转换Key为驼峰
*/
@Intercepts({@Signature(
type = ResultSetHandler.class,
method = "handleResultSets",
args = {Statement.class}
)})
@Component
public class CamelCaseMapPlugin implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
// 执行原方法获取结果
Object result = invocation.proceed();
// 处理结果:如果是List且元素是Map,转换Key
if (result instanceof List<?>) {
List<Map<String, Object>> list = (List<Map<String, Object>>) result;
for (int i = 0; i < list.size(); i++) {
Object item = list.get(i);
if (item instanceof Map<?, ?>) {
@SuppressWarnings("unchecked")
Map<String, Object> map = (Map<String, Object>) item;
// 转换Key为驼峰
list.set(i, CamelCaseUtils.convertMapKeyToCamel(map));
}
}
}
return result;
}
@Override
public Object plugin(Object target) {
// 只拦截ResultSetHandler类型
if (target instanceof ResultSetHandler) {
return Plugin.wrap(target, this);
}
return target;
}
@Override
public void setProperties(Properties properties) {
// 可配置参数,此处无需处理
}
}
@@ -0,0 +1,54 @@
package com.linke.product.domain.util;
import org.apache.commons.lang3.StringUtils;
import java.util.HashMap;
import java.util.Map;
/**
* 字符串工具类扩展:下划线/大写转驼峰
*/
public class CamelCaseUtils {
/**
* 大写下划线转驼峰(如:USER_NAME → userName
*/
public static String toCamelCase(String str) {
if (StringUtils.isBlank(str)) {
return str;
}
// 先转小写,再处理下划线
str = str.toLowerCase();
StringBuilder sb = new StringBuilder();
boolean nextUpperCase = false;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == '_') {
nextUpperCase = true;
} else {
if (nextUpperCase) {
sb.append(Character.toUpperCase(c));
nextUpperCase = false;
} else {
sb.append(c);
}
}
}
return sb.toString();
}
/**
* 批量转换Map的Key为驼峰
*/
public static <V> Map<String, V> convertMapKeyToCamel(Map<String, V> map) {
if (map == null || map.isEmpty()) {
return map;
}
Map<String, V> newMap = new HashMap<>(map.size());
for (Map.Entry<String, V> entry : map.entrySet()) {
String camelKey = toCamelCase(entry.getKey());
newMap.put(camelKey, entry.getValue());
}
return newMap;
}
}
@@ -273,8 +273,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectMenuComponent" resultType="java.util.HashMap">
SELECT
menu_component AS menuComponent,
menu_redirect_path AS menuRedirectPath
menu_component,
menu_redirect_path
FROM
sys_menu
where
@@ -0,0 +1,57 @@
package com.linke.thirdParty.infrastructure.config;
import com.linke.thirdParty.infrastructure.utils.CamelCaseUtils;
import org.apache.ibatis.executor.resultset.ResultSetHandler;
import org.apache.ibatis.plugin.*;
import org.springframework.stereotype.Component;
import java.sql.Statement;
import java.util.List;
import java.util.Map;
import java.util.Properties;
/**
* MyBatis插件:拦截Map类型结果,转换Key为驼峰
*/
@Intercepts({@Signature(
type = ResultSetHandler.class,
method = "handleResultSets",
args = {Statement.class}
)})
@Component
public class CamelCaseMapPlugin implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
// 执行原方法获取结果
Object result = invocation.proceed();
// 处理结果:如果是List且元素是Map,转换Key
if (result instanceof List<?>) {
List<Map<String, Object>> list = (List<Map<String, Object>>) result;
for (int i = 0; i < list.size(); i++) {
Object item = list.get(i);
if (item instanceof Map<?, ?>) {
@SuppressWarnings("unchecked")
Map<String, Object> map = (Map<String, Object>) item;
// 转换Key为驼峰
list.set(i, CamelCaseUtils.convertMapKeyToCamel(map));
}
}
}
return result;
}
@Override
public Object plugin(Object target) {
// 只拦截ResultSetHandler类型
if (target instanceof ResultSetHandler) {
return Plugin.wrap(target, this);
}
return target;
}
@Override
public void setProperties(Properties properties) {
// 可配置参数,此处无需处理
}
}
@@ -0,0 +1,54 @@
package com.linke.thirdParty.infrastructure.utils;
import org.apache.commons.lang3.StringUtils;
import java.util.HashMap;
import java.util.Map;
/**
* 字符串工具类扩展:下划线/大写转驼峰
*/
public class CamelCaseUtils {
/**
* 大写下划线转驼峰(如:USER_NAME → userName
*/
public static String toCamelCase(String str) {
if (StringUtils.isBlank(str)) {
return str;
}
// 先转小写,再处理下划线
str = str.toLowerCase();
StringBuilder sb = new StringBuilder();
boolean nextUpperCase = false;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == '_') {
nextUpperCase = true;
} else {
if (nextUpperCase) {
sb.append(Character.toUpperCase(c));
nextUpperCase = false;
} else {
sb.append(c);
}
}
}
return sb.toString();
}
/**
* 批量转换Map的Key为驼峰
*/
public static <V> Map<String, V> convertMapKeyToCamel(Map<String, V> map) {
if (map == null || map.isEmpty()) {
return map;
}
Map<String, V> newMap = new HashMap<>(map.size());
for (Map.Entry<String, V> entry : map.entrySet()) {
String camelKey = toCamelCase(entry.getKey());
newMap.put(camelKey, entry.getValue());
}
return newMap;
}
}
@@ -0,0 +1,57 @@
package com.linke.transport.infrastructure.config;
import com.linke.transport.infrastructure.util.CamelCaseUtils;
import org.apache.ibatis.executor.resultset.ResultSetHandler;
import org.apache.ibatis.plugin.*;
import org.springframework.stereotype.Component;
import java.sql.Statement;
import java.util.List;
import java.util.Map;
import java.util.Properties;
/**
* MyBatis插件:拦截Map类型结果,转换Key为驼峰
*/
@Intercepts({@Signature(
type = ResultSetHandler.class,
method = "handleResultSets",
args = {Statement.class}
)})
@Component
public class CamelCaseMapPlugin implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
// 执行原方法获取结果
Object result = invocation.proceed();
// 处理结果:如果是List且元素是Map,转换Key
if (result instanceof List<?>) {
List<Map<String, Object>> list = (List<Map<String, Object>>) result;
for (int i = 0; i < list.size(); i++) {
Object item = list.get(i);
if (item instanceof Map<?, ?>) {
@SuppressWarnings("unchecked")
Map<String, Object> map = (Map<String, Object>) item;
// 转换Key为驼峰
list.set(i, CamelCaseUtils.convertMapKeyToCamel(map));
}
}
}
return result;
}
@Override
public Object plugin(Object target) {
// 只拦截ResultSetHandler类型
if (target instanceof ResultSetHandler) {
return Plugin.wrap(target, this);
}
return target;
}
@Override
public void setProperties(Properties properties) {
// 可配置参数,此处无需处理
}
}
@@ -0,0 +1,54 @@
package com.linke.transport.infrastructure.util;
import org.apache.commons.lang3.StringUtils;
import java.util.HashMap;
import java.util.Map;
/**
* 字符串工具类扩展:下划线/大写转驼峰
*/
public class CamelCaseUtils {
/**
* 大写下划线转驼峰(如:USER_NAME → userName
*/
public static String toCamelCase(String str) {
if (StringUtils.isBlank(str)) {
return str;
}
// 先转小写,再处理下划线
str = str.toLowerCase();
StringBuilder sb = new StringBuilder();
boolean nextUpperCase = false;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == '_') {
nextUpperCase = true;
} else {
if (nextUpperCase) {
sb.append(Character.toUpperCase(c));
nextUpperCase = false;
} else {
sb.append(c);
}
}
}
return sb.toString();
}
/**
* 批量转换Map的Key为驼峰
*/
public static <V> Map<String, V> convertMapKeyToCamel(Map<String, V> map) {
if (map == null || map.isEmpty()) {
return map;
}
Map<String, V> newMap = new HashMap<>(map.size());
for (Map.Entry<String, V> entry : map.entrySet()) {
String camelKey = toCamelCase(entry.getKey());
newMap.put(camelKey, entry.getValue());
}
return newMap;
}
}