初见MybatisPlus

2020-03-19 23:56:02  卢浮宫  阅读量:276  版权声明:本文为站长原创文章,转载请写明出处


一、背景

    前段时间项目中新增广告管理模块,由mybatis进阶成了mybatisPlus,这里简单记录下相关使用频率较高的方法。

二、前提准备

    1、在实体类中使用 @Data 来生成getter 和 setter 方法

    2、使用@TableName("tableName") 来进行表名注解

    3、使用@TableId主键策略  @TableId(value = "id", type = IdType.AUTO)

    4、dao层接口继承 BaseMapp  extends BaseMapper<T tntity>

    5、service接口 继承IService extends IService<T entity>

    6、service实现类继承 ServiceImpl  extends ServiceImpl<T dao T entity>

    PS:4、5、6的使用根据自己的具体情况而定

三、相关补充

    1、 mybatis提供了两个接口和一个类来支持CRUD,常用的有Mapper CRUD 接口和Service CRUD 接口

        ①Service CRUD

         说明:

  •         通用 Service CRUD 封装IService接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆,
  •         泛型 T 为任意实体对象
  •         建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类
  •         对象 Wrapper 为 条件构造器
  •      ②Mapper CRUD  
  •         说明:
    • 通用 CRUD 封装BaseMapper接口,为 Mybatis-Plus 启动时自动解析实体表关系映射转换为 Mybatis 内部对象注入容器
    • 泛型 T 为任意实体对象
    • 参数 Serializable 为任意类型主键 Mybatis-Plus 不推荐使用复合主键约定每一张表都有自己的唯一 id 主键
    • 对象 Wrapper 为 条件构造器

    2、关于BaseMapper和IService

        ①BaseMapper 针对dao层的方法封装 CRUD

        ②IService<M,T> 针对业务逻辑层的封装 需要指定Dao层类和对应的实体类 是在BaseMapper基础上的加强

        ③方法策略不同:BaseMapper中的删除是delete,IService中的删除是remove...

        ④IService是对BaseMapper的拓展

          点进去IService的源码可以看到其中是调用BserMapper来进行的操作。

三、结合官方文档整理其常用方法如下

    1、save

      // 插入一条记录(选择字段,策略插入)
boolean save(T entity);

  2、saveOrUpdate
// TableId 注解存在更新记录,否插入一条记录
boolean saveOrUpdate(T entity);
// 批量修改插入
boolean saveOrUpdateBatch(Collection<T> entityList);

3、remove
// 根据 ID 删除
boolean removeById(Serializable id);
// 根据 columnMap 条件,删除记录
boolean removeByMap(Map<String, Object> columnMap);
// 删除(根据ID 批量删除)
boolean removeByIds(Collection<? extends Serializable> idList);
4、update
// 根据 ID 选择修改
boolean updateById(T entity);
// 根据ID 批量更新
boolean updateBatchById(Collection<T> entityList);
5、get
// 根据 ID 查询
T getById(Serializable id);
// 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")
T getOne(Wrapper<T> queryWrapper);
6、list
// 查询全部记录
List<Object> listObjs();
// 根据 Wrapper 条件,查询全部记录
List<Object> listObjs(Wrapper<T> queryWrapper);
eg: QueryWrapper<AdvertEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("state",1);
List<T entity> XXXEntityList = XXXService.list(queryWrapper);
7、page
// 无条件翻页查询
IPage<T> page(IPage<T> page);
// 翻页查询
IPage<T> page(IPage<T> page, Wrapper<T> queryWrapper);
// 无条件翻页查询
IPage<Map<String, Object>> pageMaps(IPage<T> page);
// 翻页查询
IPage<Map<String, Object>> pageMaps(IPage<T> page, Wrapper<T> queryWrapper);

    8lambda 

        这里介绍下链式查询lambdaQuery和链式更新lambdaUpdate

    List<AdvertEntity> advertEntityList = advertService.lambdaQuery().eq(AdvertEntity::getTitle,"养生").list();
    System.out.println(advertEntityList);
    AdvertEntity advertEntityTmp = new AdvertEntity();
    advertEntityTmp.setTitle("lambda");
    boolean updateRlt = advertService.lambdaUpdate().eq(AdvertEntity::getTitle,"养生").update(advertEntityTmp);

        System.out.println(rlt);  

四、最后附上mybaits的条件构造器(图片来源于网络,侵删)

    

    

最新评论: