package com.poyee.base.mapper.provider; import com.poyee.base.dto.BaseDto; import com.poyee.base.dto.BaseReq; import com.poyee.base.dto.Page; import com.poyee.base.mapper.provider.domain.MPage; import com.poyee.util.ObjectUtil; import org.apache.ibatis.annotations.*; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * @param * @param */ public interface IBaseProvider { @SelectProvider(type = FinalProviderSql.class, method = "leftJoinWrapper") List> selectListMap(@Param("req") T req, @Param("clazz") Class clazz); @SelectProvider(type = FinalProviderSql.class, method = "leftJoinWrapper") List> selectListMapByReq(@Param("req") T req, @Param("clazz") Class clazz); @SelectProvider(type = FinalProviderSql.class, method = "pageCountSql") long pageCount(String sql); @SelectProvider(type = FinalProviderSql.class, method = "pageSql") List> page(String sql); @SelectProvider(type = FinalProviderSql.class, method = "selectOne") Map selectOneMap(@Param("req") T req, @Param("clazz") Class clazz); @SelectProvider(type = FinalProviderSql.class, method = "selectById") Map selectByIdMap(@Param("id") Serializable id, @Param("clazz") Class clazz); @SelectProvider(type = FinalProviderSql.class, method = "selectSum") Map selectSumMap(@Param("req") T req, @Param("clazz") Class clazz); @InsertProvider(type = FinalProviderSql.class, method = "save") @Options(useGeneratedKeys = true, keyProperty = "id") // @SelectKey(statement = "select max(id) from promotion_share_info", keyProperty = "id", before = false, resultType = Long.class) int save(T req); @UpdateProvider(type = FinalProviderSql.class, method = "update") int update(T req); /** * @param id * @return */ default R selectByPrimaryKey(Serializable id, Class clazz) { Map resultMaps = selectByIdMap(id, clazz); if (resultMaps != null && !resultMaps.isEmpty()) { return ObjectUtil.mapToBeanProvider(resultMaps, clazz); } try { return clazz.newInstance(); } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } return null; } /** * @param clazz * @param req * @return */ default R selectOne(T req, Class clazz) { Map resultMaps = selectOneMap(req, clazz); if (resultMaps != null && !resultMaps.isEmpty()) { return ObjectUtil.mapToBeanProvider(resultMaps, clazz); } try { return clazz.newInstance(); } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } return null; } /** * 求和 * @param req * @param clazz * @return */ default R sum(T req, Class clazz){ Map resultMaps = selectSumMap(req, clazz); if (resultMaps != null && !resultMaps.isEmpty()) { return ObjectUtil.mapToBeanProvider(resultMaps, clazz); } try { return clazz.newInstance(); } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } return null; } /** * @param req * @param clazz * @return */ default List selectList(T req, Class clazz) { List> resultMaps = selectListMap(req, clazz); if (resultMaps != null && resultMaps.size() > 0) { return ObjectUtil.mapToListProvider(resultMaps, clazz); } return new ArrayList<>(); } /** * @param req * @param clazz * @return */ default Page selectPage(T req, Class clazz) { MPage mPage = new FinalProviderSql().mPage(req, clazz); long total = pageCount(mPage.getCountSql()); List records = null; if (total > 0) { List> pageMaps = page(mPage.getPageSql()); records = ObjectUtil.mapToListProvider(pageMaps, clazz); } return new Page<>(total, records).setPage((long) req.getPageNo()); } /** * 拼接sql */ class FinalProviderSql extends BaseProvider { /** * @param sql * @return */ public String pageCountSql(String sql) { return sql; } /** * @param sql * @return */ public String pageSql(String sql) { return sql; } } }