mybatis-plus进阶操作

本文介绍如何使用ActiveRecord模式进行数据库操作,包括查询、新增、更新和删除等基本操作,并介绍了逻辑删除、自动填充、乐观锁及枚举类型的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开启ActiveRecord之旅

ActiveRecord简介

ActiveRecord操作步骤

实体类只需要继承Model即可;
User类继承Model类
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("user")
public class User extends Model<User> implements Serializable{

    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 姓名
     */
    @TableField("name")
    private String name;

    /**
     * 年龄
     */
    @TableField("age")
    private Integer age;

    /**
     * 邮箱
     */
    @TableField("email")
    private String email;

    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    @TableField(value = "creat_time", fill = FieldFill.INSERT)
    private Date creatTime;

    @TableField("deleted")
//    @TableLogic
    private Integer deleted;
}

通过AR即实体对象来操作方法

1.查询

(1)通过id进行查询

User user=new User();
user.setId(2l);
User user1 = user.selectById();
System.out.println(user1);

运行的SQL

(2)通过条件进行查询

User user=new User();
QueryWrapper<User> queryWrapper=new QueryWrapper<>();
queryWrapper.eq("age",23);
  List<User> userList = user.selectList(queryWrapper);
  for (User user1 : userList) {
      System.out.println(user1);
  }

运行SQL

2.新增数据
 User user=new User();
      user.setName("宋江");
      user.setAge(112);
      user.setEmail("13@qq.com");
        boolean result = user.insert();
        System.out.println(result);

运行的SQL

3.更新

通过id进行更新

User user=new User();
user.setId(16l);
user.setAge(56);
  boolean result = user.updateById();
  System.out.println(result);

运行的SQL

4.删除

通过id进行删除

User user=new User();
user.setId(5l);
  boolean result = user.deleteById();
  System.out.println(result);

运行SQL

逻辑删除

逻辑删除理解

实现步骤
1.在数据表中增加一个deleted字段
2.实体类中增加对应的属性和注解
@TableLogic //逻辑删除
private Integer deleted;
3.配置
//配置逻辑删除
mybatis-plus:
  global-config:
    db-config:
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
4.测试

(1.删除)

User user=new User();
 boolean result = user.deleteById(1l);
 System.out.println(result);

运行的SQL语句,走的是set而不是delete

(2.查询)

会自动过滤掉deleted=1的部分,即过滤掉逻辑删除的部分

User user=new User();
 User user1 = user.selectById(1l);
 System.out.println(user1);

运行的SQL语句

mybatis-plus插件

sql性能分析插件

配置在这里插入图片描述可以写测试语句进行测试,如果运行时间太长就会报错

自动填充(如创建时间和修改时间)

(1)类属性上增加填充注解
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;

@TableField(value = "creat_time", fill = FieldFill.INSERT)
private Date creatTime;
(2)设置填充处理器
@Slf4j  //日志
@Component  //添加到spring中
public class MyMetaObjectHandler implements MetaObjectHandler {
//    插入填充
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill...");
        setFieldValByName("creatTime",new Date(),metaObject);
        setFieldValByName("updateTime",new Date(),metaObject);

    }

//    更新填充
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill...");
        setFieldValByName("updateTime",new Date(),metaObject);
    }
}

乐观锁

(1)定义

(2)乐观锁实现机制

(3)实现步骤

(1)数据库增加version字段

(2)类增加相应的version字段和乐观锁注解

@Version  //乐观锁字段
private Integer version;

(3)注册乐观锁插件

@Bean      //注册乐观锁插件
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
        return new OptimisticLockerInterceptor();
}

(4)测试

①单线程测试乐观锁成功:

User user = userMapper.selectById(2l);
user.setName("勇勇");
user.setAge(22);
int result = userMapper.updateById(user);
System.out.println(result);

运行的SQL

②多线程测试乐观锁失败:

User user1 = userMapper.selectById(2l);
user1.setName("勇勇");
user1.setAge(22);

//插队更新
User user2 = userMapper.selectById(2l);
user2.setName("西西");
user2.setAge(21);
userMapper.updateById(user2);

int result = userMapper.updateById(user1);  //user1更新失败

MybatisX快速开发插件

简介

MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。

安装

安装方法:打开 IDEA,进入 File -> Settings -> Plugins -> Browse Repositories,输入 mybatisx 搜索并安装。

功能

1.java与XML来回跳转

2.Mapper方法自动生成XML

通用枚举

简介

比如男、女;小学、初中、高中这样的类别可以使用枚举

使用步骤

1.数据库增加枚举字段

如int类型sex

2.类中增加相应属性

@TableField("sex")
private SexEnum sex;

3.在enums中创建枚举类SexEnum继承IEnum

package com.yong.user.enums;

import com.baomidou.mybatisplus.annotation.IEnum;

public enum SexEnum implements IEnum<Integer> {

    MAN(1,"男"),
    WOMAN(0,"女");

    private int value;
    private String desc;

    SexEnum(int value, String desc) {
        this.value = value;
        this.desc = desc;
    }


    @Override
    public String toString() {
        return this.desc;
    }

    @Override
    public Integer getValue() {
        return this.value;
    }
}

4.配置含有枚举类的扫描包

mybatis-plus:
    type-enums-package: com.yong.user.enums

5.测试

(1)插入用户

User user=new User();
user.setAge(22);
user.setName("貂蝉");
user.setEmail("12@qq.com");
user.setSex(SexEnum.WOMAN);
  boolean result = user.insert();
  System.out.println(result);

运行SQL结果

(2)查询用户

①一般查询

User user=new User();
user.setId(23l);
  User user1 = user.selectById();
  System.out.println(user1);

运行结果

②在查询条件中也是有效的

User user=new User();
QueryWrapper<User> queryWrapper=new QueryWrapper<>();
queryWrapper.eq("sex",SexEnum.WOMAN);
  List<User> userList = user.selectList(queryWrapper);
  for (User user1 : userList) {
      System.out.println(user1);
  }

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值