当前位置: 首页 > wzjs >正文

西安为什么今天紧急通知搜索引擎优化举例说明

西安为什么今天紧急通知,搜索引擎优化举例说明,wordpress你没有权限设置,ip地址进入网站怎么做的提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 逻辑删除一、配置逻辑删除字段方式一:全局配置(推荐)方式二:实体类注解配置 二、逻辑删除流程三、完整代码示例1. 实…

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 逻辑删除
    • 一、配置逻辑删除字段
      • 方式一:全局配置(推荐)
      • 方式二:实体类注解配置
    • 二、逻辑删除流程
    • 三、完整代码示例
      • 1. 实体类定义
      • 2. Mapper 接口
      • 3. SQL语句
    • 四、高级配置
      • 1. 自定义逻辑删除字段
      • 2. 排除非逻辑删除字段
  • 枚举处理
    • 一、枚举处理场景
    • 二、核心实现方案
      • 方案 1:使用 `@EnumValue` 注解(推荐)
        • 步骤 1:定义枚举类
        • 步骤 2:实体类中使用枚举
        • 步骤 3:全局配置(可选)
      • 方案 2:实现 `IEnum` 接口
        • 定义枚举类
        • 实体类使用
    • 三、高级用法
      • 1. 自定义枚举处理器
        • 步骤 1:实现 `TypeHandler`
        • 步骤 2:局部注解配置
      • 2. 多字段枚举映射
        • 实体类设计
    • 四、完整示例测试
      • 1. 插入数据
      • 2. 查询数据
    • 五、最佳实践
    • 六、常见问题
      • 问题 1:枚举字段查询失效
      • 问题 2:数据库存枚举名称


逻辑删除

提示:这里可以添加本文要记录的大概内容:

逻辑删除是一种数据管理策略,通过标记字段(如 is_deleted)标识数据状态,而非物理删除数据。
优势

  • 数据可恢复性
  • 审计追踪能力
  • 避免误删风险

思路

  • 在表中添加一个字段标记数据是否被删除
  • 当删除数据时把标记置为 1
  • 查询时只查询标记为 0 的数据

一、配置逻辑删除字段

方式一:全局配置(推荐)

就是在application.yaml文件中配置逻辑删除的字段名称和值即可
application.yml 中配置全局逻辑删除规则:

mybatis-plus:global-config:db-config:logic-delete-field: isDeleted  # 逻辑删除字段名(实体类字段名)logic-delete-value: 1         # 删除标记值logic-not-delete-value: 0     # 未删除标记值

方式二:实体类注解配置

在实体类字段上使用 @TableLogic 注解:

@Data
public class User {@TableLogicprivate Integer isDeleted; // 逻辑删除字段(默认值:0未删除,1已删除)
}

优先级:注解配置 > 全局配置。


二、逻辑删除流程

  • 删除操作:自动将 DELETE 语句转换为 UPDATE,设置 is_deleted = 1
  • 查询操作:自动附加 WHERE is_deleted = 0 过滤条件

三、完整代码示例

1. 实体类定义

@Data
@TableName("tb_user")
public class User {@TableId(type = IdType.AUTO)private Long id;private String username;private Integer balance;@TableField("is_deleted") // 启用逻辑删除private Integer isDeleted; 
}

2. Mapper 接口

public interface UserMapper extends BaseMapper<User> {// 无需手动编写删除方法
}

3. SQL语句

//删除操作
UPDATE user SET is_deleted = 1 WHERE id = 1 AND is_deleted = 0;// 查询操作
SELECT * FROM user WHERE is_deleted = 0;

四、高级配置

1. 自定义逻辑删除字段

若数据库字段名或值不符合默认配置,可通过注解指定:

@TableLogic(value = "0", delval = "1") // 未删除=0,已删除=1
private Integer status; 

2. 排除非逻辑删除字段

若某实体不需要逻辑删除功能:

public class Order {@TableField(exist = false)private Integer isDeleted; // 忽略逻辑删除字段
}

枚举处理

一、枚举处理场景

将数据库字段与 Java 枚举类型自动映射,常见场景:

  • 状态标识:订单状态(0待支付、1已支付、2已取消)
  • 类型分类:用户类型(ADMIN 管理员、USER 普通用户)
  • 多语言处理:国际化状态码映射

二、核心实现方案

方案 1:使用 @EnumValue 注解(推荐)

实现原理
通过注解标记枚举中与数据库字段对应的属性,MyBatis-Plus 自动完成值转换。

步骤 1:定义枚举类
public enum UserStatus {NORMAL(1, "正常"),FROZEN(2, "冻结");@EnumValue  // 标记数据库存储的值private final int code;private final String desc;UserStatus(int code, String desc) {this.code = code;this.desc = desc;}
}
步骤 2:实体类中使用枚举
@Data
@TableName("tb_user")
public class User {@TableId(type = IdType.AUTO)private Long id;private String username;private UserStatus status; // 直接使用枚举类型
}
步骤 3:全局配置(可选)

application.yml 中指定枚举处理策略:

mybatis-plus:configuration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler

方案 2:实现 IEnum 接口

适用场景:需要更灵活的控制或兼容旧代码。

定义枚举类
public enum UserType implements IEnum<Integer> {ADMIN(1),USER(2);private final int code;UserType(int code) {this.code = code;}@Overridepublic Integer getValue() { // 定义数据库存储的值return this.code;}
}
实体类使用
public class User {private UserType userType; // 自动映射
}

三、高级用法

1. 自定义枚举处理器

场景:需要将枚举转换为 JSON 字符串存储。

步骤 1:实现 TypeHandler
@MappedTypes(UserStatus.class)
public class JsonEnumTypeHandler extends BaseTypeHandler<UserStatus> {private final ObjectMapper objectMapper = new ObjectMapper();@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, UserStatus parameter, JdbcType jdbcType) {ps.setString(i, objectMapper.writeValueAsString(parameter));}// 其他方法实现类似...
}
步骤 2:局部注解配置
public class User {@TableField(typeHandler = JsonEnumTypeHandler.class)private UserStatus status;
}

2. 多字段枚举映射

场景:需要同时存储枚举编码和描述。

实体类设计
public class Order {private Integer statusCode;  // 存储枚举 codeprivate String statusName; // 业务方法获取枚举public OrderStatus getStatus() {return OrderStatus.of(this.statusCode);}
}

四、完整示例测试

1. 插入数据

@Test
void testInsert() {User user = new User();user.setUsername("test");user.setStatus(UserStatus.FROZEN); // 设置枚举值userMapper.insert(user);
}

生成 SQL

INSERT INTO tb_user (username, status) VALUES ('test', 2)

2. 查询数据

@Test
void testSelect() {User user = userMapper.selectById(1L);System.out.println(user.getStatus()); // 输出: FROZEN
}

生成 SQL

SELECT id,username,status FROM tb_user WHERE id=1

五、最佳实践

方案适用场景优点
@EnumValue 注解新项目开发配置简洁,代码直观
IEnum 接口实现需要兼容旧枚举定义无侵入性改造
自定义 TypeHandler复杂存储格式(如JSON)高度灵活,可定制化

统一规范建议

  1. 所有业务枚举统一使用 @EnumValue 注解
  2. 数据库字段名与枚举类名保持语义一致(如 order_status 对应 OrderStatus
  3. 禁止直接使用 ordinal() 作为存储值(易导致值混乱)

六、常见问题

问题 1:枚举字段查询失效

现象:使用 QueryWrapper 查询时无法识别枚举值
解决方案

wrapper.eq(User::getStatus, UserStatus.NORMAL); // 直接传入枚举对象

问题 2:数据库存枚举名称

需求:存储 NORMAL 而非数字编码
配置

public enum UserStatus {@EnumValueNORMAL, FROZEN // 默认存储 name()
}

通过合理运用 MyBatis-Plus 的枚举处理机制,可以实现数据库字段与 Java 枚举类型的优雅映射,提升代码可读性和健壮性。

http://www.dtcms.com/wzjs/255377.html

相关文章:

  • 手机如何复制网站模板关键词seo排名公司
  • 备案 网站 漏接 电话互联网营销策略有哪些
  • 做批发网站有哪些优化网站的软件下载
  • 华亚快印网站开发天津seo选天津旗舰科技a
  • 重庆建设行政主管部门网站整合营销传播
  • 如何评价一个企业的网站建设深圳网站优化软件
  • 郑州做网站推广电话网络推广网络营销外包
  • wordpress 整站打包营销模式有哪些
  • 桥西做网站seo怎么刷关键词排名
  • 美国一级a做爰片免费网站北京seo排名优化网站
  • 营销型网站建设 案例shodan搜索引擎
  • 手机网站模板cms合肥关键词排名推广
  • 效果好网站建设哪家便宜优秀的软文广告案例
  • 广东智能网站建设质量保障市场调研
  • 卡盟怎么做网站seo网站优化课程
  • wordpress 5.0火车头发布模块合肥搜索引擎优化
  • 网站建设工作具体内容网络推广员是干什么的
  • 银川市住房城乡建设局网站如何检测网站是否安全
  • 威海哪里做网站如何查询百度收录
  • 丹江口市建设局网站企业网站类型有哪些
  • 越秀区建网站公司河南省网站
  • 网盘搜索引擎入口广州seo网站多少钱
  • 虚拟主机怎么做网站江门网站优化公司
  • 织梦网站怎样做锚文本长沙企业网站设计
  • 网站字体设计规范微信5000人接推广费用
  • 独立网站做外贸上海网站快速排名优化
  • 自己在线制作logo免费版零基础学seo要多久
  • 开放大学门户网站建设百度推广方法
  • 用php做商城网站的设计论文windows优化大师靠谱吗
  • 上海html5网站制作公司新华传媒b2b商务平台