Sfoglia il codice sorgente

继承Model类的实体中,现在无需重写pkVal()方法

Caratacus 6 anni fa
parent
commit
c6dfb6b8e1

+ 7 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/ReflectionKit.java

@@ -47,7 +47,10 @@ import org.apache.ibatis.logging.LogFactory;
 public class ReflectionKit {
 
     private static final Log logger = LogFactory.getLog(ReflectionKit.class);
-    private static final Map<Class, List<Field>> fieldMapCache = new ConcurrentHashMap<>();
+    /**
+     * class field cache
+     */
+    private static final Map<Class, List<Field>> classFieldCache = new ConcurrentHashMap<>();
 
     /**
      * <p>
@@ -180,11 +183,11 @@ public class ReflectionKit {
         if (null == clazz) {
             return null;
         }
-        List<Field> fields = fieldMapCache.get(clazz);
+        List<Field> fields = classFieldCache.get(clazz);
         if (CollectionUtils.isEmpty(fields)) {
-            synchronized (fieldMapCache) {
+            synchronized (classFieldCache) {
                 fields = doGetFieldList(clazz);
-                fieldMapCache.put(clazz, fields);
+                classFieldCache.put(clazz, fields);
             }
         }
         return fields;

+ 32 - 26
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/activerecord/Model.java

@@ -15,23 +15,26 @@
  */
 package com.baomidou.mybatisplus.extension.activerecord;
 
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.ibatis.session.SqlSession;
+import org.mybatis.spring.SqlSessionUtils;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.enums.SqlMethod;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Assert;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
+import com.baomidou.mybatisplus.core.toolkit.ReflectionKit;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.TableInfoHelper;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlHelper;
 import com.baomidou.mybatisplus.extension.toolkit.SqlRunner;
-import org.apache.ibatis.session.SqlSession;
-import org.mybatis.spring.SqlSessionUtils;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 
 /**
  * <p>
@@ -56,10 +59,10 @@ public abstract class Model<T extends Model> implements Serializable {
         SqlSession sqlSession = sqlSession();
         try {
             return SqlHelper.retBool(sqlSession.insert(sqlStatement(SqlMethod.INSERT_ONE), this));
-        }finally {
+        } finally {
             closeSqlSession(sqlSession);
         }
-        
+
     }
 
     /**
@@ -93,7 +96,7 @@ public abstract class Model<T extends Model> implements Serializable {
         SqlSession sqlSession = sqlSession();
         try {
             return SqlHelper.delBool(sqlSession.delete(sqlStatement(SqlMethod.DELETE_BY_ID), id));
-        }finally {
+        } finally {
             closeSqlSession(sqlSession);
         }
     }
@@ -126,10 +129,10 @@ public abstract class Model<T extends Model> implements Serializable {
         SqlSession sqlSession = sqlSession();
         try {
             return SqlHelper.delBool(sqlSession.delete(sqlStatement(SqlMethod.DELETE), map));
-        }finally {
+        } finally {
             closeSqlSession(sqlSession);
         }
-        
+
     }
 
     /**
@@ -146,10 +149,10 @@ public abstract class Model<T extends Model> implements Serializable {
         SqlSession sqlSession = sqlSession();
         try {
             return SqlHelper.retBool(sqlSession.update(sqlStatement(SqlMethod.UPDATE_BY_ID), map));
-        }finally {
+        } finally {
             closeSqlSession(sqlSession);
         }
-        
+
     }
 
     /**
@@ -169,7 +172,7 @@ public abstract class Model<T extends Model> implements Serializable {
         SqlSession sqlSession = sqlSession();
         try {
             return SqlHelper.retBool(sqlSession.update(sqlStatement(SqlMethod.UPDATE), map));
-        }finally {
+        } finally {
             closeSqlSession(sqlSession);
         }
     }
@@ -185,10 +188,10 @@ public abstract class Model<T extends Model> implements Serializable {
         SqlSession sqlSession = sqlSession();
         try {
             return sqlSession.selectList(sqlStatement(SqlMethod.SELECT_LIST));
-        }finally {
+        } finally {
             closeSqlSession(sqlSession);
         }
-        
+
     }
 
     /**
@@ -203,10 +206,10 @@ public abstract class Model<T extends Model> implements Serializable {
         SqlSession sqlSession = sqlSession();
         try {
             return sqlSession.selectOne(sqlStatement(SqlMethod.SELECT_BY_ID), id);
-        }finally {
+        } finally {
             closeSqlSession(sqlSession);
         }
-        
+
     }
 
     /**
@@ -236,7 +239,7 @@ public abstract class Model<T extends Model> implements Serializable {
         SqlSession sqlSession = sqlSession();
         try {
             return sqlSession.selectList(sqlStatement(SqlMethod.SELECT_LIST), map);
-        }finally {
+        } finally {
             closeSqlSession(sqlSession);
         }
     }
@@ -269,7 +272,7 @@ public abstract class Model<T extends Model> implements Serializable {
         SqlSession sqlSession = sqlSession();
         try {
             page.setRecords(sqlSession.selectList(sqlStatement(SqlMethod.SELECT_PAGE), map));
-        }finally {
+        } finally {
             closeSqlSession(sqlSession);
         }
         return page;
@@ -289,7 +292,7 @@ public abstract class Model<T extends Model> implements Serializable {
         SqlSession sqlSession = sqlSession();
         try {
             return SqlHelper.retCount(sqlSession.<Integer>selectOne(sqlStatement(SqlMethod.SELECT_COUNT), map));
-        }finally {
+        } finally {
             closeSqlSession(sqlSession);
         }
     }
@@ -335,13 +338,16 @@ public abstract class Model<T extends Model> implements Serializable {
     /**
      * 主键值
      */
-    protected abstract Serializable pkVal();
-    
+    protected Serializable pkVal() {
+        return (Serializable) ReflectionKit.getMethodValue(this, TableInfoHelper.getTableInfo(getClass()).getKeyProperty());
+    }
+
     /**
      * 释放sqlSession
+     *
      * @param sqlSession session
      */
-    protected void closeSqlSession(SqlSession sqlSession){
+    protected void closeSqlSession(SqlSession sqlSession) {
         SqlSessionUtils.closeSqlSession(sqlSession, GlobalConfigUtils.currentSessionFactory(getClass()));
     }
 }

+ 3 - 10
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/base/entity/CommonData.java

@@ -1,17 +1,17 @@
 package com.baomidou.mybatisplus.test.base.entity;
 
+import java.time.LocalDateTime;
+
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.Version;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.baomidou.mybatisplus.test.base.enums.TestEnum;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
 /**
  * 包含功能:
  * 1.自动填充        验证无误
@@ -45,11 +45,4 @@ public class CommonData extends Model<CommonData> {
      */
 //    private Long tenantId;
 
-    /**
-     * 主键值
-     */
-    @Override
-    protected Serializable pkVal() {
-        return id;
-    }
 }

+ 0 - 6
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/entity/persistent/H2Student.java

@@ -1,7 +1,5 @@
 package com.baomidou.mybatisplus.test.h2.entity.persistent;
 
-import java.io.Serializable;
-
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -44,8 +42,4 @@ public class H2Student extends Model<H2Student> {
 
     private Integer age;
 
-    @Override
-    protected Serializable pkVal() {
-        return this.id;
-    }
 }