mybatis-plus

mybatis-plus:是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

(其他架构搭配如ssm待补充)

目前项目里面使用的是springBoot,所以第一步只需要添加对应的启动器即可,如下图:(version为版本标签,可以像下图那样作引用,然后统一写在<properties>标签里面,也直接写在version版本里面)

  

第二步配置yml/properties,这里以yml文件为示例:

  

 

 

   mapper-locations:为扫描xml文件的位置

  map-underscore-to-camel-case:mybatis默认是属性名和数据库字段名一一对应的,即数据库表列:user_name,实体类属性:user_name,但是java需要遵守驼峰命名法,所以实体类属性必须是useName,使用这个配置就可以开启驼峰功能,数据库和实体类一一对应
  log-impl:内置的日志工厂提供日志功能,指定使用哪个日志实现类

  logic-delete-value,logic-not-delete-value:逻辑删除,配合实体类上的@TableLogic注解共同起作用,实际就是对数据库进行软删除,但是也无法再查出该条数据

  type-enums-package:适用枚举属性,配合以下的枚举类进行使用:

    

 

     当进行增删改查的时候,属性就会自动适配枚举,使得代码更加简洁

第三步,编写实体类entity:

  

    @TableName("table_name"):对应数据表的名字

    @TableId(type = IdType.AUTO):自动id

    @TableField(""):对应数据表字段

第四步,编写实体类对应的Mapper接口:

   

 

   @Repository 它用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean。具体只需将该注解标注在 DAO类上即可。

   @Mapper 目的为了不些mapper映射文件,也可以用@MapperScan("包位置"),也可以使用该注解,在启动类上面,就不用每一个mapper文件都写@Mapper

基本到这里就可以使用mybaits-plus的原生方法了,如果原生方法不够用,还可以编写自己的特有方法,就像mybatis一样,配置多一个mapper.xml文件即可,如下

  

 

 mybaits-plus Mapper层原生方法:

  insert——插入,插入一条记录,对应一个实体类,返回对应的id

 

  delete——删除:

    delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper)——根据entity条件,删除匹配的记录,如下图:

      

     deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList)——根据匹配的id数组批量删除,如下图:

      

      里面是集合框架list的集合对象

     deleteById(Serializable id)——根据id删除记录,如下图:

      

     deleteByMap(@Param(Constants.COLUMN_MAP) Map<String,Object> columnMap)——根据columnMap条件删除记录

      

      其实就是对应字段name为张三,性别为男这两个条件作筛选删除

     总结:比较常用的是第一三种方法,第一种方法可以使用Wrapper对象作链式编程,比deleteByMap要快

 

  update——更新

    update(@Param(Constants.ENTITY) T entity,@Param(Conants.WRAPPER) Wrapper<T> updateWrapper)——根据实体条件更新

      

      这里就是根据adId作为条件去更新,但是要注意,第一个实体类的属性只要不为null都会set进去,所以如果该实体类有默认值就要注意这点

    updateById(@Param(Constants.ENTITY) T entity)——根据id更新记录

      

      这里同样要注意,storeAd实体类需要有id主键,且不为null的都会作为set去更新

 

  select——查询

    selectById(Serializable id)——根据id查询实体类

    selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper)——根据实体类条件查询,如下图

      

       根据实体类的条件查询一条记录,如果搜索出多条会报错

    selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList)——根据id批量查询

      

      只要是list集合的对象即可

    selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper)——根据实体类条件查询所有结果

       

     selectByMap(@Param(Constants.COLUMN_MAP) Map<String,Object> columnMap);

      

      其实就是对应字段name为张三,性别为男这两个条件作筛选查找出对应的实体类

    selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper)——根据条件查询实体类,并且实体类以Map的形式返回

      

       Map的key为实体类的属性名,value则为实体类的属性数据,值得注意的是,这样查询出来的数据,如果属性为null的话,是不会设置进Map的,只有在yml/properties文件里面设置了call-setters-on-nulls:true,才会将null也返回出来,以下是对照图,左图没有开启,右图为开启后,通常都会开启,避免报错,特别是在前后端作交互的时候

    

    

  selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper)——根据条件查询,查询全部记录,只返回第一个字段的值

     

 

      只返回了user实体类的id,也就是第一个字段

 

 

  selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper)——根据实体类条件,查询全部记录,可以实现翻页

    

 

    1.new Page<>(1L,10L)——可以指定页数和每页数据条数,第一个参数是第几页,第二参数是一页多少条数据

    2.new LambdaQueryWrapper<>——根据实体类条件来查询

    3.page.getRecords()——可以得到实体类的集合

    4.page.getTotal()——可以获得总共有多少条数据

  

  selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper)

     

    与上述的方法基本一样,只是返回的是Map形式的实体类,也与selectMaps一样,如果没有开启call-setters-on-nulls:true,遇到空的属性,是不会返回数据为null的字段

   

  selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper)——根据条件查询记录条数

    

 

 条件构造器

  用于生成 sql 的 where 条件, entity 属性也用于生成 sql 的 where 条件,使用条件构造器能极大提升开发效率,不用到xml文件中再写sql

  常用的有以下几个条件构造器:

  LambdaQueryWrapper——使用lambda语法查询的条件构造器

  LambdaUpdateWrapper——使用lambda语法做更新的条件构造器

  QueryWrapper——Entity 对象封装操作类,不是用lambda语法

  UpdateWrapper——Update 条件封装,用于Entity对象更新操作

  

  以下是条件构造器的条件

  

  

  例子:

  

 

 

posted @ 2020-09-15 15:39  JoelYe  阅读(237)  评论(0编辑  收藏  举报