MybtisPlus学习分享

Mybatis-Plus可以简单的理解为Mybatis的加强,其在Mybatis的基础上完成了一些封装,这样开发人员在使用起来就很容易和方便(确实是一个很好的框架)

优点:
1、无侵入:Mybatis-Plus 在 Mybatis 的基础上进行扩展,只做增强不做改变,引入 Mybatis-Plus 不会对您现有的 Mybatis 构架产生任何影响,而且 MP 支持所有 Mybatis 原生的特性
2、依赖少:仅仅依赖 Mybatis 以及 Mybatis-Spring
3、损耗小:启动即会自动注入基本CURD,性能基本无损耗,直接面向对象操作
4、预防Sql注入:内置Sql注入剥离器,有效预防Sql注入攻击
5、通用CRUD操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
6、多种主键策略:支持多达4种主键策略(内含分布式唯一ID生成器),可自由配置,完美解决主键问题
7、支持热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动
8、支持ActiveRecord:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可实现基本 CRUD 操作
9、支持代码生成:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用(P.S. 比 Mybatis 官方的 Generator 更加强大!)
10、支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
11、支持关键词自动转义:支持数据库关键词(order、key…)自动转义,还可自定义关键词
12、内置分页插件:基于Mybatis物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于写基本List查询
13、内置性能分析插件:可输出Sql语句以及其执行时间,建议开发测试时启用该功能,能有效解决慢查询
14、内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,预防误操作

在使用Mybatis-Plus中我们可能用到一个比较多的类是BaseMapper接口,其最终也是利用的Mybatis接口编程的实现机制,其默认提供了一系列的增删改查的基础方法,并且开发人员对于这些基础操作不需要写SQL进行处理操作(Mybatis提供的机制就是需要开发人员在mapper.xml中提供sql语句),那样我们可以猜测肯定是Mybatis-Plus完成了BaseMapper接口提供的方法的SQL语句的生成操作。

MybatisPlus自动分页

MybtisPlus学习分享_第1张图片Page对象为默认属性,current为当前页数,size为每页显示的行数,查询出来的结果List被封装到了records内
MybtisPlus学习分享_第2张图片
Postman测试结果
MybtisPlus学习分享_第3张图片

Mybatis Plus EntityWrapper自定义SQL

在mybatis plus中根据条件构造器,构建SQL查询是很方便的,使用条件构造器可以替代我们写SQL

1、使用T selectOne(Wrapper wrapper);我们只需要传递入我们创建一个EntityWrapper()并将条件拼接好就可以。例如new EntityWrapper().eq(“id”,“1”)就是查询id等于1的这条数据。这里不仅仅支持eq(),还有like,not like ,group by等,差不多在SQL中需要的这里都有。
MybtisPlus学习分享_第4张图片
2、在单表查询的时候我们需要自定义列的时候则使用setSqlSelect方法
MybtisPlus学习分享_第5张图片
等同于:
在这里插入图片描述

BaseMapper< T >接口

在使用Mybatis-Plus中我们可能用到一个比较多的类是BaseMapper接口,其最终也是利用的Mybatis接口编程的实现机制,其默认提供了一系列的增删改查的基础方法,并且开发人员对于这些基础操作不需要写SQL进行处理操作(Mybatis提供的机制就是需要开发人员在mapper.xml中提供sql语句),那样我们可以猜测肯定是Mybatis-Plus完成了BaseMapper接口提供的方法的SQ L语句的生成操作。

使用方法
MybtisPlus学习分享_第6张图片

“增加”

/**
* 插入一条记录
* @param entity 实体对象
*/
Integer insert(T entity);

“删除”

/**
* 根据 ID 删除
* @param id 主键ID
*/
Integer deleteById(Serializable id);

/**
* 根据 columnMap 条件,删除记录
* @param columnMap 表字段 map 对象
*/
Integer deleteByMap(@Param(Constants.COLUMN_MAP) Map columnMap);

/**
* 根据 entity 条件,删除记录
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
Integer delete(@Param(Constants.WRAPPER) Wrapper queryWrapper);

/**
* 删除(根据ID 批量删除)
* @param idList 主键ID列表(不能为 null 以及 empty)
*/
Integer deleteBatchIds(@Param(Constants.COLLECTION) Collection idList);

修改

/**
* 根据 ID 修改
* @param entity 实体对象
*/
Integer updateById(@Param(Constants.ENTITY) T entity);

/**
* 根据 whereEntity 条件,更新记录
* @param entity 实体对象 (set 条件值,不能为 null)
* @param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
*/
Integer update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper updateWrapper);

查询

/**
* 根据 ID 查询
* @param id 主键ID
*/
T selectById(Serializable id);

/**
* 查询(根据ID 批量查询)
* @param idList 主键ID列表(不能为 null 以及 empty)
*/
List selectBatchIds(@Param(Constants.COLLECTION) Collection idList);

/**
* 查询(根据 columnMap 条件)
* @param columnMap 表字段 map 对象
*/
List selectByMap(@Param(Constants.COLUMN_MAP) Map columnMap);

/**
* 根据 entity 条件,查询一条记录
* @param queryWrapper 实体对象
*/
T selectOne(@Param(Constants.WRAPPER) Wrapper queryWrapper);

/**
* 根据 Wrapper 条件,查询总记录数
* @param queryWrapper 实体对象
*/
Integer selectCount(@Param(Constants.WRAPPER) Wrapper queryWrapper);

**
* 根据 entity 条件,查询全部记录
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
List selectList(@Param(Constants.WRAPPER) Wrapper queryWrapper);

/**
* 根据 Wrapper 条件,查询全部记录
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
List> selectMaps(@Param(Constants.WRAPPER) Wrapper queryWrapper);

/**
* 根据 Wrapper 条件,查询全部记录
* 注意: 只返回第一个字段的值
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
List selectObjs(@Param(Constants.WRAPPER) Wrapper queryWrapper);

/**
* 根据 entity 条件,查询全部记录(并翻页)
* @param page 分页查询条件(可以为 RowBounds.DEFAULT)
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
IPage selectPage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper);

/**
* 根据 Wrapper 条件,查询全部记录(并翻页)
* @param page 分页查询条件
* @param queryWrapper 实体对象封装操作类
*/
IPage> selectMapsPage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper);

你可能感兴趣的:(java学习)