Sfoglia il codice sorgente

!265 SqlHelper#getMapper 应该是返回泛型 SqlHelper#execute 增加mapper泛型,支持传入baseMapper子类
Merge pull request !265 from 马汇博/3.0

青苗 2 anni fa
parent
commit
079c0d356e

+ 6 - 6
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/SqlHelper.java

@@ -277,15 +277,15 @@ public final class SqlHelper {
      *
      * @param entityClass 实体
      * @param <T>         实体类型
-     * @param <Mapper>    Mapper类型
+     * @param <M>         Mapper类型
      * @return Mapper
      */
     @SuppressWarnings("unchecked")
-    public static <T,Mapper extends BaseMapper<T>> BaseMapper<T> getMapper(Class<T> entityClass, SqlSession sqlSession) {
+    public static <T,M extends BaseMapper<T>> M getMapper(Class<T> entityClass, SqlSession sqlSession) {
         Assert.notNull(entityClass, "entityClass can't be null!");
         TableInfo tableInfo = Optional.ofNullable(TableInfoHelper.getTableInfo(entityClass)).orElseThrow(() -> ExceptionUtils.mpe("Can not find TableInfo from Class: \"%s\".", entityClass.getName()));
         Class<?> mapperClass = ClassUtils.toClassConfident(tableInfo.getCurrentNamespace());
-        return (Mapper) tableInfo.getConfiguration().getMapper(mapperClass, sqlSession);
+        return (M) tableInfo.getConfiguration().getMapper(mapperClass, sqlSession);
     }
 
     /**
@@ -295,13 +295,13 @@ public final class SqlHelper {
      * @param sFunction   lambda操作,例如 {@code m->m.selectList(wrapper)}
      * @param <T>         实体类的类型
      * @param <R>         返回值类型
+     * @param <M>         Mapper类型
      * @return 返回lambda执行结果
      */
-    public static <T, R> R execute(Class<T> entityClass, SFunction<BaseMapper<T>, R> sFunction) {
+    public static <T, R,M extends BaseMapper<T>> R execute(Class<T> entityClass, SFunction<M, R> sFunction) {
         SqlSession sqlSession = SqlHelper.sqlSession(entityClass);
         try {
-            BaseMapper<T> baseMapper = SqlHelper.getMapper(entityClass, sqlSession);
-            return sFunction.apply(baseMapper);
+            return sFunction.apply(SqlHelper.getMapper(entityClass, sqlSession));
         } finally {
             SqlSessionUtils.closeSqlSession(sqlSession, GlobalConfigUtils.currentSessionFactory(entityClass));
         }