Mybatis-plus概述【basemapper】

这篇博客我们介绍一下关于Mybatis-Plus相关的知识,Mybatis-Plus可以简单的理解为Mybatis的加强,其在Mybatis的基础上完成了一些封装,这样开发人员在使用起来就很容易和方便(确实是一个很好的框架),官网Mybatis-Plus

优点 | Advantages

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

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

BaseMapper类:


   
   
   
   
  1. public interface BaseMapper<T> {
  2. /**
  3. *

  4. * 插入一条记录
  5. *

  6. *
  7. * @param entity 实体对象
  8. */
  9. Integer insert(T entity);
  10. /**
  11. *

  12. * 根据 ID 删除
  13. *

  14. *
  15. * @param id 主键ID
  16. */
  17. Integer deleteById(Serializable id);
  18. /**
  19. *

  20. * 根据 columnMap 条件,删除记录
  21. *

  22. *
  23. * @param columnMap 表字段 map 对象
  24. */
  25. Integer deleteByMap(@Param(Constants.COLUMN_MAP) Map columnMap);
  26. /**
  27. *

  28. * 根据 entity 条件,删除记录
  29. *

  30. *
  31. * @param queryWrapper 实体对象封装操作类(可以为 null)
  32. */
  33. Integer delete(@Param(Constants.WRAPPER) Wrapper queryWrapper);
  34. /**
  35. *

  36. * 删除(根据ID 批量删除)
  37. *

  38. *
  39. * @param idList 主键ID列表(不能为 null 以及 empty)
  40. */
  41. Integer deleteBatchIds(@Param(Constants.COLLECTION) Collection idList);
  42. /**
  43. *

  44. * 根据 ID 修改
  45. *

  46. *
  47. * @param entity 实体对象
  48. */
  49. Integer updateById(@Param(Constants.ENTITY) T entity);
  50. /**
  51. *

  52. * 根据 whereEntity 条件,更新记录
  53. *

  54. *
  55. * @param entity 实体对象 (set 条件值,不能为 null)
  56. * @param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
  57. */
  58. Integer update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper updateWrapper);
  59. /**
  60. *

  61. * 根据 ID 查询
  62. *

  63. *
  64. * @param id 主键ID
  65. */
  66. T selectById(Serializable id);
  67. /**
  68. *

  69. * 查询(根据ID 批量查询)
  70. *

  71. *
  72. * @param idList 主键ID列表(不能为 null 以及 empty)
  73. */
  74. List selectBatchIds(@Param(Constants.COLLECTION) Collection idList);
  75. /**
  76. *

  77. * 查询(根据 columnMap 条件)
  78. *

  79. *
  80. * @param columnMap 表字段 map 对象
  81. */
  82. List selectByMap(@Param(Constants.COLUMN_MAP) Map columnMap);
  83. /**
  84. *

  85. * 根据 entity 条件,查询一条记录
  86. *

  87. *
  88. * @param queryWrapper 实体对象
  89. */
  90. T selectOne(@Param(Constants.WRAPPER) Wrapper queryWrapper);
  91. /**
  92. *

  93. * 根据 Wrapper 条件,查询总记录数
  94. *

  95. *
  96. * @param queryWrapper 实体对象
  97. */
  98. Integer selectCount(@Param(Constants.WRAPPER) Wrapper queryWrapper);
  99. /**
  100. *

  101. * 根据 entity 条件,查询全部记录
  102. *

  103. *
  104. * @param queryWrapper 实体对象封装操作类(可以为 null)
  105. */
  106. List selectList(@Param(Constants.WRAPPER) Wrapper queryWrapper);
  107. /**
  108. *

  109. * 根据 Wrapper 条件,查询全部记录
  110. *

  111. *
  112. * @param queryWrapper 实体对象封装操作类(可以为 null)
  113. */
  114. List> selectMaps( @Param(Constants.WRAPPER) Wrapper queryWrapper);
  115. /**
  116. *

  117. * 根据 Wrapper 条件,查询全部记录
  118. * 注意: 只返回第一个字段的值
  119. *

  120. *
  121. * @param queryWrapper 实体对象封装操作类(可以为 null)
  122. */
  123. List selectObjs(@Param(Constants.WRAPPER) Wrapper queryWrapper);
  124. /**
  125. *

  126. * 根据 entity 条件,查询全部记录(并翻页)
  127. *

  128. *
  129. * @param page 分页查询条件(可以为 RowBounds.DEFAULT)
  130. * @param queryWrapper 实体对象封装操作类(可以为 null)
  131. */
  132. IPage selectPage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
  133. /**
  134. *

  135. * 根据 Wrapper 条件,查询全部记录(并翻页)
  136. *

  137. *
  138. * @param page 分页查询条件
  139. * @param queryWrapper 实体对象封装操作类
  140. */
  141. IPage> selectMapsPage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
  142. }
  143. 在Mybatis-Plus中提供了SqlMethod类,从这个类中我们可以看到针对BaseMapper类中的每个方法,SqlMethod都提供了一个SQL语句的模板来生成SQL语句,最终还是一个namespace+method对应一条sql语句

    
       
       
       
       
    1. public enum SqlMethod { /**
    2. * 插入
    3. */
    4. INSERT_ONE( "insert", "插入一条数据(选择字段插入)", ""),
    5. /**
    6. * 删除
    7. */
    8. DELETE_BY_ID( "deleteById", "根据ID 删除一条数据", ""),
    9. DELETE_BY_MAP( "deleteByMap", "根据columnMap 条件删除记录", ""),
    10. DELETE( "delete", "根据 entity 条件删除记录", ""),
    11. DELETE_BATCH_BY_IDS( "deleteBatchIds", "根据ID集合,批量删除数据", ""),
    12. /**
    13. * 逻辑删除
    14. */
    15. LOGIC_DELETE_BY_ID( "deleteById", "根据ID 逻辑删除一条数据", ""),
    16. LOGIC_DELETE_BY_MAP( "deleteByMap", "根据columnMap 条件逻辑删除记录", ""),
    17. LOGIC_DELETE( "delete", "根据 entity 条件逻辑删除记录", ""),
    18. LOGIC_DELETE_BATCH_BY_IDS( "deleteBatchIds", "根据ID集合,批量逻辑删除数据", ""),
    19. /**
    20. * 修改
    21. */
    22. UPDATE_BY_ID( "updateById", "根据ID 选择修改数据", ""),
    23. UPDATE( "update", "根据 whereEntity 条件,更新记录", ""),
    24. /**
    25. * 逻辑删除 -> 修改
    26. */
    27. LOGIC_UPDATE_BY_ID( "updateById", "根据ID 修改数据", ""),
    28. LOGIC_UPDATE_ALL_COLUMN_BY_ID( "updateAllColumnById", "根据ID 选择修改数据", ""),
    29. /**
    30. * 查询
    31. */
    32. SELECT_BY_ID( "selectById", "根据ID 查询一条数据", "SELECT %s FROM %s WHERE %s=#{%s}"),
    33. SELECT_BY_MAP( "selectByMap", "根据columnMap 查询一条数据", ""),
    34. SELECT_BATCH_BY_IDS( "selectBatchIds", "根据ID集合,批量查询数据", ""),
    35. SELECT_ONE( "selectOne", "查询满足条件一条数据", ""),
    36. SELECT_COUNT( "selectCount", "查询满足条件总记录数", ""),
    37. SELECT_LIST( "selectList", "查询满足条件所有数据", ""),
    38. SELECT_PAGE( "selectPage", "查询满足条件所有数据(并翻页)", ""),
    39. SELECT_MAPS( "selectMaps", "查询满足条件所有数据", ""),
    40. SELECT_MAPS_PAGE( "selectMapsPage", "查询满足条件所有数据(并翻页)", ""),
    41. SELECT_OBJS( "selectObjs", "查询满足条件所有数据", ""),
    42. /**
    43. * 逻辑删除 -> 查询
    44. */
    45. LOGIC_SELECT_BY_ID( "selectById", "根据ID 查询一条数据", "SELECT %s FROM %s WHERE %s=#{%s} %s"),
    46. LOGIC_SELECT_BATCH_BY_IDS( "selectBatchIds", "根据ID集合,批量查询数据", "");
    47. private final String method;
    48. private final String desc;
    49. private final String sql;
    50. SqlMethod(String method, String desc, String sql) {
    51. this.method = method;
    52. this.desc = desc;
    53. this.sql = sql;
    54. }
    55. public String getMethod() {
    56. return method;
    57. }
    58. public String getDesc() {
    59. return desc;
    60. }
    61. public String getSql() {
    62. return sql;
    63. }
    64. }

     


    转载自:https://blog.csdn.net/qq924862077/article/details/81774958

    你可能感兴趣的:(mybatis)