diff --git a/tamguo-crawler/src/main/java/com/tamguo/config/dao/MyMetaObjectHandler.java b/tamguo-crawler/src/main/java/com/tamguo/config/dao/MyMetaObjectHandler.java index dad62b1..928b811 100644 --- a/tamguo-crawler/src/main/java/com/tamguo/config/dao/MyMetaObjectHandler.java +++ b/tamguo-crawler/src/main/java/com/tamguo/config/dao/MyMetaObjectHandler.java @@ -1,26 +1,43 @@ package com.tamguo.config.dao; import com.baomidou.mybatisplus.mapper.MetaObjectHandler; - import org.apache.ibatis.reflection.MetaObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * 注入公共字段自动填充,任选注入方式即可 + * 该类用于注入公共字段自动填充功能,继承自MyBatis-Plus提供的MetaObjectHandler类。 + * 可以通过继承并重写相关方法来实现自定义的字段自动填充逻辑,在代码中任选注入方式即可将其集成到MyBatis-Plus的操作流程中。 + * (注:目前类上的@Component注解被注释掉了,意味着该类暂时可能未被作为Spring组件进行管理,后续若需要可取消注释启用相关功能) */ //@Component public class MyMetaObjectHandler extends MetaObjectHandler { + // 创建一个Logger实例,用于记录日志,这里记录的日志类别是基于当前类MyMetaObjectHandler的,方便在日志中定位相关操作记录 protected final static Logger logger = LoggerFactory.getLogger(MyMetaObjectHandler.class); + /** + * 重写父类的insertFill方法,该方法会在执行数据插入操作时被触发。 + * 通过日志记录了“新增的时候干点不可描述的事情”,实际应用中可在此方法内编写具体的逻辑, + * 例如自动填充创建时间、创建人等公共字段到插入的数据对象中,填充的数据会基于MetaObject所关联的具体数据库实体对象。 + * + * @param metaObject 表示要进行插入操作的数据对应的MetaObject,通过它可以获取和设置对象的属性值等, + * 这个MetaObject通常与MyBatis操作的数据库实体对象相关联,方便进行字段填充等操作。 + */ @Override public void insertFill(MetaObject metaObject) { logger.info("新增的时候干点不可描述的事情"); } + /** + * 重写父类的updateFill方法,该方法会在执行数据更新操作时被触发。 + * 同样通过日志记录了“更新的时候干点不可描述的事情”,实际业务中可在此方法里编写更新时自动填充公共字段的逻辑, + * 比如更新时间等字段的自动赋值,也是基于MetaObject对应的数据库实体对象来操作相关属性值。 + * + * @param metaObject 表示要进行更新操作的数据对应的MetaObject,作用同insertFill方法中的参数,用于操作相关对象的属性。 + */ @Override public void updateFill(MetaObject metaObject) { logger.info("更新的时候干点不可描述的事情"); } -} +} \ No newline at end of file diff --git a/tamguo-crawler/src/main/java/com/tamguo/config/dao/MybatisPlusConfig.java b/tamguo-crawler/src/main/java/com/tamguo/config/dao/MybatisPlusConfig.java index 9e18232..559fd03 100644 --- a/tamguo-crawler/src/main/java/com/tamguo/config/dao/MybatisPlusConfig.java +++ b/tamguo-crawler/src/main/java/com/tamguo/config/dao/MybatisPlusConfig.java @@ -16,10 +16,14 @@ import org.springframework.context.annotation.Configuration; import java.util.ArrayList; import java.util.List; +// 标识这是一个配置类,Spring会自动扫描并处理这个类中的Bean定义等配置信息 @Configuration +// 配置MyBatis-Plus的Mapper扫描路径,会扫描com.tamguo.dao及其子包下的所有Mapper接口 @MapperScan("com.tamguo.dao*") public class MybatisPlusConfig { + // 定义一个名为performanceInterceptor的Bean方法,用于创建并返回PerformanceInterceptor实例 + // PerformanceInterceptor通常用于拦截SQL执行,记录SQL执行性能相关的信息,比如执行时长等 @Bean public PerformanceInterceptor performanceInterceptor() { return new PerformanceInterceptor(); @@ -28,28 +32,35 @@ 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的支持,以便能更好地与PageHelper等分页相关的工具兼容使用 + paginationInterceptor.setLocalPage(true); + /* * 【测试多租户】 SQL 解析处理拦截器
* 这里固定写成住户 1 实际情况你可以从cookie读取,因此数据看不到 【 麻花藤 】 这条记录( 注意观察 SQL )
+ * 以下代码是配置多租户相关的SQL解析拦截逻辑,通过设置租户相关的处理器和解析器来处理涉及多租户的SQL语句。 */ List sqlParserList = new ArrayList(); TenantSqlParser tenantSqlParser = new TenantSqlParser(); tenantSqlParser.setTenantHandler(new TenantHandler() { + // 获取租户ID对应的表达式,这里返回null,实际应用中通常需要按照业务规则返回正确的租户ID表达式 @Override public Expression getTenantId() { return null; } + // 指定租户ID对应的数据库表列名,此处设置为"company_id",意味着在多租户场景下通过这个列来区分不同租户的数据 @Override public String getTenantIdColumn() { return "company_id"; } + // 判断是否对指定的表名进行过滤,返回true表示进行过滤,具体的过滤逻辑可以根据业务需求在这个方法内进一步完善 @Override public boolean doTableFilter(String tableName) { // 这里可以判断是否过滤表 @@ -57,9 +68,9 @@ public class MybatisPlusConfig { } }); - sqlParserList.add(tenantSqlParser); paginationInterceptor.setSqlParserList(sqlParserList); + // 以下过滤方式与 @SqlParser(filter = true) 注解等效 // paginationInterceptor.setSqlParserFilter(new ISqlParserFilter() { // @Override @@ -72,19 +83,23 @@ public class MybatisPlusConfig { // return false; // } // }); + return paginationInterceptor; } + // 定义一个名为metaObjectHandler的Bean方法,用于创建并返回自定义的MetaObjectHandler实例(此处是MyMetaObjectHandler) + // MetaObjectHandler通常用于在插入或更新操作时自动填充一些公共字段,比如创建时间、更新时间等 @Bean - public MetaObjectHandler metaObjectHandler(){ + public MetaObjectHandler metaObjectHandler() { return new MyMetaObjectHandler(); } /** * 注入sql注入器 + * 以下代码原本是用于注入LogicSqlInjector,它可能用于实现一些逻辑删除等相关的功能,但目前被注释掉了,可能暂时不需要这个功能或者后续再启用。 */ /*@Bean public ISqlInjector sqlInjector(){ return new LogicSqlInjector(); }*/ -} +} \ No newline at end of file diff --git a/tamguo-crawler/src/main/java/com/tamguo/config/dao/SuperEntity.java b/tamguo-crawler/src/main/java/com/tamguo/config/dao/SuperEntity.java index de1ba02..9c75133 100644 --- a/tamguo-crawler/src/main/java/com/tamguo/config/dao/SuperEntity.java +++ b/tamguo-crawler/src/main/java/com/tamguo/config/dao/SuperEntity.java @@ -6,25 +6,40 @@ import com.baomidou.mybatisplus.annotations.TableId; /** * 实体父类 + * 该类作为实体类的基类,用于提供一些通用的属性和方法,方便其他具体的实体类继承, + * 从而实现代码的复用以及统一的结构规范,比如统一的主键处理等相关逻辑。 */ public class SuperEntity> extends Model { + // 用于定义类的序列化版本号,在进行对象序列化和反序列化时起到版本控制的作用,保证兼容性。 + // 这里初始化为1L,一般如果类的结构等没有发生不兼容的变更,这个值可以保持不变。 private static final long serialVersionUID = 1L; - @TableId("id") - private String id; - - @Override - protected Serializable pkVal() { - return this.getId(); - } + // 使用MyBatis-Plus提供的注解 @TableId 标记该属性为数据库表的主键字段, + // 这里指定对应的数据库表中的列名为 "id",意味着在与数据库交互时,通过该字段来标识唯一的记录。 + @TableId("id") + private String id; + + /** + * 重写父类Model中的pkVal方法,该方法用于获取实体对象的主键值。 + * 在本类中,返回当前对象的id属性作为主键值,这样在MyBatis-Plus进行一些基于主键的操作(如查询、更新、删除等)时, + * 能正确获取到对应的主键信息进行数据库交互。 + * + * @return 返回表示主键值的Serializable对象,在这里实际返回的是String类型的id属性值, + * 因为String实现了Serializable接口,符合方法的返回要求。 + */ + @Override + protected Serializable pkVal() { + return this.getId(); + } + // 获取id属性值的方法,外部类可以通过调用该方法获取实体对象对应的主键值。 public String getId() { return id; } + // 设置id属性值的方法,外部类可以通过调用该方法为实体对象设置主键值,用于创建或更新实体对象时指定主键信息。 public void setId(String id) { this.id = id; } - -} +} \ No newline at end of file diff --git a/tamguo-crawler/src/main/java/com/tamguo/config/dao/SuperMapper.java b/tamguo-crawler/src/main/java/com/tamguo/config/dao/SuperMapper.java index 6b8b4cf..8cec75c 100644 --- a/tamguo-crawler/src/main/java/com/tamguo/config/dao/SuperMapper.java +++ b/tamguo-crawler/src/main/java/com/tamguo/config/dao/SuperMapper.java @@ -3,9 +3,16 @@ package com.tamguo.config.dao; import com.baomidou.mybatisplus.mapper.BaseMapper; /** - * 演示 mapper 父类,注意这个类不要让 mp 扫描到!! + * 演示 mapper 父类 + * 该接口作为其他具体的Mapper接口的父接口,用于定义一些公共的方法或者规范,方便复用代码和统一接口结构。 + * 注意这个类不要让 mp(MyBatis-Plus)扫描到!! + * 这可能是因为它只是作为一个抽象的父接口存在,本身不对应具体的数据库表操作,若被扫描到可能会引发一些不必要的问题, + * 比如不符合预期的实例化或者错误的数据库映射等情况,具体取决于项目的配置和MyBatis-Plus的扫描机制。 */ public interface SuperMapper extends BaseMapper { // 这里可以放一些公共的方法 -} + // 例如一些所有实体对应的Mapper都可能会用到的通用查询、通用更新逻辑等相关方法, + // 具体的方法定义需要根据实际业务需求来添加,然后由具体继承该接口的子类去实现这些方法, + // 从而实现代码复用以及保证操作的一致性和规范性。 +} \ No newline at end of file