Mybatis-plus

Mybatis-plus

1.mybatis-plus的概念

  • 解决基本crud代码重复的问题
  • 不是取代Mybatis,而是增强Mybatis的工具

在这里插入图片描述

  • 特性:
  1. 无侵入
  2. 损耗小
  3. 提供强大的CRUD操作
  4. 支持Lambda形式调用
  5. 支持主键自动生成
  6. 支持ActiveRecord模式
  7. 支持自定义全局通用操作
  8. 内置代码生成器
  9. 内置分页插件,分页插件支持多种数据库
  10. 内置性能分析插件
  11. 内置全局拦截插件

2.mybatis-plus解决了mybatis 哪些缺点

  1. 提供无sql的crud操作(只是mybatis简单的crud也要提供sql)
  2. 内置代码生成器,分页插件,性能分析插件等(只是mybatis分页等需要依赖第三方插件)
  3. 提高功能丰富的条件构造器快速进行无sql开发(只是mybatis需要提供大量的xml文件)

3.mybatis-plus使用

  1. 创建一个spring-boot项目
  2. 导入依赖(父依赖等)
  3. application.properties中配置4要素和sql日志
  4. domain和mapper
  5. 启动类和测试类
  • mybatis-plus中mapper接口的写法
  1. 继承一个BaseMapper接口
  2. 继承的接口中,定义了一些常用的crud的方法,所以我们可以使用里面的方法
  3. 我们的接口定义的时候需要明确指定操作实体对象.mp底层通过反射解析该实体对象,获取实体对象类名,字段,作为拼接sql语句的表名和字段名,然后根据crud操作,拼接处对应的crud sql语句.所以:我们的的实体类名和表名,必须和数据库的表名和列名一致
  4. 接口中有一个泛型,泛型是当前mapper要操作的实体类

4.mybaits-plus中的注解使用

4.1 @Tablename

  • 表名注解(贴在实体类的对象名字上面),指定映射数据库中的哪一个表名
  • 一般使用在数据库中的名字比较特殊(t_xxx等)

4.2 @TableField

  • 字段注解(不适用在主键上,贴在你要注解的字段上),指定当前属性映射数据库中的哪一列
  • @TableField(value=“xx”,exist=true/false)
    使用exist:表示当前属性是否映射到数据库列

4.3 @TableId

  • 主键注解(贴在主键上),标记当前属性映射表主键。
  • @TableId(value=“id”, type=IdType.AUTO)
    其中:type属性指定主键类型
    IdType.AUTO 数据库id自增
    IdType.NONE 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
    IdType.INPUT insert前自行set主键值
    IdType.ASSIGN_ID 分配ID(主键类型为Number(Long和Integer)或String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)
    IdType.ASSIGN_UUID 分配UUID,主键类型为String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认default方法)

在这里插入图片描述

5.mybaits-plus的通用mapper接口

5.1 日志

第一种:
logging.level.xxxxx.mapper=debug
第二种:
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
  • 第一种日志带有时间,操作人,执行的方法,sql语句等
  • 第二种日志只有sql语句

5.2 insert

  • 添加一个新对象
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-frL0Wiex-1606325183957)(img/insert操作.png)]

5.3 update

5.3.1 updateById

  • 使用在全量更新,只要传入对象属性不为bull,都可以进行update更新,条件通过id匹配
    步骤: 必须知道id
  1. 替换
  2. 更新
    在执行过程中,会将属性为null的字段忽略,不为null的字段拼接到updateById sql语句中
    操作方案:
  3. 建议将基本类型使用包装类型进行操作
  4. 使用update语句
    在这里插入图片描述

5.3.2 update+UpdateWrapper

  • 部分字段更新,通过wrapper对象拼接各种满足要求条件, 更新set的列由wrapper决定
    步骤:
  1. 设置更新条件
  2. 拼接更新的列
    在这里插入图片描述

5.3.3 两种方式的区别

  • 参数1: 通过对象方式指定要更新的列与数据
  • 如果指定了对象,mp会对这个对象里面所有非null的属性,拼接到set语法中
  • 参数2: 指定更新查询条件
    UpdateWrapper wrapper = new UpdateWrapper<>();
  • 使用区别:
  1. 知道id并且更新所有使用updateById
  2. 部分字段更新,使用update + wrapper.eq(条件).set(更新字段)

5.4 delete

5.4.1 deleteById(id)

  • 通过id删除对应的信息
    在这里插入图片描述

5.4.2 deleteBatchIds(idList)

  • 根据List存放的多个id,删除多个id
    在这里插入图片描述

5.4.3 deleteByMap(map)

  • 通过多个条件删除符合条件的信息
  1. 创建一个map集合
  2. 往map集合里面存放条件
  3. 条件map, key是列名 ,value是条件值
    注意: 必须加条件,不然会清空表数据
    在这里插入图片描述

5.4.4 delete(wrapper)

  • 根据条件删除信息
    使用QueryWrapper()
    在这里插入图片描述

5.5 select

5.5.1 selectById(id)

  • 根据id来进行查询
    在这里插入图片描述

5.5.2 selectBatchIds(idList)

  • 查询多个id多个信息
    在这里插入图片描述

5.5.3 selectByMap(map)

  • 根据map里面的条件进行查询
    在这里插入图片描述

5.5.4 selectCount(wrapper)

  • 统计符合条件的信息有多少条
    在这里插入图片描述

5.5.5 selectList(wrapper)

  • 查询满足条件的所有信息, 返回List 对象
    在这里插入图片描述

5.5.6 selectMaps(wrapper)

  • 查询满足条件的所有的信息, 返回List<Map<String, Object>> 底层将每条数据封装成HashMap
    在这里插入图片描述

5.5.7 selectPage(page, wrapper)

  • 分页显示数据
    步骤:
  1. 配置一个分页的插件(拦截器)(在启动类中)
    //分页
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
        paginationInnerInterceptor.setOverflow(true); //合理化
        interceptor.addInnerInterceptor(paginationInnerInterceptor);
        return interceptor;
    }

步骤2:编写分页代码

  1. new 一个Page对象.
  2. 创建出来的对象用接口接收
  3. 参数1:当前页 参数2:每页显示条数
    在这里插入图片描述

5.5.8selectOne(wrapper)

  • 查出来只取第一条
    注意: 如果查出数据条数超过一条报错:Expected one result (or null) to be returned by selectOne(), but found: xxx
    在这里插入图片描述

5.5.9 selectObjs(wrapper)

  • 查询全部记录,无指定返回第一列的数据(id).指定返回指定的列的数据
    在这里插入图片描述

5.5.10 selectMapsPage(page, wrapper)

  • 分页后返回的结果是HashMap
    在这里插入图片描述

6.条件构造器

  • 定义:条件拼接对象,用于sql中的where条件
  • 准确的说:mybatis的动态sql(sql语句片段)
    在这里插入图片描述

6.1 更新操作

6.1.1 UpdateWrapper更新

  • set(boolean,column,value)
    参数1: 如果为true,才在update sql语句中拼接,当前的column和value
    如果传入的新name是null或者"“则为false不拼接这段name.
    传入的新name不是null或者”"则进行修改他的name信息
  • setSql(String sql)
    在这里插入图片描述

6.1.2 LambdaUpdateWrapper更新

  • 在编译阶段就判断字段是否存在,不存在的字段直接报错
    在这里插入图片描述

6.1.3区别

  • 一般推荐使用LambdaUpdateWrapper(因为可以进行字段的校验)

6.2 查询操作

6.2.1 QueryWrapper查询

6.2.2 LambdaQueryWrapper查询

  • 进行字段的校验
    在这里插入图片描述

6.2.3 区别

  • 一般使用LambdaQueryWrapper(因为可以进行字段的校验)

6.3 Wrapper工具类

在这里插入图片描述

7.高级查询

7.1列投影

  • 查询信息,返回部分的字段
  • select(“xxx”,“xxx”);
    在这里插入图片描述
    //参数:Predicate 函数, 满足指定判定逻辑列才返回
    //要求:wrapper.setEntity(employee);
    select(Predicate predicate)
    //参数1:通过实体属性映射表中列
    //参数2:Predicate 函数, 满足指定判定逻辑列才返回
    select(Class entityClass, Predicate predicate)

在这里插入图片描述

7.2排序

  • orderByAsc: 正序排
    orderByAsc(R… columns)
    orderByAsc(boolean condition, R… columns)
  • orderByDesc 倒序排
    orderByDesc (R… columns)
    orderByDesc (boolean condition, R… columns)
    如果需要指定两次种顺序就按顺序写两次
    在这里插入图片描述
  • orderBy(boolean condition,boolean isAsc,columns);
  • 第一个参数:是否排序
  • 第二个参数:true:正序,false:倒序
  • 第三个参数按什么字段排序
    在这里插入图片描述

7.3 分组查询

分组:GROUP BY 字段, …

  • groupBy(R… columns)
    groupBy(boolean condition, R… columns)
    按什么字段进行分组,然后统计每组的人数
    在这里插入图片描述
  • having : HAVING ( sql语句 )
  • having(String sqlHaving, Object… params)
  • having(boolean condition, String sqlHaving, Object… params)
    把group by 的结果进行过滤
    在这里插入图片描述

7.4 条件查询

7.4.1 比较运算符

7.4.1.1 allEq/eq/ne
  • allEq:全等匹配
  • eq:单个参数判断是否相等
    eq(R column, Object val)
    eq(boolean condition, R column, Object val)在这里插入图片描述
  • ne:不等于
    ne(R column, Object val)
    ne(boolean condition, R column, Object val)
    在这里插入图片描述
7.4.1.2 gt/ge/lt/le
  • gt:大于 >
    gt(R column, Object val)
    gt(boolean condition, R column, Object val)
  • ge:大于等于 >=
    ge(R column, Object val)
    ge(boolean condition, R column, Object val)
    在这里插入图片描述
  • lt:小于 <
    lt(R column, Object val)
    lt(boolean condition, R column, Object val)
  • le:小于等于 <=
    le(R column, Object val)
    le(boolean condition, R column, Object val)
    在这里插入图片描述
7.4.1.3 between/notBetween
  • between:BETWEEN 值1 AND 值2
    between(R column, Object val1, Object val2)
    between(boolean condition, R column, Object val1, Object val2)
  • notBetween:NOT BETWEEN 值1 AND 值2
    notBetween(R column, Object val1, Object val2)
    notBetween(boolean condition, R column, Object val1, Object val2)
    在这里插入图片描述
7.4.1.4 isNull/isNotNull
  • isNull:字段 IS NULL:为空
    isNull(R column)
    isNull(boolean condition, R column)
  • isNotNull:字段 IS NOT NULL;不为空
    isNotNull(R column)
    isNotNull(boolean condition, R column)
    在这里插入图片描述
7.4.1.5 in/notIn/inSql/notInSql
  • in:字段 IN (value1, value2, …):字段在符合某个条件
    in(R column, Collection<?> value)
    in(boolean condition, R column, Collection<?> value)
  • notIn:字段 NOT IN (value1, value2, …):字段不符合这里面的某个条件
    notIn(R column, Object… values)
    notIn(boolean condition, R column, Object… values)
  • inSql:字段 IN ( sql语句 )
    inSql(R column, String inValue)
    inSql(boolean condition, R column, String inValue)
  • notInSql:字段 NOT IN ( sql语句 )
    notInSql(R column, String inValue)
    notInSql(boolean condition, R column, String inValue)
    在这里插入图片描述

7.4.2 模糊查询

7.4.2.1 like/notLike
  • like:LIKE ‘%值%’:只要包含了这个值
    like(R column, Object val)
    like(boolean condition, R column, Object val)
  • notLike:NOT LIKE ‘%值%’:只要不包含了这个值
    notLike(R column, Object val)
    notLike(boolean condition, R column, Object val)
    在这里插入图片描述
7.4.2.2 likeLeft/likeRight
  • likeLeft:LIKE ‘%值’:已某个值结尾
    likeLeft(R column, Object val)
    likeLeft(boolean condition, R column, Object val)
  • likeRight:LIKE ‘值%’:已某个值开头
    likeRight(R column, Object val)
    likeRight(boolean condition, R column, Object val)
    在这里插入图片描述

7.4.3 逻辑运算符

7.4.3.1 or
  • or:拼接 OR
    or()
    or(boolean condition)
    在这里插入图片描述
7.4.3.2 and
  • and:默认是and
    在这里插入图片描述
7.4.3.3 and的嵌套使用
  • 嵌套and:
    and(Consumer consumer)
    and(boolean condition, Consumer consumer)
    在这里插入图片描述
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页