diff --git a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-base/src/main/java/com/github/yulichang/adapter/base/ITableInfoAdapter.java b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-base/src/main/java/com/github/yulichang/adapter/base/ITableInfoAdapter.java index 8fa6d08..1614f55 100644 --- a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-base/src/main/java/com/github/yulichang/adapter/base/ITableInfoAdapter.java +++ b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-base/src/main/java/com/github/yulichang/adapter/base/ITableInfoAdapter.java @@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; import com.baomidou.mybatisplus.core.metadata.TableInfo; import org.apache.ibatis.session.Configuration; +import java.lang.reflect.Field; +import java.util.function.Supplier; + /** * @author yulichang * @since 1.4.3 @@ -19,4 +22,6 @@ public interface ITableInfoAdapter { boolean mpjHasPK(TableInfo tableInfo); Configuration mpjGetConfiguration(TableInfo tableInfo); + + Field mpjGetField(TableFieldInfo fieldInfo, Supplier supplier); } diff --git a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v33x/src/main/java/com/github/yulichang/adapter/v33x/TableInfoAdapterV33x.java b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v33x/src/main/java/com/github/yulichang/adapter/v33x/TableInfoAdapterV33x.java index a2edcde..73dc984 100644 --- a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v33x/src/main/java/com/github/yulichang/adapter/v33x/TableInfoAdapterV33x.java +++ b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v33x/src/main/java/com/github/yulichang/adapter/v33x/TableInfoAdapterV33x.java @@ -6,7 +6,9 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.github.yulichang.adapter.base.ITableInfoAdapter; import org.apache.ibatis.session.Configuration; +import java.lang.reflect.Field; import java.util.Objects; +import java.util.function.Supplier; /** * @author yulichang @@ -40,4 +42,9 @@ public class TableInfoAdapterV33x implements ITableInfoAdapter { public Configuration mpjGetConfiguration(TableInfo tableInfo) { return tableInfo.getConfiguration(); } + + @Override + public Field mpjGetField(TableFieldInfo fieldInfo, Supplier supplier) { + return supplier.get(); + } } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/adapter/TableInfoAdapter.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/adapter/TableInfoAdapter.java index 41b66c2..1b6ae41 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/adapter/TableInfoAdapter.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/adapter/TableInfoAdapter.java @@ -5,6 +5,9 @@ import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.github.yulichang.adapter.base.ITableInfoAdapter; import org.apache.ibatis.session.Configuration; +import java.lang.reflect.Field; +import java.util.function.Supplier; + /** * @author yulichang * @since 1.4.3 @@ -35,4 +38,9 @@ public class TableInfoAdapter implements ITableInfoAdapter { public Configuration mpjGetConfiguration(TableInfo tableInfo) { return tableInfo.getConfiguration(); } + + @Override + public Field mpjGetField(TableFieldInfo fieldInfo, Supplier supplier) { + return fieldInfo.getField(); + } } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/UpdateJoin.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/UpdateJoin.java index 021f2c2..aee7f04 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/UpdateJoin.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/UpdateJoin.java @@ -38,7 +38,17 @@ public class UpdateJoin extends MPJAbstractMethod { @Override public String mpjConvertIfEwParam(String param, boolean newLine) { - return super.convertIfEwParam(param, newLine); + try { + return super.convertIfEwParam(param, newLine); + } catch (Throwable t) { + return convertIfEwParamOverride(param, newLine); + } + } + + + private String convertIfEwParamOverride(final String param, final boolean newLine) { + return SqlScriptUtils.convertIf(SqlScriptUtils.unSafeParam(param), + String.format("%s != null and %s != null", WRAPPER, param), newLine); } /** diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/UpdateJoinAndNull.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/UpdateJoinAndNull.java index 477f8af..3796cb7 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/UpdateJoinAndNull.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/UpdateJoinAndNull.java @@ -3,6 +3,7 @@ package com.github.yulichang.method; import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; import com.baomidou.mybatisplus.core.metadata.TableInfo; +import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.mapping.SqlSource; @@ -35,7 +36,17 @@ public class UpdateJoinAndNull extends MPJAbstractMethod { @Override public String mpjConvertIfEwParam(String param, boolean newLine) { - return super.convertIfEwParam(param, newLine); + try { + return super.convertIfEwParam(param, newLine); + } catch (Throwable t) { + return convertIfEwParamOverride(param, newLine); + } + } + + + private String convertIfEwParamOverride(final String param, final boolean newLine) { + return SqlScriptUtils.convertIf(SqlScriptUtils.unSafeParam(param), + String.format("%s != null and %s != null", WRAPPER, param), newLine); } /** diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/UpdateJoinWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/UpdateJoinWrapper.java index 5ad6ce6..84628c3 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/UpdateJoinWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/UpdateJoinWrapper.java @@ -15,6 +15,7 @@ import com.github.yulichang.wrapper.interfaces.Update; import lombok.AllArgsConstructor; import lombok.Data; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -206,7 +207,12 @@ public class UpdateJoinWrapper extends MPJAbstractLambdaWrapper { + Field field1 = ReflectionKit.getFieldMap(obj.getClass()).get(fieldInfo.getProperty()); + field1.setAccessible(true); + return field1; + }); + val = field.get(obj); } catch (IllegalAccessException e) { throw new RuntimeException(e); }