数据库
首页 > 数据库> > mybtais-plus学习--BaseMapper提供的方法及SQL语句生成

mybtais-plus学习--BaseMapper提供的方法及SQL语句生成

作者:互联网

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

优点 | Advantages

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

BaseMapper类:


   
  1. public interface BaseMapper<T> {
  2. /**
  3. * <p>
  4. * 插入一条记录
  5. * </p>
  6. *
  7. * @param entity 实体对象
  8. */
  9. Integer insert(T entity);
  10. /**
  11. * <p>
  12. * 根据 ID 删除
  13. * </p>
  14. *
  15. * @param id 主键ID
  16. */
  17. Integer deleteById(Serializable id);
  18. /**
  19. * <p>
  20. * 根据 columnMap 条件,删除记录
  21. * </p>
  22. *
  23. * @param columnMap 表字段 map 对象
  24. */
  25. Integer deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
  26. /**
  27. * <p>
  28. * 根据 entity 条件,删除记录
  29. * </p>
  30. *
  31. * @param queryWrapper 实体对象封装操作类(可以为 null)
  32. */
  33. Integer delete(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  34. /**
  35. * <p>
  36. * 删除(根据ID 批量删除)
  37. * </p>
  38. *
  39. * @param idList 主键ID列表(不能为 null 以及 empty)
  40. */
  41. Integer deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
  42. /**
  43. * <p>
  44. * 根据 ID 修改
  45. * </p>
  46. *
  47. * @param entity 实体对象
  48. */
  49. Integer updateById(@Param(Constants.ENTITY) T entity);
  50. /**
  51. * <p>
  52. * 根据 whereEntity 条件,更新记录
  53. * </p>
  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<T> updateWrapper);
  59. /**
  60. * <p>
  61. * 根据 ID 查询
  62. * </p>
  63. *
  64. * @param id 主键ID
  65. */
  66. T selectById(Serializable id);
  67. /**
  68. * <p>
  69. * 查询(根据ID 批量查询)
  70. * </p>
  71. *
  72. * @param idList 主键ID列表(不能为 null 以及 empty)
  73. */
  74. List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
  75. /**
  76. * <p>
  77. * 查询(根据 columnMap 条件)
  78. * </p>
  79. *
  80. * @param columnMap 表字段 map 对象
  81. */
  82. List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
  83. /**
  84. * <p>
  85. * 根据 entity 条件,查询一条记录
  86. * </p>
  87. *
  88. * @param queryWrapper 实体对象
  89. */
  90. T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  91. /**
  92. * <p>
  93. * 根据 Wrapper 条件,查询总记录数
  94. * </p>
  95. *
  96. * @param queryWrapper 实体对象
  97. */
  98. Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  99. /**
  100. * <p>
  101. * 根据 entity 条件,查询全部记录
  102. * </p>
  103. *
  104. * @param queryWrapper 实体对象封装操作类(可以为 null)
  105. */
  106. List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  107. /**
  108. * <p>
  109. * 根据 Wrapper 条件,查询全部记录
  110. * </p>
  111. *
  112. * @param queryWrapper 实体对象封装操作类(可以为 null)
  113. */
  114. List<Map<String, Object>> selectMaps( @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  115. /**
  116. * <p>
  117. * 根据 Wrapper 条件,查询全部记录
  118. * 注意: 只返回第一个字段的值
  119. * </p>
  120. *
  121. * @param queryWrapper 实体对象封装操作类(可以为 null)
  122. */
  123. List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  124. /**
  125. * <p>
  126. * 根据 entity 条件,查询全部记录(并翻页)
  127. * </p>
  128. *
  129. * @param page 分页查询条件(可以为 RowBounds.DEFAULT)
  130. * @param queryWrapper 实体对象封装操作类(可以为 null)
  131. */
  132. IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  133. /**
  134. * <p>
  135. * 根据 Wrapper 条件,查询全部记录(并翻页)
  136. * </p>
  137. *
  138. * @param page 分页查询条件
  139. * @param queryWrapper 实体对象封装操作类
  140. */
  141. IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  142. }

在Mybatis-Plus中提供了SqlMethod类,从这个类中我们可以看到针对BaseMapper类中的每个方法,SqlMethod都提供了一个SQL语句的模板来生成SQL语句,最终还是一个namespace+method对应一条sql语句


   
  1. public enum SqlMethod { /**
  2. * 插入
  3. */
  4. INSERT_ONE( "insert", "插入一条数据(选择字段插入)", "<script>INSERT INTO %s %s VALUES %s</script>"),
  5. /**
  6. * 删除
  7. */
  8. DELETE_BY_ID( "deleteById", "根据ID 删除一条数据", "<script>DELETE FROM %s WHERE %s=#{%s}</script>"),
  9. DELETE_BY_MAP( "deleteByMap", "根据columnMap 条件删除记录", "<script>DELETE FROM %s %s</script>"),
  10. DELETE( "delete", "根据 entity 条件删除记录", "<script>DELETE FROM %s %s</script>"),
  11. DELETE_BATCH_BY_IDS( "deleteBatchIds", "根据ID集合,批量删除数据", "<script>DELETE FROM %s WHERE %s IN (%s)</script>"),
  12. /**
  13. * 逻辑删除
  14. */
  15. LOGIC_DELETE_BY_ID( "deleteById", "根据ID 逻辑删除一条数据", "<script>UPDATE %s %s WHERE %s=#{%s} %s</script>"),
  16. LOGIC_DELETE_BY_MAP( "deleteByMap", "根据columnMap 条件逻辑删除记录", "<script>UPDATE %s %s %s</script>"),
  17. LOGIC_DELETE( "delete", "根据 entity 条件逻辑删除记录", "<script>UPDATE %s %s %s</script>"),
  18. LOGIC_DELETE_BATCH_BY_IDS( "deleteBatchIds", "根据ID集合,批量逻辑删除数据", "<script>UPDATE %s %s WHERE %s IN (%s) %s</script>"),
  19. /**
  20. * 修改
  21. */
  22. UPDATE_BY_ID( "updateById", "根据ID 选择修改数据", "<script>UPDATE %s %s WHERE %s=#{%s} %s</script>"),
  23. UPDATE( "update", "根据 whereEntity 条件,更新记录", "<script>UPDATE %s %s %s</script>"),
  24. /**
  25. * 逻辑删除 -> 修改
  26. */
  27. LOGIC_UPDATE_BY_ID( "updateById", "根据ID 修改数据", "<script>UPDATE %s %s WHERE %s=#{%s} %s</script>"),
  28. LOGIC_UPDATE_ALL_COLUMN_BY_ID( "updateAllColumnById", "根据ID 选择修改数据", "<script>UPDATE %s %s WHERE %s=#{%s} %s</script>"),
  29. /**
  30. * 查询
  31. */
  32. SELECT_BY_ID( "selectById", "根据ID 查询一条数据", "SELECT %s FROM %s WHERE %s=#{%s}"),
  33. SELECT_BY_MAP( "selectByMap", "根据columnMap 查询一条数据", "<script>SELECT %s FROM %s %s</script>"),
  34. SELECT_BATCH_BY_IDS( "selectBatchIds", "根据ID集合,批量查询数据", "<script>SELECT %s FROM %s WHERE %s IN (%s)</script>"),
  35. SELECT_ONE( "selectOne", "查询满足条件一条数据", "<script>SELECT %s FROM %s %s</script>"),
  36. SELECT_COUNT( "selectCount", "查询满足条件总记录数", "<script>SELECT COUNT(1) FROM %s %s</script>"),
  37. SELECT_LIST( "selectList", "查询满足条件所有数据", "<script>SELECT %s FROM %s %s</script>"),
  38. SELECT_PAGE( "selectPage", "查询满足条件所有数据(并翻页)", "<script>SELECT %s FROM %s %s</script>"),
  39. SELECT_MAPS( "selectMaps", "查询满足条件所有数据", "<script>SELECT %s FROM %s %s</script>"),
  40. SELECT_MAPS_PAGE( "selectMapsPage", "查询满足条件所有数据(并翻页)", "<script>SELECT %s FROM %s %s</script>"),
  41. SELECT_OBJS( "selectObjs", "查询满足条件所有数据", "<script>SELECT %s FROM %s %s</script>"),
  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集合,批量查询数据", "<script>SELECT %s FROM %s WHERE %s IN (%s) %s</script>");
  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. }

 

标签:queryWrapper,--,BaseMapper,param,查询,plus,Mybatis,ID,SELECT
来源: https://blog.csdn.net/Linwang2020/article/details/117392418