001/* 002 * Copyright (c) 2022-2025, Mybatis-Flex (fuhai999@gmail.com). 003 * <p> 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * <p> 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * <p> 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package com.mybatisflex.core.update; 018 019import com.mybatisflex.core.query.QueryColumn; 020import com.mybatisflex.core.util.LambdaGetter; 021 022import java.util.function.BooleanSupplier; 023import java.util.function.Predicate; 024 025/** 026 * 属性设置接口。 027 * 028 * @param <R> 链式调用返回值类型 029 * @author 王帅 030 * @since 2023-08-16 031 */ 032public interface PropertySetter<R> { 033 034 /** 035 * 设置字段对应参数值。 036 * 037 * @param property 字段名 038 * @param value 参数值 039 */ 040 default R set(String property, Object value) { 041 return set(property, value, true); 042 } 043 044 /** 045 * 设置字段对应参数值。 046 * 047 * @param property 字段名 048 * @param value 参数值 049 * @param isEffective 是否生效 050 */ 051 R set(String property, Object value, boolean isEffective); 052 053 /** 054 * 设置字段对应参数值。 055 * 056 * @param property 字段名 057 * @param value 参数值 058 * @param isEffective 是否生效 059 */ 060 default R set(String property, Object value, BooleanSupplier isEffective) { 061 return set(property, value, isEffective.getAsBoolean()); 062 } 063 064 /** 065 * 设置字段对应参数值。 066 * 067 * @param property 字段名 068 * @param value 参数值 069 * @param isEffective 是否生效 070 */ 071 default <V> R set(String property, V value, Predicate<V> isEffective) { 072 return set(property, value, isEffective.test(value)); 073 } 074 075 /** 076 * 设置字段对应参数值。 077 * 078 * @param property 字段名 079 * @param value 参数值 080 */ 081 default R set(QueryColumn property, Object value) { 082 return set(property, value, true); 083 } 084 085 /** 086 * 设置字段对应参数值。 087 * 088 * @param property 字段名 089 * @param value 参数值 090 * @param isEffective 是否生效 091 */ 092 R set(QueryColumn property, Object value, boolean isEffective); 093 094 /** 095 * 设置字段对应参数值。 096 * 097 * @param property 字段名 098 * @param value 参数值 099 * @param isEffective 是否生效 100 */ 101 default R set(QueryColumn property, Object value, BooleanSupplier isEffective) { 102 return set(property, value, isEffective.getAsBoolean()); 103 } 104 105 /** 106 * 设置字段对应参数值。 107 * 108 * @param property 字段名 109 * @param value 参数值 110 * @param isEffective 是否生效 111 */ 112 default <V> R set(QueryColumn property, V value, Predicate<V> isEffective) { 113 return set(property, value, isEffective.test(value)); 114 } 115 116 /** 117 * 设置字段对应参数值。 118 * 119 * @param property 字段名 120 * @param value 参数值 121 */ 122 default <T> R set(LambdaGetter<T> property, Object value) { 123 return set(property, value, true); 124 } 125 126 /** 127 * 设置字段对应参数值。 128 * 129 * @param property 字段名 130 * @param value 参数值 131 * @param isEffective 是否生效 132 */ 133 <T> R set(LambdaGetter<T> property, Object value, boolean isEffective); 134 135 /** 136 * 设置字段对应参数值。 137 * 138 * @param property 字段名 139 * @param value 参数值 140 * @param isEffective 是否生效 141 */ 142 default <T> R set(LambdaGetter<T> property, Object value, BooleanSupplier isEffective) { 143 return set(property, value, isEffective.getAsBoolean()); 144 } 145 146 /** 147 * 设置字段对应参数值。 148 * 149 * @param property 字段名 150 * @param value 参数值 151 * @param isEffective 是否生效 152 */ 153 default <T, V> R set(LambdaGetter<T> property, V value, Predicate<V> isEffective) { 154 return set(property, value, isEffective.test(value)); 155 } 156 157 /** 158 * 设置字段对应原生值。 159 * 160 * @param property 字段名 161 * @param value 原生值 162 */ 163 default R setRaw(String property, Object value) { 164 return setRaw(property, value, true); 165 } 166 167 /** 168 * 设置字段对应原生值。 169 * 170 * @param property 字段名 171 * @param value 原生值 172 * @param isEffective 是否生效 173 */ 174 R setRaw(String property, Object value, boolean isEffective); 175 176 /** 177 * 设置字段对应原生值。 178 * 179 * @param property 字段名 180 * @param value 原生值 181 * @param isEffective 是否生效 182 */ 183 default R setRaw(String property, Object value, BooleanSupplier isEffective) { 184 return setRaw(property, value, isEffective.getAsBoolean()); 185 } 186 187 /** 188 * 设置字段对应原生值。 189 * 190 * @param property 字段名 191 * @param value 原生值 192 * @param isEffective 是否生效 193 */ 194 default <V> R setRaw(String property, V value, Predicate<V> isEffective) { 195 return setRaw(property, value, isEffective.test(value)); 196 } 197 198 /** 199 * 设置字段对应原生值。 200 * 201 * @param property 字段名 202 * @param value 原生值 203 */ 204 default R setRaw(QueryColumn property, Object value) { 205 return setRaw(property, value, true); 206 } 207 208 /** 209 * 设置字段对应原生值。 210 * 211 * @param property 字段名 212 * @param value 原生值 213 * @param isEffective 是否生效 214 */ 215 R setRaw(QueryColumn property, Object value, boolean isEffective); 216 217 /** 218 * 设置字段对应原生值。 219 * 220 * @param property 字段名 221 * @param value 原生值 222 * @param isEffective 是否生效 223 */ 224 default R setRaw(QueryColumn property, Object value, BooleanSupplier isEffective) { 225 return setRaw(property, value, isEffective.getAsBoolean()); 226 } 227 228 /** 229 * 设置字段对应原生值。 230 * 231 * @param property 字段名 232 * @param value 原生值 233 * @param isEffective 是否生效 234 */ 235 default <V> R setRaw(QueryColumn property, V value, Predicate<V> isEffective) { 236 return setRaw(property, value, isEffective.test(value)); 237 } 238 239 /** 240 * 设置字段对应原生值。 241 * 242 * @param property 字段名 243 * @param value 原生值 244 */ 245 default <T> R setRaw(LambdaGetter<T> property, Object value) { 246 return setRaw(property, value, true); 247 } 248 249 /** 250 * 设置字段对应原生值。 251 * 252 * @param property 字段名 253 * @param value 原生值 254 * @param isEffective 是否生效 255 */ 256 <T> R setRaw(LambdaGetter<T> property, Object value, boolean isEffective); 257 258 /** 259 * 设置字段对应原生值。 260 * 261 * @param property 字段名 262 * @param value 原生值 263 * @param isEffective 是否生效 264 */ 265 default <T> R setRaw(LambdaGetter<T> property, Object value, BooleanSupplier isEffective) { 266 return setRaw(property, value, isEffective.getAsBoolean()); 267 } 268 269 /** 270 * 设置字段对应原生值。 271 * 272 * @param property 字段名 273 * @param value 原生值 274 * @param isEffective 是否生效 275 */ 276 default <T, V> R setRaw(LambdaGetter<T> property, V value, Predicate<V> isEffective) { 277 return setRaw(property, value, isEffective.test(value)); 278 } 279 280}