From dadaa401c2bec56c965dff39043bbc8c87f732d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Thu, 20 Feb 2025 17:21:09 +0800 Subject: [PATCH 1/5] =?UTF-8?q?joinWrapper=E5=A2=9E=E5=BC=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/czg/utils/JoinQueryWrapper.java | 68 +++++++++++++++++++ .../service/impl/ShopUserServiceImpl.java | 11 ++- 2 files changed, 77 insertions(+), 2 deletions(-) diff --git a/cash-common/cash-common-tools/src/main/java/com/czg/utils/JoinQueryWrapper.java b/cash-common/cash-common-tools/src/main/java/com/czg/utils/JoinQueryWrapper.java index acfbca1d..c12f94e5 100644 --- a/cash-common/cash-common-tools/src/main/java/com/czg/utils/JoinQueryWrapper.java +++ b/cash-common/cash-common-tools/src/main/java/com/czg/utils/JoinQueryWrapper.java @@ -1,21 +1,26 @@ package com.czg.utils; import cn.hutool.core.util.StrUtil; +import com.mybatisflex.core.constant.SqlConnector; import com.mybatisflex.core.exception.FlexExceptions; import com.mybatisflex.core.query.*; import com.mybatisflex.core.table.TableInfo; import com.mybatisflex.core.table.TableInfoFactory; import com.mybatisflex.core.util.LambdaGetter; +import com.mybatisflex.core.util.LambdaUtil; +import com.mybatisflex.core.util.MapUtil; import java.io.Serializable; import java.lang.invoke.SerializedLambda; import java.lang.reflect.Method; +import java.util.function.Consumer; import static com.mybatisflex.core.util.LambdaUtil.getFieldName; /** * 关联查询的queryWrapper + * * @author Administrator */ public class JoinQueryWrapper extends QueryWrapper { @@ -55,6 +60,61 @@ public class JoinQueryWrapper extends QueryWrapper { return tableInfo.getTableName() + "." + StrUtil.toUnderlineCase(getFieldName(column)); } + public static QueryColumn column(LambdaGetter getter) { + SerializedLambda lambda = getSerializedLambda(getter); + Class entityClass = getImplClass0(lambda); + TableInfo tableInfo = TableInfoFactory.ofEntityClass(entityClass); + String fieldName = getFieldName(getter); + QueryColumn columnByProperty = tableInfo.getQueryColumnByProperty(fieldName); + columnByProperty.setName(tableInfo.getTableName() + "." + StrUtil.toUnderlineCase(fieldName)); + return columnByProperty; + } + + @Override + public JoinQueryWrapper and(Consumer consumer, boolean condition) { + if (!condition) { + return this; + } + JoinQueryWrapper newWrapper = new JoinQueryWrapper(); + consumer.accept(newWrapper); + QueryCondition whereQueryCondition = newWrapper.whereQueryCondition; + if (whereQueryCondition != null) { + and(new Brackets(whereQueryCondition)); + } + return this; + } + + @Override + public JoinQueryWrapper or(Consumer consumer, boolean condition) { + if (!condition) { + return this; + } + JoinQueryWrapper newWrapper = new JoinQueryWrapper(); + consumer.accept(newWrapper); + QueryCondition whereQueryCondition = newWrapper.whereQueryCondition; + if (whereQueryCondition != null) { + or(new Brackets(whereQueryCondition)); + } + return this; + } + + @Override + public JoinQueryWrapper or(Consumer consumer) { + return or(consumer, true); + } + + @Override + public JoinQueryWrapper and(Consumer consumer) { + return and(consumer, true); + } + + + + @Override + public QueryWrapper and(QueryCondition queryCondition) { + return addWhereQueryCondition(queryCondition, SqlConnector.AND); + } + @Override public JoinQueryWrapper eq(LambdaGetter column, Object value) { eq(getColum(column), value); @@ -90,4 +150,12 @@ public class JoinQueryWrapper extends QueryWrapper { orderBy(getColum(column), asc); return this; } + + @Override + public JoinQueryWrapper like(LambdaGetter column, Object value) { + like(getColum(column), value); + return this; + } + + } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserServiceImpl.java index 13d9db48..9f127f56 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserServiceImpl.java @@ -18,6 +18,7 @@ import com.czg.sa.StpKit; import com.czg.service.RedisService; import com.czg.service.account.mapper.ShopUserMapper; import com.czg.utils.AssertUtil; +import com.czg.utils.JoinQueryWrapper; import com.czg.utils.PageUtil; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.query.QueryWrapper; @@ -56,9 +57,15 @@ public class ShopUserServiceImpl extends ServiceImpl i @Override public Page getPage(String key, Integer isVip) { - QueryWrapper queryWrapper = new QueryWrapper().eq(ShopUser::getShopId, StpKit.USER.getShopId()); + JoinQueryWrapper queryWrapper = new JoinQueryWrapper().eq(ShopUser::getShopId, StpKit.USER.getShopId()); if (StrUtil.isNotBlank(key)) { - queryWrapper.and(column(UserInfo::getNickName).like(key).or(column(UserInfo::getPhone).like(key))); + queryWrapper.and(q -> { + q.like(UserInfo::getNickName, key).or(r -> { + r.like(UserInfo::getPhone, key); + }); + }); + +// queryWrapper.and(JoinQueryWrapper.column(UserInfo::getNickName).like(key).or(JoinQueryWrapper.column(UserInfo::getPhone).like(key))); } if (isVip != null) { From a8886b3153b1662e056953959dcb4801c0281027 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Thu, 20 Feb 2025 18:05:40 +0800 Subject: [PATCH 2/5] =?UTF-8?q?mybatisFlex=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E6=96=B9=E8=A8=80=E8=A7=A3=E6=9E=90=E5=99=A8=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/czg/config/MyCommonsDialectImpl.java | 45 +++++++++++++++++++ .../com/czg/config/MybatisFlexConfig.java | 20 +++++++++ .../java/com/czg/utils/JoinQueryWrapper.java | 4 -- 3 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 cash-common/cash-common-api-config/src/main/java/com/czg/config/MyCommonsDialectImpl.java create mode 100644 cash-common/cash-common-api-config/src/main/java/com/czg/config/MybatisFlexConfig.java diff --git a/cash-common/cash-common-api-config/src/main/java/com/czg/config/MyCommonsDialectImpl.java b/cash-common/cash-common-api-config/src/main/java/com/czg/config/MyCommonsDialectImpl.java new file mode 100644 index 00000000..3e9c766b --- /dev/null +++ b/cash-common/cash-common-api-config/src/main/java/com/czg/config/MyCommonsDialectImpl.java @@ -0,0 +1,45 @@ +package com.czg.config; + +import com.mybatisflex.core.dialect.impl.CommonsDialectImpl; +import com.mybatisflex.core.exception.FlexExceptions; +import com.mybatisflex.core.exception.locale.LocalizedFormats; +import com.mybatisflex.core.query.CPI; +import com.mybatisflex.core.query.QueryCondition; +import com.mybatisflex.core.query.QueryTable; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.core.util.StringUtil; +import org.springframework.stereotype.Component; + +import java.util.List; + +import static com.mybatisflex.core.constant.SqlConsts.ASTERISK; +import static com.mybatisflex.core.constant.SqlConsts.WHERE; + +/** + * 自定义sql解析器 备用 + */ +//@Component +public class MyCommonsDialectImpl extends CommonsDialectImpl { + @Override + public String wrap(String keyword) { + return ASTERISK.equals(keyword) ? keyword : keywordWrap.wrap(keyword); + } + + protected void buildWhereSql(StringBuilder sqlBuilder, QueryWrapper queryWrapper, List queryTables, boolean allowNoCondition) { + QueryCondition whereQueryCondition = CPI.getWhereQueryCondition(queryWrapper); + if (whereQueryCondition != null) { + String whereSql = whereQueryCondition.toSql(queryTables, this); + if (StringUtil.hasText(whereSql)) { + sqlBuilder.append(WHERE).append(whereSql); + } else if (!allowNoCondition) { + throw FlexExceptions.wrap(LocalizedFormats.UPDATE_OR_DELETE_NOT_ALLOW); + } + } else { + // whereQueryCondition == null + if (!allowNoCondition) { + throw FlexExceptions.wrap(LocalizedFormats.UPDATE_OR_DELETE_NOT_ALLOW); + } + } + } + +} diff --git a/cash-common/cash-common-api-config/src/main/java/com/czg/config/MybatisFlexConfig.java b/cash-common/cash-common-api-config/src/main/java/com/czg/config/MybatisFlexConfig.java new file mode 100644 index 00000000..416c0ac7 --- /dev/null +++ b/cash-common/cash-common-api-config/src/main/java/com/czg/config/MybatisFlexConfig.java @@ -0,0 +1,20 @@ +package com.czg.config; + +import com.mybatisflex.core.dialect.DbType; +import com.mybatisflex.core.dialect.DialectFactory; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +/** + * 自定义sql方言 + */ +//@Component +public class MybatisFlexConfig { +// @Resource + private MyCommonsDialectImpl myCommonsDialect; +// @PostConstruct + public void init() { + DialectFactory.registerDialect(DbType.MYSQL, myCommonsDialect); + } +} diff --git a/cash-common/cash-common-tools/src/main/java/com/czg/utils/JoinQueryWrapper.java b/cash-common/cash-common-tools/src/main/java/com/czg/utils/JoinQueryWrapper.java index c12f94e5..e2341428 100644 --- a/cash-common/cash-common-tools/src/main/java/com/czg/utils/JoinQueryWrapper.java +++ b/cash-common/cash-common-tools/src/main/java/com/czg/utils/JoinQueryWrapper.java @@ -7,8 +7,6 @@ import com.mybatisflex.core.query.*; import com.mybatisflex.core.table.TableInfo; import com.mybatisflex.core.table.TableInfoFactory; import com.mybatisflex.core.util.LambdaGetter; -import com.mybatisflex.core.util.LambdaUtil; -import com.mybatisflex.core.util.MapUtil; import java.io.Serializable; import java.lang.invoke.SerializedLambda; @@ -108,8 +106,6 @@ public class JoinQueryWrapper extends QueryWrapper { return and(consumer, true); } - - @Override public QueryWrapper and(QueryCondition queryCondition) { return addWhereQueryCondition(queryCondition, SqlConnector.AND); From 02c0b5c86f5bd1f61f56d40911679b11bba94898 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Thu, 20 Feb 2025 18:15:59 +0800 Subject: [PATCH 3/5] =?UTF-8?q?mybatisFlex=E6=97=A5=E5=BF=97=E6=89=93?= =?UTF-8?q?=E5=8D=B0=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../czg/config/MyConfigurationCustomizer.java | 18 ------------ .../com/czg/config/MybatisFlexConfig.java | 28 +++++++++++++++---- 2 files changed, 22 insertions(+), 24 deletions(-) delete mode 100644 cash-common/cash-common-api-config/src/main/java/com/czg/config/MyConfigurationCustomizer.java diff --git a/cash-common/cash-common-api-config/src/main/java/com/czg/config/MyConfigurationCustomizer.java b/cash-common/cash-common-api-config/src/main/java/com/czg/config/MyConfigurationCustomizer.java deleted file mode 100644 index 327795a6..00000000 --- a/cash-common/cash-common-api-config/src/main/java/com/czg/config/MyConfigurationCustomizer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.czg.config; - -import com.mybatisflex.core.mybatis.FlexConfiguration; -import com.mybatisflex.spring.boot.ConfigurationCustomizer; -import org.apache.ibatis.logging.stdout.StdOutImpl; -import org.springframework.context.annotation.Configuration; - -/** - * @author Administrator - */ -@Configuration -public class MyConfigurationCustomizer implements ConfigurationCustomizer { - - @Override - public void customize(FlexConfiguration configuration) { - configuration.setLogImpl(StdOutImpl.class); - } -} diff --git a/cash-common/cash-common-api-config/src/main/java/com/czg/config/MybatisFlexConfig.java b/cash-common/cash-common-api-config/src/main/java/com/czg/config/MybatisFlexConfig.java index 416c0ac7..162fcc1e 100644 --- a/cash-common/cash-common-api-config/src/main/java/com/czg/config/MybatisFlexConfig.java +++ b/cash-common/cash-common-api-config/src/main/java/com/czg/config/MybatisFlexConfig.java @@ -1,19 +1,35 @@ package com.czg.config; +import com.mybatisflex.core.audit.AuditManager; import com.mybatisflex.core.dialect.DbType; import com.mybatisflex.core.dialect.DialectFactory; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Component; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Configuration; /** * 自定义sql方言 + * + * @author Administrator */ -//@Component +@Configuration +@Slf4j(topic = "mybatis-flex-sql") public class MybatisFlexConfig { -// @Resource + + public MybatisFlexConfig() { + //开启审计功能 + AuditManager.setAuditEnable(true); + + //设置 SQL 审计收集器 + AuditManager.setMessageCollector(auditMessage -> + log.info("{},{}ms", auditMessage.getFullSql() + , auditMessage.getElapsedTime()) + ); + } + + // @Resource private MyCommonsDialectImpl myCommonsDialect; -// @PostConstruct + + // @PostConstruct public void init() { DialectFactory.registerDialect(DbType.MYSQL, myCommonsDialect); } From 8fb0ebb5b32e4ab8a4be3d7961b903299a08aa28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Thu, 20 Feb 2025 18:20:17 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/mapper/ShopUserMapper.xml | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml b/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml index 59b40a59..87a2a0e3 100644 --- a/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml +++ b/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml @@ -23,7 +23,7 @@ From ae302dc68b46db369f4af40a1e8e0e23b23c9265 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Thu, 20 Feb 2025 18:22:25 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/ShopUserMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml b/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml index 87a2a0e3..a6d9a108 100644 --- a/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml +++ b/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml @@ -39,7 +39,7 @@