IBaseProvider.java 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. package com.poyee.base.mapper.provider;
  2. import com.poyee.base.dto.BaseDto;
  3. import com.poyee.base.dto.BaseReq;
  4. import com.poyee.base.dto.Page;
  5. import com.poyee.base.mapper.provider.domain.MPage;
  6. import com.poyee.util.ObjectUtil;
  7. import org.apache.ibatis.annotations.*;
  8. import java.io.Serializable;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. import java.util.Map;
  12. /**
  13. * @param <T>
  14. * @param <R>
  15. */
  16. public interface IBaseProvider<T extends BaseReq, R extends BaseDto> {
  17. @SelectProvider(type = FinalProviderSql.class, method = "leftJoinWrapper")
  18. List<Map<String, Object>> selectListMap(@Param("req") T req, @Param("clazz") Class<R> clazz);
  19. @SelectProvider(type = FinalProviderSql.class, method = "leftJoinWrapper")
  20. List<Map<String, Object>> selectListMapByReq(@Param("req") T req, @Param("clazz") Class<T> clazz);
  21. @SelectProvider(type = FinalProviderSql.class, method = "pageCountSql")
  22. long pageCount(String sql);
  23. @SelectProvider(type = FinalProviderSql.class, method = "pageSql")
  24. List<Map<String, Object>> page(String sql);
  25. @SelectProvider(type = FinalProviderSql.class, method = "selectOne")
  26. Map<String, Object> selectOneMap(@Param("req") T req, @Param("clazz") Class<R> clazz);
  27. @SelectProvider(type = FinalProviderSql.class, method = "selectById")
  28. Map<String, Object> selectByIdMap(@Param("id") Serializable id, @Param("clazz") Class<R> clazz);
  29. @SelectProvider(type = FinalProviderSql.class, method = "selectSum")
  30. Map<String, Object> selectSumMap(@Param("req") T req, @Param("clazz") Class<R> clazz);
  31. @InsertProvider(type = FinalProviderSql.class, method = "save")
  32. @Options(useGeneratedKeys = true, keyProperty = "id")
  33. // @SelectKey(statement = "select max(id) from promotion_share_info", keyProperty = "id", before = false, resultType = Long.class)
  34. int save(T req);
  35. @UpdateProvider(type = FinalProviderSql.class, method = "update")
  36. int update(T req);
  37. /**
  38. * @param id
  39. * @return
  40. */
  41. default R selectByPrimaryKey(Serializable id, Class<R> clazz) {
  42. Map<String, Object> resultMaps = selectByIdMap(id, clazz);
  43. if (resultMaps != null && !resultMaps.isEmpty()) {
  44. return ObjectUtil.mapToBeanProvider(resultMaps, clazz);
  45. }
  46. try {
  47. return clazz.newInstance();
  48. } catch (InstantiationException | IllegalAccessException e) {
  49. e.printStackTrace();
  50. }
  51. return null;
  52. }
  53. /**
  54. * @param clazz
  55. * @param req
  56. * @return
  57. */
  58. default R selectOne(T req, Class<R> clazz) {
  59. Map<String, Object> resultMaps = selectOneMap(req, clazz);
  60. if (resultMaps != null && !resultMaps.isEmpty()) {
  61. return ObjectUtil.mapToBeanProvider(resultMaps, clazz);
  62. }
  63. try {
  64. return clazz.newInstance();
  65. } catch (InstantiationException | IllegalAccessException e) {
  66. e.printStackTrace();
  67. }
  68. return null;
  69. }
  70. /**
  71. * 求和
  72. * @param req
  73. * @param clazz
  74. * @return
  75. */
  76. default R sum(T req, Class<R> clazz){
  77. Map<String, Object> resultMaps = selectSumMap(req, clazz);
  78. if (resultMaps != null && !resultMaps.isEmpty()) {
  79. return ObjectUtil.mapToBeanProvider(resultMaps, clazz);
  80. }
  81. try {
  82. return clazz.newInstance();
  83. } catch (InstantiationException | IllegalAccessException e) {
  84. e.printStackTrace();
  85. }
  86. return null;
  87. }
  88. /**
  89. * @param req
  90. * @param clazz
  91. * @return
  92. */
  93. default List<R> selectList(T req, Class<R> clazz) {
  94. List<Map<String, Object>> resultMaps = selectListMap(req, clazz);
  95. if (resultMaps != null && resultMaps.size() > 0) {
  96. return ObjectUtil.mapToListProvider(resultMaps, clazz);
  97. }
  98. return new ArrayList<>();
  99. }
  100. /**
  101. * @param req
  102. * @param clazz
  103. * @return
  104. */
  105. default Page<R> selectPage(T req, Class<R> clazz) {
  106. MPage<R> mPage = new FinalProviderSql().mPage(req, clazz);
  107. long total = pageCount(mPage.getCountSql());
  108. List<R> records = null;
  109. if (total > 0) {
  110. List<Map<String, Object>> pageMaps = page(mPage.getPageSql());
  111. records = ObjectUtil.mapToListProvider(pageMaps, clazz);
  112. }
  113. return new Page<>(total, records).setPage((long) req.getPageNo());
  114. }
  115. /**
  116. * 拼接sql
  117. */
  118. class FinalProviderSql extends BaseProvider {
  119. /**
  120. * @param sql
  121. * @return
  122. */
  123. public String pageCountSql(String sql) {
  124. return sql;
  125. }
  126. /**
  127. * @param sql
  128. * @return
  129. */
  130. public String pageSql(String sql) {
  131. return sql;
  132. }
  133. }
  134. }