baomidou mybatisplus日常操作语法

下面 baomidou mybatisplus 简称 mybatisplus

比如查询的语法非常简单,如下:

QueryWrapper<User> qw = new QueryWrapper<>();
qw.eq("sex", 1);
int count = userMapper.selectCount(qw);

声明一个QueryWrapper对象,然后设置查询参数,eq()即等于,key是列名,value是值。接着调用mybatisplus封装的增删改查接口,就能执行我们想要的SQL操作。

如上面这段代码,自动拼装后的SQL语句如下:

SELECT COUNT( 1 ) FROM user WHERE deleted=0 AND (sex = ?) 

Tips: mybatisplus逻辑删除
细心的小朋友注意到SQL语句里多了“deleted=0”,这是修改baomidou mybatisplus的配置后,mybatisplus在拼接SQL语句时自动添加的逻辑删除。

YAML配置如下:

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted  # 全局逻辑删除的列名(since 3.3.0)
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

实体类配置如下:

/**
 * 是否删除: 0 未删除, 1已删除
 */
@TableLogic
private Integer deleted;

掉坑场景

查询user表sex=1的行数,接着查询user表sex=2的行数。

QueryWrapper<User> qw = new QueryWrapper<>();
qw.eq("sex", 1);
int count = userMapper.selectCount(qw);

qw.eq("sex", 2);
count = userMapper.selectCount(qw);

mybatisplus这种设参操作是不是很方便,类似日常Map集合的操作。如果你也这么认为,那就离掉坑里不远了。

以上代码拼装后执行的的SQL语句如下:

==>  Preparing: SELECT COUNT( 1 ) FROM user WHERE deleted=0 AND (sex = ?) 
==> Parameters: 1(Integer)



==>  Preparing: SELECT COUNT( 1 ) FROM user WHERE deleted=0 AND (sex = ? AND sex = ?) 
==> Parameters: 1(Integer), 2(Integer)

坑来了,第二条SQL语句是“WHERE deleted=0 AND (sex = 1 AND sex = 2) ”,怎么会是这样呢?


Map集合设值时,如果key相同默认会覆盖value呀!

Map<String, Object> param = new HashMap<>();
param.put("sex", 1);
log.info("{}", param);   //打印{sex=1}
param.put("sex", 2);
log.info("{}", param);   //打印{sex=2}

但QueryWrapper不是Map呀,只是操作语法像Map,哈哈!


解决办法

方法一:

QueryWrapper<Worker> qw = new QueryWrapper<>();
qw.eq("sex", 1);
int count = workerMapper.selectCount(qw);

qw.clear();
qw.eq("sex", 2);
count = workerMapper.selectCount(qw);

使用同一个QueryWrapper对象,使用完后通过qw.clear()清空参数,再重新设值使用。


方法二:

QueryWrapper<Worker> qw = new QueryWrapper<>();
qw.eq("sex", 1);
int count = workerMapper.selectCount(qw);

qw = new QueryWrapper<>();
qw.eq("sex", 2);
count = workerMapper.selectCount(qw);

声明两个QueryWrapper对象去封装参数。


Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐