mybatisplus 增删改查&使用技巧

一、查询条件使用

//单个查询,如果返回多条会抛异常
User user = userService.getOne(Wrappers.<User>query().lambda().eq(User::getUserId, 9527));
//列表查询
List<User> user = userService.list(Wrappers.<User>query().lambda().eq(User::getUserId, 9527));
// 查询条件传入对象,对象中有值的条件都会带到where条件中
List<User> list = userService.list(Wrappers.query(user));

// .eq  ==   等于
// .ne <>    不等于
// .gt 大于
// .ge 大于等于>=
// .lt 小于
// .le 小于等于<=
// .in 包含
// .notIn   
// .orderByAsc 正序排序 
// .like() 模糊匹配    likeRight  、 likeLeft
// .between() 区间查询
// .orderByDesc 倒序排序
// .last()  自定义SQL  例如 .last(" limit 1")
// .or()  userWrapper.lambda.and(tmp ->tmp.eq(“pwd”, pwd).or().eq(“phone”, phone));
//  where A=? or(C=? and D=?)   
          studentService.lambdaQuery().eq(Student::getName, "1")
              .or(wp -> wp.eq(Student::getName, "1").eq(Student::getAge, 12))
              .list();   

userService.getOne(Wrappers.<User>query().lambda()
        .eq(User::getUserId, 9527)
        .last(" limit 1"))

//使用find_in_set判断参数是否在数组中
        wrapper.apply(!extractExpertAssignmentDTO.getExpertType().isEmpty(), "FIND_IN_SET ('" + extractExpertAssignmentDTO.getExpertType() + "',Expert_Type)");

1.1查询条件动态化 QueryWrapper 或者  LambdaQueryWrapper

        QueryWrapper<ProjectConfig> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("project_id", projectId);
        queryWrapper.eq("is_using", 1);
        if ("1".equals(type)) {
            queryWrapper.le("sc_product_distribution_relationship_start_time", new Date());
            queryWrapper.ge("sc_product_distribution_relationship_end_time", new Date());
        } else if ("4".equals(type)) {
            // 小于等于
            queryWrapper.le("contract_signing_start_time", new Date());
            queryWrapper.ge("contract_signing_end_time", new Date());
        }

        ProjectConfig con = this.getOne(queryWrapper);

        // 统计数量 使用 DISTINCT 
        QueryWrapper<Suppur> queryWrapper = new QueryWrapper<>();
        queryWrapper.select(" DISTINCT hospital_id");
        int num = suppurMapper.selectCount(queryWrapper);

        // LambdaQueryWrapper--可以使用lambda表达式------------begin
        LambdaQueryWrapper<BidprcuOrgInfoDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.like(BidprcuOrgInfoDO::getOrgName, "XXXXXX");
        BidprcuOrgInfoDO con = this.getOne(lambdaQueryWrapper);

二、新增(支持单个、批量)

//.save 保存单个
//.saveBatch  批量保存
userService.save(userEntity1);

三、修改(支持单个、批量)

1、修改对象,entity set了几个值就更新几个值,没有set值得将不更新

// 存在就修改,不存在就新增
userService.saveOrUpdate(userEntity1, Wrappers.<UserEntity>query().lambda()
        .eq(UserEntity::getUserId, 9527));

UserEntity entity = new UserEntity();
// 只会更新flag,其他字段不更新
entity.setFlag("0");
// wrappers传null ,全表更新
userService.update(entity, null);

2、修改单个字段

// 修改ID为1234567的数据,状态=2
service.update(Wrappers.<UserEntity>update().lambda()
        .eq(UserEntity::getId, 1234567)
        .set(UserEntity::getStatus, "2"))

3、修改 手写SQL

        LambdaUpdateWrapper<UserDO> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.setSql(" purc_sign_OLD=purc_sign  ");

四、删除

// 数据库删除
userService.remove(Wrappers.<userEntity>query().lambda().eq(userEntity::getUserId, 9527));

这边列举的是些常用的,并不全面自己可以通过

this.baseMapper.

 提示看接口所有的方法。

例:

使用技巧

1、新增修改时自动给字段赋值

@TableField(fill = FieldFill.INSERT) 新增数据的时候自动赋值,参考:FieldFill.INSERT与FieldFill.UPDATE使用_MIDSUMMER_yy的博客-CSDN博客_fieldfill

 2、表单未传值时,不更新数据表字段,可以添加以下注解,这样前台传递null 也会更新到数据库


    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private String stas;

3、表主键id生成的几种方式

// 注意 IdType几种枚举值对应生成ID的方式
@TableId(value = "id", type = IdType.ID_WORKER_STR)
private String id;

// 赋值逻辑 
ob.setId(IdWorker.getIdStr());
AUTO
自动递增代码中不需要赋值
NONE
数据库未设置主键类型(将会跟随全局)
INPUT
用户输入ID(该类型可以通过自己注册自动填充插件进行填充)
ID_WORKER
全局唯一ID (idWorker)
UUID
全局唯一ID(UUID)
ID_WORKER_STR

字符串全局唯一ID(idWorker 的字符串表示)

ob.setId(IdWorker.getIdStr());

4、@TableField(exist = false)表示不是数据库表字段 

5、@TableLogic 标记字段为删除标识

文章并不完善,边学边记,持续更新中....

扩展: mybatis-plus联合主键的使用_mybatisplus联合主键注解_凌晨两点钟同学的博客-CSDN博客

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值