diff --git a/samples/common/src/main/java/com/supwisdom/leaveschool/common/util/MapBeanUtils.java b/samples/common/src/main/java/com/supwisdom/leaveschool/common/util/MapBeanUtils.java
index e788bac..b536b29 100644
--- a/samples/common/src/main/java/com/supwisdom/leaveschool/common/util/MapBeanUtils.java
+++ b/samples/common/src/main/java/com/supwisdom/leaveschool/common/util/MapBeanUtils.java
@@ -64,9 +64,9 @@
    * @param key
    * @return
    */
-  public static boolean getBoolean(Map<String, Object> mapBean, String key) {
+  public static Boolean getBoolean(Map<String, Object> mapBean, String key) {
 
-    return getBoolean(mapBean, key, false);
+    return getBoolean(mapBean, key, null);
   }
 
   /**
@@ -77,11 +77,11 @@
    * @param defaultValue
    * @return
    */
-  public static boolean getBoolean(Map<String, Object> mapBean, String key, Boolean defaultValue) {
+  public static Boolean getBoolean(Map<String, Object> mapBean, String key, Boolean defaultValue) {
 
     if (containsValue(mapBean, key)) {
       Boolean b = Boolean.valueOf(String.valueOf(mapBean.get(key)));
-      return b == null ? defaultValue : b.booleanValue();
+      return b == null ? defaultValue : b;
     }
 
     return defaultValue;
@@ -94,9 +94,9 @@
    * @param key
    * @return
    */
-  public static int getInteger(Map<String, Object> mapBean, String key) {
+  public static Integer getInteger(Map<String, Object> mapBean, String key) {
 
-    return getInteger(mapBean, key, -1);
+    return getInteger(mapBean, key, null);
   }
 
   /**
@@ -107,11 +107,11 @@
    * @param defaultValue
    * @return
    */
-  public static int getInteger(Map<String, Object> mapBean, String key, Integer defaultValue) {
+  public static Integer getInteger(Map<String, Object> mapBean, String key, Integer defaultValue) {
 
     if (containsValue(mapBean, key)) {
       Integer i = Integer.valueOf(String.valueOf(mapBean.get(key)));
-      return i == null ? defaultValue : i.intValue();
+      return i == null ? defaultValue : i;
     }
 
     return defaultValue;
@@ -124,9 +124,9 @@
    * @param key
    * @return
    */
-  public static long getLong(Map<String, Object> mapBean, String key) {
+  public static Long getLong(Map<String, Object> mapBean, String key) {
 
-    return getLong(mapBean, key, -1L);
+    return getLong(mapBean, key, null);
   }
 
   /**
@@ -137,11 +137,11 @@
    * @param defaultValue
    * @return
    */
-  public static long getLong(Map<String, Object> mapBean, String key, Long defaultValue) {
+  public static Long getLong(Map<String, Object> mapBean, String key, Long defaultValue) {
 
     if (containsValue(mapBean, key)) {
       Long l = Long.valueOf(String.valueOf(mapBean.get(key)));
-      return l == null ? defaultValue : l.longValue();
+      return l == null ? defaultValue : l;
     }
 
     return defaultValue;
