MybatisPlus学习,记录下学习内容

    技术2026-01-22  12

    1.yml配置

    2.启动类加上@MapperScan注解

    3.封装类

    3.1注解说明

    @TableName注解用于表名与包装类名匹配 @TableId注解用于指明主键,主键可以选择属性,比如自增 @TableField用于指明属性与表字段匹配,当字段名与属性名相同时可以不写

    4.Mapper接口须继承BaseMapper接口

    5.测试方法

    5.1 selectList方法

    传入参数null是为了查询所有结果,查询结果如下:

    5.2 insert方法

    运行结果:

    6.排除非表字段的三种方式

    6.1 用关键字transient标识

    用transient关键字标识的属性不参与序列化过程,mp会忽略掉该属性,但是该属性也不能被序列化了.

    6.2 用关键字static标识

    用static标识的变量也会被mp忽略掉,但是lombok不会为静态属性生成set/get方法,需要自己手动生成.

    6.3 加入@TableField注解

    该注解默认是true,改成false标识该属性在表中不存在

    7.查询

    7.1 普通查询

    7.1.1 传递单一参数查询

    查询结果:

    7.1.2 传递Collection集合查询

    结果为: 通过结果可以看出是通过in查询的

    7.1.3 传递Map集合查询

    结果为: 中间是使用and连接 值得注意的是:map加的键是表字段,不是包装类属性

    传递Collection集合与Map集合的区别: Collection 是按照同一字段的不同参数查询 Map 是按照不同字段查询表信息

    7.2 条件构造器查询

    7.2.1 模糊查询与eq

    运行结果为: 连接符号也是and

    7.2.2 between和isNotNull

    查询结果为: 全部都是and连接

    7.2.3 逻辑运算符和倒序查询

    结果为:

    7.2.4 sql拼接和in

    结果为:

    7.2.5 AND 嵌套

    7.2.6 OR嵌套

    执行后的sql:

    7.2.7 正常嵌套nested

    执行后sql:

    7.2.8 in

    执行后sql:

    7.2.9 list

    list无视优化规则直接拼接到 sql 的最后,有sql注入风险 执行后sql:

    7.2.10 select

    使用select查询指定字段: 执行结果sql为:

    使用select(Class entityClass, Predicate predicate) 剔除不需要的字段 运行后sql为:

    7.3 条件构造器中condition用法

    源码为: condition为false,则表示该字段不加入where条件 sql执行结果:

    7.4 创建条件构造器时,传入实体参数

    实体参数和条件构造器互不冲突,都会被加在where后面 执行结果:

    7.4.1 关于实体参数

    注意事项: 实体条件查找默认时等值.但是可以在实体类加入@TableFiled注解改变查询条件 SqlCondition 提供的查询条件有限,仅仅五个 但是可以自己按照他的格式定义,例如: 表示查询小于指定参数的值: sql查询结果为:

    7.5 allEq

    以map集合的形式传递参数 执行结果为: 该方法还有一个重载方法 图片来源于官方,第二个方法的null2IsNull为true时,表示当该参数为null时调用is null ,当null2IsNull为false时,则表示当传的参数为null时直接忽略. null2IsNull为true时: null2IsNull为false时: allEq还有一种写法: 可以通过该方法过滤查询条件:

    7.6 selectMaps

    根据 Wrapper 条件,查询全部记录

    因为返回值类型不在是实体类了,当实体类属性较多,而所需返回值较少时,可以使用这种方式查询,或者用于特殊查询

    7.7 selectObjs

    这个方法的查询结果只保留第一个字段的值 比如这个,明明查询了年龄和姓名,却只保留了姓名

    7.8 selectOne

    返回值时一个实体对象,但是查询到多个会报错

    7.9 selectCount

    该方法可用于统计数量

    7.10 lambda条件构造器

    lambda条件构造器的普通三种创建方法: 拿第三种创建方式举例: lambda条件构造器的第四种写法 直接将接口传入,就能直接查询了

    8 自定义Sql

    需要在Mapper接口先写自己的方法,和mybatis一样的写法,但是参数需要指定的参数,Sql语句使用注解或者xml都行: 关于 ${ew.customSqlSegment} 的含义:

    9 分页查询

    第一步: 配置分页查询配置类 注:分页查询不成功,很有可能是配置信息的不完成 分页查询代码: mp是分两次查询,一次是查询总记录数,一次是查询分页数据,可以通过重载方法,取消查询总记录数 不查询总记录数: selectMapsPage返回的时一个map集合 也有自定义分页查询,详情见官网

    10 更新功能

    根据id更新: 这个方法是基于实体参数修改指定的值,entity是set参数,updateWrapper是where里的参数

    int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);

    updateWrapper也可以传入实体参数: 只改变部分参数,则不必要传入实体对象时,可以用set方法:

    Lambda表达式写法 链式Lambda表达式写法

    11 删除功能

    deleteBuId int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList); 类似,就是传一个集合进去删除 int delete(@Param(Constants.WRAPPER) Wrapper wrapper); 这是lambda表达式的,普通构造器类似

    Processed: 0.037, SQL: 9