优化Mybatis-plus 自动填充

v1.4.1
Parker 5 years ago
parent c973bff5ef
commit 72b290bf33

@ -51,7 +51,7 @@ public class SQLDataAop {
} }
@AfterReturning(returning = "ret", pointcut = "insert()") @AfterReturning(returning = "ret", pointcut = "insert()")
public void insertHadnler(Object ret){ public void insertHandler(Object ret){
try { try {
if(ret == null){ if(ret == null){
throw new ServiceException(CoreMsg.SQL_EXCEPTION_INSERT); throw new ServiceException(CoreMsg.SQL_EXCEPTION_INSERT);
@ -64,7 +64,7 @@ public class SQLDataAop {
} }
@AfterReturning(returning = "ret", pointcut = "update()") @AfterReturning(returning = "ret", pointcut = "update()")
public void updateHadnler(Object ret){ public void updateHandler(Object ret){
try { try {
if(ret == null){ if(ret == null){
throw new ServiceException(CoreMsg.SQL_EXCEPTION_UPDATE); throw new ServiceException(CoreMsg.SQL_EXCEPTION_UPDATE);
@ -77,7 +77,7 @@ public class SQLDataAop {
} }
@AfterReturning(returning = "ret", pointcut = "delete()") @AfterReturning(returning = "ret", pointcut = "delete()")
public void deleteHadnler(Object ret){ public void deleteHandler(Object ret){
try { try {
if(ret != null){ if(ret != null){
Boolean retFlag = (Boolean) ret; Boolean retFlag = (Boolean) ret;

@ -53,9 +53,8 @@ public class UserCachingOperationNameGenerator {
private String startingWith(String prefix) { private String startingWith(String prefix) {
if (generated.containsKey(prefix)) { if (generated.containsKey(prefix)) {
generated.put(prefix, generated.get(prefix) + 1); generated.put(prefix, generated.get(prefix) + 1);
String nextUniqueOperationName = String.format("%s_%s", prefix, generated.get(prefix));
//log.warn("组件中存在相同的方法名称,自动生成组件方法唯一名称进行替换: {}", nextUniqueOperationName); //log.warn("组件中存在相同的方法名称,自动生成组件方法唯一名称进行替换: {}", nextUniqueOperationName);
return nextUniqueOperationName; return String.format("%s_%s", prefix, generated.get(prefix));
} else { } else {
generated.put(prefix, 0); generated.put(prefix, 0);
return prefix; return prefix;

@ -15,15 +15,12 @@
*/ */
package org.opsli.core.cache.local; package org.opsli.core.cache.local;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.file.FileReader;
import cn.hutool.core.util.XmlUtil; import cn.hutool.core.util.XmlUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.RandomUtils; import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.opsli.common.constants.CacheConstants; import org.opsli.common.constants.CacheConstants;
import org.opsli.common.utils.Props; import org.opsli.common.utils.Props;
import org.opsli.core.aspect.CacheDataAop; import org.opsli.core.aspect.CacheDataAop;
@ -39,7 +36,6 @@ import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node; import org.w3c.dom.Node;
import org.w3c.dom.NodeList; import org.w3c.dom.NodeList;
import java.io.BufferedInputStream;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
@ -219,7 +215,7 @@ public class CacheUtil {
* @return V * @return V
*/ */
public static Object getHash(String key, String field){ public static Object getHash(String key, String field){
return CacheUtil.getHash(CacheConstants.EDEN_HASH_DATA,key,field,true); return CacheUtil.getHash(key,field,true);
} }
/** /**
@ -246,7 +242,7 @@ public class CacheUtil {
* @return V * @return V
*/ */
public static Object getHashByKeyOriginal(String key, String field){ public static Object getHashByKeyOriginal(String key, String field){
return CacheUtil.getHash(CacheConstants.EDEN_HASH_DATA,key,field,false); return CacheUtil.getHash(key,field,false);
} }
/** /**
@ -449,16 +445,15 @@ public class CacheUtil {
/** /**
* Hash * Hash
* @param cacheName
* @param key * @param key
* @param field * @param field
* @param keyFlag key * @param keyFlag key
* @return * @return
*/ */
private static Object getHash(String cacheName, String key, String field, boolean keyFlag){ private static Object getHash(String key, String field, boolean keyFlag){
// 自动处理 key // 自动处理 key
if(keyFlag){ if(keyFlag){
key = CacheUtil.handleKey(cacheName, key); key = CacheUtil.handleKey(CacheConstants.EDEN_HASH_DATA, key);
} }
Object v = null; Object v = null;
try { try {
@ -1065,10 +1060,7 @@ public class CacheUtil {
try { try {
// 判断Redis 是否 包含当前Nil值 // 判断Redis 是否 包含当前Nil值
Object o = redisPlugin.get(NIL_FLAG_PREFIX + key); Object o = redisPlugin.get(NIL_FLAG_PREFIX + key);
if(o != null){ return o != null;
return true;
}
return false;
}catch (Exception e){ }catch (Exception e){
log.error(e.getMessage(),e); log.error(e.getMessage(),e);
} }

@ -17,6 +17,7 @@ package org.opsli.core.conf.mybatis;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.ReflectUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -25,7 +26,6 @@ import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlCommandType; import org.apache.ibatis.mapping.SqlCommandType;
import org.apache.ibatis.plugin.*; import org.apache.ibatis.plugin.*;
import org.opsli.api.wrapper.system.user.UserModel;
import org.opsli.common.constants.MyBatisConstants; import org.opsli.common.constants.MyBatisConstants;
import org.opsli.core.utils.UserUtil; import org.opsli.core.utils.UserUtil;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -67,10 +67,7 @@ public class AutoFillInterceptor implements Interceptor {
private void fillField(Invocation invocation) { private void fillField(Invocation invocation) {
Object[] args = invocation.getArgs(); Object[] args = invocation.getArgs();
SqlCommandType sqlCommandType = null; SqlCommandType sqlCommandType = null;
for (int i = 0; i < args.length; i++) { for (Object arg : args) {
Object arg = args[i];
//String className = arg.getClass().getName();
//log.info(i + " 参数类型:" + className);
//第一个参数处理。根据它判断是否给“操作属性”赋值。 //第一个参数处理。根据它判断是否给“操作属性”赋值。
//如果是第一个参数 MappedStatement //如果是第一个参数 MappedStatement
if (arg instanceof MappedStatement) { if (arg instanceof MappedStatement) {
@ -103,7 +100,8 @@ public class AutoFillInterceptor implements Interceptor {
if(arg == null ){ if(arg == null ){
return; return;
} }
// 当前时间
Date currDate = DateUtil.date();
Field[] fields = ReflectUtil.getFields(arg.getClass()); Field[] fields = ReflectUtil.getFields(arg.getClass());
for (Field f : fields) { for (Field f : fields) {
f.setAccessible(true); f.setAccessible(true);
@ -112,25 +110,25 @@ public class AutoFillInterceptor implements Interceptor {
case MyBatisConstants.FIELD_CREATE_BY: case MyBatisConstants.FIELD_CREATE_BY:
// 如果创建人 为空则进行默认赋值 // 如果创建人 为空则进行默认赋值
Object createValue = ReflectUtil.getFieldValue(arg, f.getName()); Object createValue = ReflectUtil.getFieldValue(arg, f.getName());
if(createValue == null){ if(StringUtils.isBlank(Convert.toStr(createValue))){
setProperty(arg, MyBatisConstants.FIELD_CREATE_BY, UserUtil.getUser().getId()); setProperty(arg, MyBatisConstants.FIELD_CREATE_BY, UserUtil.getUser().getId());
} }
break; break;
// 创建日期
case MyBatisConstants.FIELD_CREATE_TIME:
setProperty(arg, MyBatisConstants.FIELD_CREATE_TIME, new Date());
break;
// 更新人 // 更新人
case MyBatisConstants.FIELD_UPDATE_BY: case MyBatisConstants.FIELD_UPDATE_BY:
// 如果更新人 为空则进行默认赋值 // 如果更新人 为空则进行默认赋值
Object updateValue = ReflectUtil.getFieldValue(arg, f.getName()); Object updateValue = ReflectUtil.getFieldValue(arg, f.getName());
if(updateValue == null){ if(StringUtils.isBlank(Convert.toStr(updateValue))){
setProperty(arg, MyBatisConstants.FIELD_UPDATE_BY, UserUtil.getUser().getId()); setProperty(arg, MyBatisConstants.FIELD_UPDATE_BY, UserUtil.getUser().getId());
} }
break; break;
// 创建日期
case MyBatisConstants.FIELD_CREATE_TIME:
setProperty(arg, MyBatisConstants.FIELD_CREATE_TIME, currDate);
break;
// 更新日期 // 更新日期
case MyBatisConstants.FIELD_UPDATE_TIME: case MyBatisConstants.FIELD_UPDATE_TIME:
setProperty(arg, MyBatisConstants.FIELD_UPDATE_TIME, new Date()); setProperty(arg, MyBatisConstants.FIELD_UPDATE_TIME, currDate);
break; break;
// 乐观锁 // 乐观锁
case MyBatisConstants.FIELD_OPTIMISTIC_LOCK: case MyBatisConstants.FIELD_OPTIMISTIC_LOCK:
@ -142,10 +140,10 @@ public class AutoFillInterceptor implements Interceptor {
break; break;
// 多租户设置 // 多租户设置
case MyBatisConstants.FIELD_TENANT: case MyBatisConstants.FIELD_TENANT:
// 2020-12-05 修复当前租户可能为空字符串报错问题
// 如果租户ID 为空则进行默认赋值 // 如果租户ID 为空则进行默认赋值
Object tenantValue = ReflectUtil.getFieldValue(arg, f.getName()); Object tenantValue = ReflectUtil.getFieldValue(arg, f.getName());
String tenantValueStr = Convert.toStr(tenantValue); if(StringUtils.isBlank(Convert.toStr(tenantValue))){
if(StringUtils.isBlank(tenantValueStr)){
setProperty(arg, MyBatisConstants.FIELD_TENANT, UserUtil.getTenantId()); setProperty(arg, MyBatisConstants.FIELD_TENANT, UserUtil.getTenantId());
} }
break; break;
@ -187,13 +185,13 @@ public class AutoFillInterceptor implements Interceptor {
case MyBatisConstants.FIELD_UPDATE_BY: case MyBatisConstants.FIELD_UPDATE_BY:
// 如果更新人 为空则进行默认赋值 // 如果更新人 为空则进行默认赋值
Object updateValue = ReflectUtil.getFieldValue(arg, f.getName()); Object updateValue = ReflectUtil.getFieldValue(arg, f.getName());
if(updateValue == null){ if(StringUtils.isBlank(Convert.toStr(updateValue))){
setProperty(arg, MyBatisConstants.FIELD_UPDATE_BY, UserUtil.getUser().getId()); setProperty(arg, MyBatisConstants.FIELD_UPDATE_BY, UserUtil.getUser().getId());
} }
break; break;
// 更新日期 // 更新日期
case MyBatisConstants.FIELD_UPDATE_TIME: case MyBatisConstants.FIELD_UPDATE_TIME:
setProperty(arg, MyBatisConstants.FIELD_UPDATE_TIME, new Date()); setProperty(arg, MyBatisConstants.FIELD_UPDATE_TIME, DateUtil.date());
break; break;
default: default:
break; break;
@ -207,7 +205,7 @@ public class AutoFillInterceptor implements Interceptor {
/** /**
* *
* *
* @param bean * @param bean bean
*/ */
private void setProperty(Object bean, String name, Object value) { private void setProperty(Object bean, String name, Object value) {
//根据需要,将相关属性赋上默认值 //根据需要,将相关属性赋上默认值

Loading…
Cancel
Save