初见MybatisPlus

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


一、背景

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


二、前提准备


    2.1、实体类配置

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

    2.2、注解表名

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

    2.3、注解声明主键

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

    2.4、dao层

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

    2.5、service接口

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

    2.6、service实现类

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

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


三、相关补充


    3.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 为 条件构造器

    3.2、关于BaseMapper和IService

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

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

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

        ④IService是对BaseMapper的拓展

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


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


    4.1、save


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



    4.2、saveOrUpdate

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



    4.3、remove


      /* 根据 ID 删除 */
boolean removeById(Serializable id);
/* 根据 columnMap 条件,删除记录 */
boolean removeByMap(Map<String, Object> columnMap);
/* 删除(根据ID 批量删除)*/
boolean removeByIds(Collection<? extends Serializable> idList);



    4.4、update

    
      /* 根据 ID 选择修改 */
boolean updateById(T entity);
/* 根据ID 批量更新 */
boolean updateBatchById(Collection<T> entityList);



    4.5、get

     
      /* 根据 ID 查询 */
T getById(Serializable id);
/* 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1") */
T getOne(Wrapper<T> queryWrapper);



    4.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);



    4.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);



    4.8、lambda

        这里介绍下链式查询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的条件构造器(图片来源于网络,侵删)


    

    



更多精彩请关注guangmuhua.com


最新评论: