From 0d2940f9d90e896cac20e38da09dc3fa2d36fb0a Mon Sep 17 00:00:00 2001 From: SmileToCandy Date: Fri, 17 Mar 2023 10:36:16 +0000 Subject: [PATCH] =?UTF-8?q?readme=20=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: SmileToCandy --- README.md | 3 +- .../tamguo/config/dao/MybatisPlusConfig.java | 34 ++++++++++++++----- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index c2178b0..bdadb08 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,8 @@ - 管理员账号:system 密码:123456 **因为线上数据和测试数据没有做到隔离,作者已经把密码修改,可用.sql在本地运行看后台效果。** -加QQ群:937899574 可免费获取SQL基本 +现在作者组建一个团队来对这个项目进行迭代升级,需要前端、后端、设计人员 +有兴趣加入的小伙伴,可以加作者微信: tamgoooo diff --git a/tamguo-oms/src/main/java/com/tamguo/config/dao/MybatisPlusConfig.java b/tamguo-oms/src/main/java/com/tamguo/config/dao/MybatisPlusConfig.java index 47d0386..aba580c 100644 --- a/tamguo-oms/src/main/java/com/tamguo/config/dao/MybatisPlusConfig.java +++ b/tamguo-oms/src/main/java/com/tamguo/config/dao/MybatisPlusConfig.java @@ -19,10 +19,13 @@ import com.baomidou.mybatisplus.plugins.parser.tenant.TenantSqlParser; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.LongValue; +// 表示这是一个配置类,Spring会扫描这个类并将其中带有@Bean注解的方法返回的对象注册为Bean @Configuration +// 配置MyBatis Mapper接口的扫描路径,会扫描指定包及其子包下的所有Mapper接口,方便Spring与MyBatis整合时能找到对应的Mapper @MapperScan("com.tamguo.modules.*.dao*") public class MybatisPlusConfig { + // 创建并返回一个PerformanceInterceptor实例,用于拦截MyBatis执行的SQL语句,可用于性能监控,例如记录SQL执行时间等 @Bean public PerformanceInterceptor performanceInterceptor() { return new PerformanceInterceptor(); @@ -31,63 +34,78 @@ public class MybatisPlusConfig { /** * mybatis-plus分页插件
* 文档:http://mp.baomidou.com
+ * 此方法创建并配置一个PaginationInterceptor实例,用于实现MyBatis Plus的分页功能,同时还进行了与多租户相关的一些配置。 */ @Bean public PaginationInterceptor paginationInterceptor() { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); - paginationInterceptor.setLocalPage(true);// 开启 PageHelper 的支持 + // 设置开启PageHelper的支持,以便更好地兼容一些分页相关的操作习惯等情况 + paginationInterceptor.setLocalPage(true); + /* * 【测试多租户】 SQL 解析处理拦截器
- * 这里固定写成住户 1 实际情况你可以从cookie读取,因此数据看不到 【 麻花藤 】 这条记录( 注意观察 SQL )
+ * 这里固定写成住户1实际情况你可以从cookie读取,因此数据看不到 【 麻花藤 】 这条记录( 注意观察 SQL )
+ * 以下代码是配置多租户相关的SQL解析拦截逻辑,用于在执行SQL时根据租户规则对SQL语句进行处理。 */ List sqlParserList = new ArrayList<>(); TenantSqlParser tenantSqlParser = new TenantSqlParser(); + + // 设置租户处理器,用于定义获取租户ID、租户ID对应的列名以及判断是否过滤表等逻辑 tenantSqlParser.setTenantHandler(new TenantHandler() { + // 返回租户ID对应的表达式,这里固定返回值为1L,表示租户ID为1 @Override public Expression getTenantId() { return new LongValue(1L); } + // 返回租户ID在数据库表中对应的列名,此处为"course_id" @Override public String getTenantIdColumn() { return "course_id"; } + // 判断是否对指定表进行过滤,这里返回true表示需要进行过滤操作,具体过滤逻辑可根据实际情况调整 @Override public boolean doTableFilter(String tableName) { - // 这里可以判断是否过滤表 return true; } }); - + // 将配置好的租户SQL解析器添加到SQL解析器列表中 sqlParserList.add(tenantSqlParser); + + // 将包含租户相关配置的SQL解析器列表设置到分页拦截器中,使得分页拦截器在处理SQL时能应用多租户逻辑 paginationInterceptor.setSqlParserList(sqlParserList); + // 以下过滤方式与 @SqlParser(filter = true) 注解等效 + // 配置SQL解析过滤器,用于根据具体的MappedStatement的ID来决定是否对SQL进行过滤,这里是针对特定的自定义查询进行过滤 // paginationInterceptor.setSqlParserFilter(new ISqlParserFilter() { // @Override // public boolean doFilter(MetaObject metaObject) { // MappedStatement ms = PluginUtils.getMappedStatement(metaObject); -// // 过滤自定义查询此时无租户信息约束【 麻花藤 】出现 +// // 过滤自定义查询此时无租户信息约束【 麻花藤 】出现,即如果是指定的这个查询方法,则返回true表示过滤该查询,不应用租户相关逻辑 // if ("com.baomidou.springboot.mapper.UserMapper.selectListBySQL".equals(ms.getId())) { // return true; // } // return false; // } // }); + return paginationInterceptor; } + // 创建并返回一个MetaObjectHandler实例,用于在执行MyBatis相关操作时,自动填充一些公共字段等元数据处理逻辑,具体填充逻辑在返回的MyMetaObjectHandler类中实现 @Bean - public MetaObjectHandler metaObjectHandler(){ + public MetaObjectHandler metaObjectHandler() { return new MyMetaObjectHandler(); } /** * 注入sql注入器 + * 此方法创建并返回一个ISqlInjector实例,这里使用的是LogicSqlInjector,用于实现一些逻辑删除等特定的SQL注入功能(MyBatis Plus特性相关)。 */ @Bean - public ISqlInjector sqlInjector(){ + public ISqlInjector sqlInjector() { return new LogicSqlInjector(); } -} +} \ No newline at end of file