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

d42:MyBatisPlus逻辑删除,枚举处理器,JSON处理器,分页插件

MyBatisPlus 学习笔记

MyBatisPlus逻辑删除,枚举处理器,JSON处理器,分页插件

1. 逻辑删除

在实际开发中,我们有时不希望真正删除数据,而是将它们隐藏起来。逻辑删除可以帮助我们实现这一需求。通过配置逻辑删除字段,查询时会自动带上逻辑删除字段的条件。

配置逻辑删除

application.yml文件中添加以下配置:

global-config:db-config:id-type: auto # 全局主键策略update-strategy: not_null # 默认更新策略logic-delete-field: deleted  # 逻辑删除字段logic-delete-value: 1 # 逻辑删除字段值logic-not-delete-value: 0 # 逻辑未删除字段值

使用逻辑删除

在实体类中添加逻辑删除字段,并在MyBatisPlus的配置中启用逻辑删除功能。这样,每次查询时都会自动过滤掉被逻辑删除的记录。

2. 枚举处理器

枚举处理器可以帮助我们将枚举类型与数据库中的数值字段进行映射。通过配置全局处理器,我们可以方便地使用枚举类型。

配置全局处理器

在MyBatis配置文件中添加以下配置:

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

使用枚举处理器

在枚举类对应的数值字段上添加@EnumValue注解:

@Getter
public enum UserStatus {NORMAL(1, "正常"),FREEZE(2, "冻结");@EnumValueprivate final int value;private final String desc;UserStatus(int value, String desc) {this.value = value;this.desc = desc;}
}

3. JSON处理器

处理数据库中的JSON字段可能会比较复杂。MyBatisPlus提供了JacksonTypeHandler来方便地处理JSON字段。

定义JSON字段对应的类

@Data
@AllArgsConstructor(staticName = "of")
@NoArgsConstructor
public class UserInfo {private Integer age;private String intro;private String gender;
}

在实体类中使用JSON处理器

在实体类中使用@TableField注解指定字段类型,并使用JacksonTypeHandler

@TableName(value = "user", autoResultMap = true)
@Data
public class User {@TableField(typeHandler = JacksonTypeHandler.class)private UserInfo info;
}

在Mapper中使用JSON处理器

如果在mapper.xml中定义了SQL逻辑,需要指定处理器:

<insert id="saveUser" parameterType="com.itheima.mp.domain.po.User">INSERT INTO `user` (`id`, `username`, `password`, `phone`, `info`, `balance`)VALUES(#{id}, #{username}, #{password}, #{phone}, #{info,typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler}, #{balance});
</insert>

4. 分页插件

MyBatisPlus的分页插件可以方便地实现分页查询功能。在配置类中添加分页插件即可。

配置分页插件

@Configuration
public class MyBatisConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);paginationInnerInterceptor.setMaxLimit(1000L);interceptor.addInnerInterceptor(paginationInnerInterceptor);return interceptor;}
}

编写通用的分页查询类

@Data
public class PageQuery {private Integer pageNo;private Integer pageSize;private String sortBy;private Boolean isAsc;public <T> Page<T> toMpPage(OrderItem... orders) {Page<T> p = Page.of(pageNo, pageSize);if (sortBy != null) {p.addOrder(new OrderItem(sortBy, isAsc));return p;}if (orders != null) {p.addOrder(orders);}return p;}public <T> Page<T> toMpPage(String defaultSortBy, boolean isAsc) {return this.toMpPage(new OrderItem(defaultSortBy, isAsc));}public <T> Page<T> toMpPageDefaultSortByCreateTimeDesc() {return toMpPage("create_time", false);}public <T> Page<T> toMpPageDefaultSortByUpdateTimeDesc() {return toMpPage("update_time", false);}
}

编写分页DTO

@Data
public class PageDTO<T> {private Long total;private Long pages;private List<T> list;public static <PO, VO> PageDTO<VO> of(Page<PO> page, Class<VO> voClass) {PageDTO<VO> pageDTO = new PageDTO<>();pageDTO.setTotal(page.getTotal());pageDTO.setPages(page.getPages());List<PO> records = page.getRecords();if (records == null) {pageDTO.setList(Collections.emptyList());return pageDTO;}pageDTO.setList(BeanUtil.copyToList(records, voClass));return pageDTO;}public static <PO, VO> PageDTO<VO> of(Page<PO> page, Function<PO, VO> convertor) {PageDTO<VO> pageDTO = new PageDTO<>();pageDTO.setTotal(page.getTotal());pageDTO.setPages(page.getPages());List<PO> records = page.getRecords();if (records == null) {pageDTO.setList(Collections.emptyList());return pageDTO;}pageDTO.setList(records.stream().map(convertor).collect(Collectors.toList()));return pageDTO;}
}
http://www.dtcms.com/a/491933.html

相关文章:

  • 安徽和县住房城乡建设局网站佛山电商网站制作团队
  • 网站备案 失败批量建wordpress
  • asp做的药店网站模板成都响应式网站建设
  • Python异步IO——协程
  • QML学习笔记(四十)QML的ApplicationWindow和StackView
  • Linux学习笔记--Pinctrl子系统示例
  • 安徽网站建设seo优化如何用asp做网站的登录界面
  • wordpress网站页脚网站进行中英文转换怎么做
  • RFSOC27DR+VU13P 6U VPX板卡
  • 多门店同城配送上新!Tigshop 开源商城系统JAVA5.4.0版本正式发布!
  • 域名访问过程会不会影响网站访问国外 设计师 网站
  • 温州外贸网站设计wordpress简介怎么改
  • css`text-wrap:pretty`
  • RHCA作业
  • 网站建设申请前端网站效果有哪些
  • 小林coding|计算机网络
  • 2025年--Lc193-139. 单词拆分(动态规划在字符串的应用)--Java版
  • 做网站公重庆永川网站建设
  • 高端网站建设公司名字北京页面设计制作
  • 获取hive/impala表下表所有分区
  • C语言中static const extern volatile inline关键字
  • SQL入门:CET-简化复杂查询的利器
  • 零基础网站建设教学培训wordpress弹窗通知插件
  • 北京网络科技有限公司官网吴忠seo
  • 静态代理和动态代理
  • 深度学习论文: Pixel-Perfect Depth with Semantics-Prompted Diffusion Transformers
  • uni-app学习笔记(二)
  • 中国网站设计师广州最专业的网站建设
  • 怎么查看网站的ftp地址wordpress 文章引用
  • 基于JETSON+FPGA+GMSL相机 vs 传统工业相机:高动态范围与低延迟如何重塑机器感知视觉?