使用Mybatis-plus最佳实践

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Mybatis-plus最佳实践相关的知识,希望对你有一定的参考价值。

参考技术A mybatis-plus是对mybatis的增强,不是替代。从某种程度上来说,可以完全替代dao和mapper

使用LambdaQueryWrapper可以避免实体和数据对应关系写错,推荐使用。

#yyds干货盘点#mybatis-plus学习与实践逻辑删除

在我们日常开发中,为了保留数据,经常会使用逻辑删除的方式进行数据删除,而mybatis-plus正好也提供了这一功能,在第一节中生成代码的时候,我们指定了逻辑删除字段的值,代码如下:

   StrategyConfig sc = new StrategyConfig();
        sc.setCapitalMode(false); //是否大写命名 默认false
        sc.setSkipView(true); //是否跳过试图 默认false
        sc.setNaming(NamingStrategy.underline_to_camel);// 表映射 驼峰命名
        sc.setColumnNaming(NamingStrategy.underline_to_camel); // 字段映射 驼峰
        sc.setEntityLombokModel(true); //默认false
        sc.setRestControllerStyle(true); // 默认false
        sc.setEntitySerialVersionUID(true); //默认true
        sc.setEntityColumnConstant(true); //默认false
        sc.setInclude("student"); //表名,用,隔开  需要生产
   //     sc.setExclude(""); //                 不需要生成  二选一
        sc.setEntityTableFieldAnnotationEnable(true); // 默认false 注释
        sc.setControllerMappingHyphenStyle(false); //默认false
        sc.setLogicDeleteFieldName("status"); // 逻辑删除字段名称
        generator.setStrategy(sc);

我们将status指定为逻辑删除字段,接下来我们看看生成的实体类,发现生成实体的时候在status上多了一个注解@TableLogic,这个注解就是把这个字段标识为逻辑删除。

    @Data
    @EqualsAndHashCode(callSuper = false)
    @Accessors(chain = true)
    @TableName("student")
    @ApiModel(value="Student对象", description="")
    public class Student implements Serializable 

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.ID_WORKER_STR)
    private String id;

    @TableField("age")
    private Integer age;

    @TableField("name")
    private String name;

    @TableField("tel")
    private String tel;

    @TableField("father_name")
    private String fatherName;

    @ApiModelProperty(value = "1:正常;-1:删除")
    @TableField("status")
    @TableLogic
    private Integer status;

然后再看看properties.yml文件

mybatis-plus:
  global-config:
    db-config:
      logic-delete-value: -1 #逻辑已删除值(默认为1)
      logic-not-delete-value: 1 #逻辑未删除值(默认为0)

status=-1为删除,status=1为正常。接下来测试下效果

   @Test
   public void studentDelete()

       int i = studentMapper.deleteById("1");
       System.out.println(i+"------------------/n");
   

   @Test
   public void studentDeletes()

       boolean b = studentService.removeById("1");
       System.out.println(b);
   

测试后发现,在service和mapper中的删除方法都可以删除。

注:1、本文所用到的mybatis-plus版本是3.1.1。
2、在测试过程中发现自定义的逻辑删除值并没有生效,经过在官网上查找了一番,才发现是配置文件中的key值写错了。所以,能复制的尽量别用手敲了。

以上是关于使用Mybatis-plus最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

DAO(数据访问对象)最佳实践 - 我看到的示例同时使用 DAO 和服务对象,这里的最佳实践是啥?

21条最佳实践,全面保障 GitHub 使用安全

平均堆栈身份验证 - 最佳实践

项目版本管理的最佳实践:云效飞流Flow篇

Java 数据绑定最佳实践

Ansible — 示例与最佳实践