Mybatis Plus初级使用之通用CRUD

简介: Mybatis Plus(简称MP)是Mybatis的增强工具,对mybatis只做增强不做改变。官方的愿景是成为mybatis最好的搭档。与Mybatis相比,MP已经封装好了很多的crud方法,我们不需要再写xml文件了,更不需要写sql语句了(绝大多数情况下),直接调用这些方法即可。由于MP只是对mybatis增强,所以引入MP对原来有mybatis的项目不会有任何影响。

MP的通用CRUD操作可以只进行少量的配置就可实现大部分的单表CRUD操作,还有强大的条件构造器。

通用CRUD

常用Mapper接口

Insert  示例
//插入一条记录intinsert(Tentity);
Delete  示例
//删除一条记录intdelete(@Param(Constants.WRAPPER) Wrapperwrapper);
//根据id批量删除intdeleteBatchIds(@Param(Constants.COLLECTION) CollectionidList);
//根据id删除intdeleteById(Serializableid);
Update  示例
//根据whereWrapper更新intupdate(@Param(Constants.ENTITY) TupdateEntity, @Param(Constants.WRAPPER) WrapperwhereWrapper);
//根据id更新intupdateById(@Param(Constants.ENTITY) Tentity);
Select  示例
//根据id查询TselectById(Serializableid);
//根据queryWrapper查询TselectOne(@Param(Constants.WRAPPER) WrapperqueryWrapper);
//根据id批量查询ListselectBatchIds(@Param(Constants.COLLECTION) CollectionidList);
//根据queryWrapper查询ListselectList(@Param(Constants.WRAPPER) WrapperqueryWrapper);
//根据wrapper查询总数IntegerselectCount(@Param(Constants.WRAPPER) WrapperqueryWrapper);

Service接口

Service封装了IService接口,是对BaseMapper接口的扩充。多了很多批量的操作。
根据实体类创建对应的mapper类,mapper类要继承自basemapper接口。

一般情况下,Mapper接口就足以解决你的需求。(主要是我还不熟)

更多详细接口可以前往官网🛫🛫🛫CRUD 接口

条件构造器

mp的条件构造器是一种链式编程。
比如

QueryWrapperwrapper=newQueryWrapper<>().eq("sex",1).like("name","L");

这就构建了一个查询sex=1,name中有L的一个QueryWrapper。
以下是常用的条件构造器,只列举名称和主要功能,具体的参数可以参考官方文档🛫🛫🛫条件构造器

比较

  • allEq 全部相等
  • e.g. allEq(id:1, name:"HH")
  • eq =
  • e.g. eq("name", "HH")
  • ne <>(不等)
  • e.g. ne("name", "HH")
  • gt >
  • e.g. gt("age", 18)
  • ge >=
  • e.g. ge("age", 18)
  • lt <
  • e.g. lt("age",  18)
  • le <=
  • e.g. le("age", 18)

范围

  • between between xxx and yyy等价于 >=xxx  and <= yyy
  • e.g. between("age", 18, 29)
  • notBetween between的补集
  • e.g. notBetween("age", 18, 29)

模糊

  • like 左右模糊
  • e.g. like("name", "h")
  • notLike like的补集
  • e.g. notLike("name", "h")
  • likeLeft 左模糊
  • e.g. likeLeft("name", "L")
  • likeRight 右模糊
  • e.g. likeRight("name", "e")

分组

  • groupBy 同sql  group by
  • e.g. groupBy("sex")

排序

  • orderByAsc 根据某个或某些字段升序
  • e.g. orderByAsc("id")
  • orderByDesc 根据某个或某些字段降序
  • e.g. orderByDesc("id")
  • orderBy 默认升序
  • e.g. orderBy("id")

逻辑

  • or 用来拼接or
  • e.g. eq("xx","xx").or().eq("xx","xx") 示例

其他

  • isNull 字段is null
  • isNotNull 字段is not null
  • in 同sql  in
  • notIn in的补集
  • inSql 字段in(sql语句)
  • notInSql inSql补集
  • having havin(sql语句)
  • func 主要用于在if...else中不断链。func示例
  • apply 用于拼接sql
  • last 无视规则拼接sql到最后
  • e.g. last("limit 1")
  • 最后一次调用有效,有sql注入风险

🌰

Mapper接口示例

insert
Useruser=newUser("lee", "F");
userMapper.insert(user);
delete
QueryWrapperquery=newQueryWrapper<>().eq("name", "Lee").eq("sex", "F");
xxxMapper.delete(query);
update
//根据wrapper更新, 效果 -> 把age字段由17更新为18Useruser=newUser("lee", "F", 18);
UpdateWrapperwrapper=newUpdateWrapper().eq("name", "lee").eq("age", 17);
userMapper.update(user, wrapper);
select
//查找id为111的记录xxxMapper.selectById(111);
//根据queryWrapper查询QueryWrapperwrapper=newQueryWrapper<>().eq("sex", "F");
xxxMapper.selectCount(wrapper);

条件构造器示例

func示例

使用func需要使用lambda表达式。
比如有如下场景:
我们需要查询名字中含有字母L的人,但是有个条件condition,当condition为true时查男性,condition为false时查女性。

QueryWrapperwrapper=newQueryWrapper<>().lambda()
    .like("name","L")
    .func(i-> {
if (condition) {
i.eq("sex","F");
        } else {
i.eq("sex","M");
        }
    })

当condition为true时,这就相当于下面的语句。所以说func的主要功能是保证在if...else中不断链。

QueryWrapperwrapper=newQueryWrapper<>().like("name","L").eq("sex","F");
or示例
// 默认是and,即 "name"="Lee" and "sex"="F"QueryWrapperwrapper=newQueryWrapper<>().eq("name","Lee").eq("sex","F");
// 使用or,即"name"="Lee"或"sex"="F"QueryWrapperwrapper=newQueryWrapper<>().eq("name","Lee").or().eq("sex","F");

逻辑删除

在项目的application.properties中配置逻辑删除的值

mybatis-plus.global-config.logic-delete-value=1
mybatis-plus.global-config.logic-not-delete-value=0

1表示删除,0表示未删除。(当然你也可以设置为其他数值,但应该不会有人那么做)

接下来配置逻辑删除字段,只需在该实体类字段上加上注解@TableLogic即可。(此处以deleted字段为例)
所以当执行delete时,会转变为更新,实际上执行的sql语句是

update xxx set deleted=1where xxx and deleted=0

查询时会追加限制条件,用来过滤已删除的记录,所以执行的sql语句是

select xxx from xxx where xxx and deleted=0
相关文章
|
9月前
|
XML Java 数据库连接
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
307 21
|
SQL Java 数据库连接
MyBatis-Plus:简化 CRUD 操作的艺术
MyBatis-Plus 是一个基于 MyBatis 的增强工具,它旨在简化 MyBatis 的使用,提高开发效率。
533 1
MyBatis-Plus:简化 CRUD 操作的艺术
|
缓存 Java 数据库连接
我们后端程序员不是操作MyBatis的CRUD Boy
大家好,我是南哥。一个对Java程序员进阶成长颇有研究的人,今天我们接着新的一篇Java进阶指南。为啥都戏称后端是CRUD Boy?难道就因为天天怼着数据库CRUD吗?要我说,是这个岗位的位置要的就是你CRUD,你不得不CRUD。哪有公司天天能给你搭建高并发、高可用、大数据框架的活呢,一条业务线总要成长吧,慢慢成熟了就要装修工来缝缝补补、美化美化,也就是CRUD的活。不能妄自菲薄CRUD Boy,我们是后端工程师。今天来指南下操作数据库之MyBatis框架。
322 3
我们后端程序员不是操作MyBatis的CRUD Boy
|
SQL Java 数据库连接
Mybatis方式完成CRUD操作
Mybatis方式完成CRUD操作
188 0
|
Java 数据库连接 测试技术
mybatis plus 获取新增实体的主键
mybatis plus 获取新增实体的主键
330 8
|
Java 数据库连接 数据库
mybatis plus 更新值为null的字段
mybatis plus 更新值为null的字段
270 7
|
Java 数据库连接 Spring
搭建 spring boot + mybatis plus 项目框架并进行调试
搭建 spring boot + mybatis plus 项目框架并进行调试
449 4
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
552 3
|
Java 数据库连接 数据库
mybatis plus 中增删改查及Wrapper的使用
mybatis plus 中增删改查及Wrapper的使用
708 3
|
算法 Java 数据库连接
mybatis plus 主键策略
mybatis plus 主键策略
234 2