首页 > 技术文章 > Mybatis-Plus

hongzuiliyu 2020-12-16 23:17 原文

Mybatis入门

  一、Mybatis  VS   JPA

      

       

       

   二、Mybatis-Plus介绍

      

       

       

       

       

   三、MP基本使用

      1.通用Mapper

      2.常用注解

        @TableName("表名"),当不符合自动映射规则,用在实体类上,手动指定对应的数据库表名

           @TableId,当主键不叫id时,用在实体类主键属性上,手动指定主键 

        @TableField("列名"),当不符合自动映射规则,用在实体类普通属性上,手动指定在表中对应的列

      3.排除非表字段的三种方式(minos项目有使用场景

        (1)属性前用transient修饰,不参序列化

          

         (2)属性前用static修饰,转成静态变量,整个类只有唯一一份数据

          

         (3)属性上用@TableFiled(exist=false)注解修饰,告诉MP该属性不是表中的字段

  四、Mabatis-Plus查询方法        

    1.基本查询

      

 

      

     2.条件构造器查询

      (1)全模糊查询,小于

        

      (2)between,非空

         

      (3)右模糊查询,or查询,排序

         

      (4)函数(两个参数,可以防止sql注入),子查询

         

       (5)and,or嵌套查询(使用lamda表达式)

         

       (6)or,and嵌套查询

        

        (7)  嵌套语句在前面,nested()

         

       (8)in查询

         

       (9)limit查询,无视优化规则,直接拼接到最后,有sql注入风险,慎用

        

       (10)select不列出全部字段   .select()

          1)直接列出要查询的字段

          

 

          2)排除个别字段

          

 

       (11)condition函数的作用,避免在代码中写if判断  

          

 

       (12) 实体作为条件构造器构造方法的参数,多用于等值查询

          

 

       (13)AllEq用法,作用类似于12,比12更灵活

          

 

       (14)其他用法

          selectMaps(),返回值是一个Map,不再是一个实体,用于只返回少数字段的场景,也用于返回实体类无法表示的统计结果

          

 

           

 

         selectCount(),查询记录数

          

 

     3.lamda条件构造器查询,实现防误写功能

      

 

       MP3.7新增用法,把最后的查询语句也加入到链式编程中,直接一条语句搞定!

        

   五、自定义sql以及分页查询

    1.自定义sql

      基于注解

        

        

      基于xml文件

         

 

         

 

     2.Mybatis-Plus分页插件实现物理分页

      (1)引入插件,paginationInterceptor

          

 

       (2)创建page对象,指定page和pageSize,调用API进行查询

          返回对象

              

 

          返回map

              

 

           只返回当前页记录,不查询总条数

              

 

           基于自定义sql实现分页

              

 

   六、Mybatis-Plus更新及删除

    1.更新

      (1)根据id更新

          

 

       (2)根据条件构造器更新,传入wrapper对象

          

      (3)wrapper构造函数中传入实体,实体中非null字段会出现在where条件中

           

 

       (4)链式编程,.set()方法

        

 

       (5)lambda形式

        

 

       (6)终极链式lambda,一条语句搞定

        

    2.删除

       (1)根据id删除

           

 

       (2)其他普通删除

          1)deleteByMap,出现在where条件中

              

 

           2)deleteBatchIds,根据id批量删除

              

       (3)根据条件构造器删除

          

 

   七、AR模式,主键策略和基本配置

    1.AR模式(ActiveRecord模式)

      (1)实体类继承Model对象

          

 

       (2)实体类必须有对应的Mapper接口,并继承BaseMapper(UserMapper)

       (3)直接操作实体类进行增删改查

          

           

          

 

           

 

       (4)一个特殊方法,insertOrUpdate,根据id判断,没有就新增,有就先根据id查询,查到记录就更新,查不到就新增

          

    2.主键策略

      全局策略,默认long类型雪花算法

        

      局部策略,优先级高于全局策略

        

      策略包括:数据库自增id,雪花算法(Long),雪花算法(String),UUID

    3.MP配置

      基本配置

        

      进阶配置

        

      DB策略配置

        

 

   八、通用service,在通用mapper的基础上,进一步封装了一些方法

      

      (1)创建接口的时候,继承IService

          

 

       (2)创建实现类的时候,继承ServiceImpl

          

 

       (3)这样在写service逻辑的时候,就不再需要调用mapper层,直接在service中使用MP封装好的方法,可以使用的API:

        

 

       (4)批量操作举例

          

 

       (5)链式调用举例,比mapper操作语句更加简洁!

          查询

            

 

          更新

             

 

          删除

             

 

 

MP知识点扩展:

1.mp的saveBatch方法,底层是一条一条的新增,并没有实现真正的批量,需要自己扩展

      扩展MP实现真正的批量新增       https://www.jianshu.com/p/df14fa887b85

      官方文档        https://mybatis.plus/guide/crud-interface.html#select

 

2.mp执行count(*)操作,有可能返回值为null,需要进行转换,如果为null就转换成0,防止空指针异常

 

3.MP插入后返回主键

  在调用insert()方法后,入参entity对象的id已经被填充,直接entity.getXXX()即可

4.mp打印sql日志

logging.level.包路径=debug
或者
mybatis-plus:
 mapper-locations: classpath:mapper/*.xml configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl


 

       

 

推荐阅读