diff --git a/samples/common/pom.xml b/samples/common/pom.xml
new file mode 100644
index 0000000..864192d
--- /dev/null
+++ b/samples/common/pom.xml
@@ -0,0 +1,68 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>com.supwisdom.leaveschool</groupId>
+    <artifactId>samples-parent</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+  </parent>
+
+  <groupId>com.supwisdom.leaveschool</groupId>
+  <artifactId>sample-common</artifactId>
+  <packaging>jar</packaging>
+
+
+  <dependencies>
+
+    <dependency>
+      <groupId>com.supwisdom.infras</groupId>
+      <artifactId>infras-data-jpa</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>commons-collections</groupId>
+      <artifactId>commons-collections</artifactId>
+    </dependency>
+
+    <!-- Test things -->
+    <dependency>
+      <groupId>org.testng</groupId>
+      <artifactId>testng</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-test</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-failsafe-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-javadoc-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-release-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.jacoco</groupId>
+        <artifactId>jacoco-maven-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/samples/common/src/main/java/com/supwisdom/leaveschool/common/domain/ABaseDomain.java b/samples/common/src/main/java/com/supwisdom/leaveschool/common/domain/ABaseDomain.java
new file mode 100644
index 0000000..2c01d9a
--- /dev/null
+++ b/samples/common/src/main/java/com/supwisdom/leaveschool/common/domain/ABaseDomain.java
@@ -0,0 +1,138 @@
+package com.supwisdom.leaveschool.common.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.MappedSuperclass;
+
+import org.hibernate.annotations.GenericGenerator;
+
+@MappedSuperclass
+public abstract class ABaseDomain implements Serializable {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 8023881887762314483L;
+
+  @Id
+  @GeneratedValue(generator = "uuidStrategy")
+  @GenericGenerator(name = "uuidStrategy", strategy = "uuid")
+  //@ApiModelProperty(value = "ID", required = false, example = "")
+  @Column(name = "ID")
+  private String id;
+
+  /**
+   * 获取主键
+   */
+  public String getId() {
+    return id;
+  }
+
+  /**
+   * 设置ID属性,主要用于人工指定键值
+   */
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  //@ApiModelProperty(value = "CompanyID", required = true, example = "1")
+  @Column(name = "COMPANY_ID")
+  private String companyId = null;
+
+  //@ApiModelProperty(value = "是否删除", hidden = true, example = "false")
+  @Column(name = "DELETED")
+  private Boolean deleted = false;
+
+  //@ApiModelProperty(value = "创建人", hidden = true)
+  @Column(name = "ADD_ACCOUNT")
+  private String addAccount = null;
+
+  //@ApiModelProperty(value = "创建时间", hidden = true)
+  @Column(name = "ADD_TIME")
+  private Date addTime = null;
+
+  //@ApiModelProperty(value = "修改人", hidden = true)
+  @Column(name = "EDIT_ACCOUNT")
+  private String editAccount = null;
+
+  //@ApiModelProperty(value = "修改时间", hidden = true)
+  @Column(name = "EDIT_TIME")
+  private Date editTime = null;
+
+  //@ApiModelProperty(value = "删除人", hidden = true)
+  @Column(name = "DELETE_ACCOUNT")
+  private String deleteAccount = null;
+
+  //@ApiModelProperty(value = "删除时间", hidden = true)
+  @Column(name = "DELETE_TIME")
+  private Date deleteTime = null;
+
+  public String getCompanyId() {
+    return companyId;
+  }
+
+  public void setCompanyId(String companyId) {
+    this.companyId = companyId;
+  }
+
+  public Boolean isDeleted() {
+    return deleted;
+  }
+
+  public void setDeleted(Boolean deleted) {
+    this.deleted = deleted;
+  }
+
+  public String getAddAccount() {
+    return addAccount;
+  }
+
+  public void setAddAccount(String addAccount) {
+    this.addAccount = addAccount;
+  }
+
+  public Date getAddTime() {
+    return addTime;
+  }
+
+  public void setAddTime(Date addTime) {
+    this.addTime = addTime;
+  }
+
+  public String getEditAccount() {
+    return editAccount;
+  }
+
+  public void setEditAccount(String editAccount) {
+    this.editAccount = editAccount;
+  }
+
+  public Date getEditTime() {
+    return editTime;
+  }
+
+  public void setEditTime(Date editTime) {
+    this.editTime = editTime;
+  }
+
+  public String getDeleteAccount() {
+    return deleteAccount;
+  }
+
+  public void setDeleteAccount(String deleteAccount) {
+    this.deleteAccount = deleteAccount;
+  }
+
+  public Date getDeleteTime() {
+    return deleteTime;
+  }
+
+  public void setDeleteTime(Date deleteTime) {
+    this.deleteTime = deleteTime;
+  }
+
+}
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/model/PagerRequestModel.java b/samples/common/src/main/java/com/supwisdom/leaveschool/common/model/PagerRequestModel.java
similarity index 93%
rename from samples/user/src/main/java/com/supwisdom/leaveschool/user/model/PagerRequestModel.java
rename to samples/common/src/main/java/com/supwisdom/leaveschool/common/model/PagerRequestModel.java
index c31ab0b..75309f1 100644
--- a/samples/user/src/main/java/com/supwisdom/leaveschool/user/model/PagerRequestModel.java
+++ b/samples/common/src/main/java/com/supwisdom/leaveschool/common/model/PagerRequestModel.java
@@ -1,4 +1,4 @@
-package com.supwisdom.leaveschool.user.model;
+package com.supwisdom.leaveschool.common.model;
 
 import java.io.Serializable;
 import java.util.Map;
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/model/PagerResponseModel.java b/samples/common/src/main/java/com/supwisdom/leaveschool/common/model/PagerResponseModel.java
similarity index 96%
rename from samples/user/src/main/java/com/supwisdom/leaveschool/user/model/PagerResponseModel.java
rename to samples/common/src/main/java/com/supwisdom/leaveschool/common/model/PagerResponseModel.java
index 3cab2b7..1b7bd7b 100644
--- a/samples/user/src/main/java/com/supwisdom/leaveschool/user/model/PagerResponseModel.java
+++ b/samples/common/src/main/java/com/supwisdom/leaveschool/common/model/PagerResponseModel.java
@@ -1,4 +1,4 @@
-package com.supwisdom.leaveschool.user.model;
+package com.supwisdom.leaveschool.common.model;
 
 import java.io.Serializable;
 import java.util.Collection;
diff --git a/samples/common/src/main/java/com/supwisdom/leaveschool/common/repository/ABaseJpaRepositoryImpl.java b/samples/common/src/main/java/com/supwisdom/leaveschool/common/repository/ABaseJpaRepositoryImpl.java
new file mode 100644
index 0000000..a245196
--- /dev/null
+++ b/samples/common/src/main/java/com/supwisdom/leaveschool/common/repository/ABaseJpaRepositoryImpl.java
@@ -0,0 +1,84 @@
+package com.supwisdom.leaveschool.common.repository;
+
+import java.util.Calendar;
+import java.util.Map;
+import java.util.Optional;
+
+import javax.persistence.EntityManager;
+import javax.transaction.Transactional;
+
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.jpa.repository.support.JpaEntityInformation;
+import org.springframework.data.jpa.repository.support.SimpleJpaRepository;
+import org.springframework.data.repository.NoRepositoryBean;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+
+@Transactional
+@NoRepositoryBean
+public class ABaseJpaRepositoryImpl<T extends ABaseDomain> extends SimpleJpaRepository<T, String> implements BaseJpaRepository<T> {
+
+  @SuppressWarnings("unused")
+  private final EntityManager em;
+
+  public ABaseJpaRepositoryImpl(Class<T> domainClass, EntityManager em) {
+    super(domainClass, em);
+    this.em = em;
+  }
+
+  public ABaseJpaRepositoryImpl(JpaEntityInformation<T, String> information, EntityManager em) {
+    super(information, em);
+    this.em = em;
+  }
+  
+  public Page<T> selectPageList(int pageIndex, int pageSize, Map<String, Object> mapBean) {
+
+    PageRequest pageRequest = PageRequest.of(pageIndex, pageSize);
+
+    Page<T> page = this.findAll(pageRequest);
+
+    return page;
+  }
+
+  public T selectById(String id) {
+
+    try {
+      Optional<T> entity = this.findById(id);
+
+      return entity.get();
+    } catch (RuntimeException e) {
+      System.out.println("RuntimeException:" + e.getMessage());
+    } catch (Exception e) {
+      System.out.println("Exception:" + e.getMessage());
+    }
+
+    return null;
+  }
+
+  public T insert(T entity) {
+
+    if (entity.getCompanyId() == null || entity.getCompanyId().isEmpty()) {
+      entity.setCompanyId("1");
+    }
+
+    entity.setDeleted(false);
+    //entity.setAddAccount(AuthUtil.getRemoteUser()); // FIXME: setAddAccount
+    entity.setAddTime(Calendar.getInstance().getTime());
+
+    T e = this.save(entity);
+
+    return e;
+  }
+
+  public T update(T entity) {
+
+    //entity.setEditAccount(AuthUtil.getRemoteUser()); // FIXME: setEditAccount
+    entity.setEditTime(Calendar.getInstance().getTime());
+
+    T e = this.save(entity);
+
+    return e;
+  }
+
+}
diff --git a/samples/common/src/main/java/com/supwisdom/leaveschool/common/repository/BaseJpaRepository.java b/samples/common/src/main/java/com/supwisdom/leaveschool/common/repository/BaseJpaRepository.java
new file mode 100644
index 0000000..e1e0531
--- /dev/null
+++ b/samples/common/src/main/java/com/supwisdom/leaveschool/common/repository/BaseJpaRepository.java
@@ -0,0 +1,66 @@
+package com.supwisdom.leaveschool.common.repository;
+
+import java.util.Calendar;
+import java.util.Map;
+import java.util.Optional;
+
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.repository.NoRepositoryBean;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+
+@NoRepositoryBean
+public interface BaseJpaRepository<T extends ABaseDomain> extends JpaRepository<T, String> {
+  
+  public default Page<T> selectPageList(int pageIndex, int pageSize, Map<String, Object> mapBean) {
+
+    PageRequest pageRequest = PageRequest.of(pageIndex, pageSize);
+
+    Page<T> page = this.findAll(pageRequest);
+
+    return page;
+  }
+  
+  public default T selectById(String id) {
+
+    try {
+      Optional<T> entity = this.findById(id);
+
+      return entity.get();
+    } catch (RuntimeException e) {
+      System.out.println("RuntimeException:" + e.getMessage());
+    } catch (Exception e) {
+      System.out.println("Exception:" + e.getMessage());
+    }
+
+    return null;
+  }
+  
+  public default T insert(T entity) {
+
+    if (entity.getCompanyId() == null || entity.getCompanyId().isEmpty()) {
+      entity.setCompanyId("1");
+    }
+
+    entity.setDeleted(false);
+    //entity.setAddAccount(AuthUtil.getRemoteUser()); // FIXME: setAddAccount
+    entity.setAddTime(Calendar.getInstance().getTime());
+
+    T e = this.save(entity);
+
+    return e;
+  }
+  
+  public default T update(T entity) {
+
+    //entity.setEditAccount(AuthUtil.getRemoteUser()); // FIXME: setEditAccount
+    entity.setEditTime(Calendar.getInstance().getTime());
+
+    T e = this.save(entity);
+
+    return e;
+  }
+
+}
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/util/DomainUtils.java b/samples/common/src/main/java/com/supwisdom/leaveschool/common/util/DomainUtils.java
similarity index 98%
rename from samples/user/src/main/java/com/supwisdom/leaveschool/user/util/DomainUtils.java
rename to samples/common/src/main/java/com/supwisdom/leaveschool/common/util/DomainUtils.java
index 48e9047..f02d7e5 100644
--- a/samples/user/src/main/java/com/supwisdom/leaveschool/user/util/DomainUtils.java
+++ b/samples/common/src/main/java/com/supwisdom/leaveschool/common/util/DomainUtils.java
@@ -1,4 +1,4 @@
-package com.supwisdom.leaveschool.user.util;
+package com.supwisdom.leaveschool.common.util;
 
 import java.lang.reflect.Field;
 import java.util.Date;
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/util/ReflectUtils.java b/samples/common/src/main/java/com/supwisdom/leaveschool/common/util/ReflectUtils.java
similarity index 98%
rename from samples/user/src/main/java/com/supwisdom/leaveschool/user/util/ReflectUtils.java
rename to samples/common/src/main/java/com/supwisdom/leaveschool/common/util/ReflectUtils.java
index 3bec43d..53cb150 100644
--- a/samples/user/src/main/java/com/supwisdom/leaveschool/user/util/ReflectUtils.java
+++ b/samples/common/src/main/java/com/supwisdom/leaveschool/common/util/ReflectUtils.java
@@ -1,4 +1,4 @@
-package com.supwisdom.leaveschool.user.util;
+package com.supwisdom.leaveschool.common.util;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/util/Test.java b/samples/common/src/main/java/com/supwisdom/leaveschool/common/util/Test.java
similarity index 92%
rename from samples/user/src/main/java/com/supwisdom/leaveschool/user/util/Test.java
rename to samples/common/src/main/java/com/supwisdom/leaveschool/common/util/Test.java
index ea7dced..a82d78c 100644
--- a/samples/user/src/main/java/com/supwisdom/leaveschool/user/util/Test.java
+++ b/samples/common/src/main/java/com/supwisdom/leaveschool/common/util/Test.java
@@ -1,10 +1,10 @@
-package com.supwisdom.leaveschool.user.util;
+package com.supwisdom.leaveschool.common.util;
 
 import java.util.Date;
 
 import javax.persistence.Column;
 
-import com.supwisdom.infras.data.jpa.domain.ABaseDomain;
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
 
 public class Test extends ABaseDomain {
 
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/util/Test2.java b/samples/common/src/main/java/com/supwisdom/leaveschool/common/util/Test2.java
similarity index 92%
rename from samples/user/src/main/java/com/supwisdom/leaveschool/user/util/Test2.java
rename to samples/common/src/main/java/com/supwisdom/leaveschool/common/util/Test2.java
index 67917d8..c093d0f 100644
--- a/samples/user/src/main/java/com/supwisdom/leaveschool/user/util/Test2.java
+++ b/samples/common/src/main/java/com/supwisdom/leaveschool/common/util/Test2.java
@@ -1,10 +1,10 @@
-package com.supwisdom.leaveschool.user.util;
+package com.supwisdom.leaveschool.common.util;
 
 import java.util.Date;
 
 import javax.persistence.Column;
 
-import com.supwisdom.infras.data.jpa.domain.ABaseDomain;
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
 
 public class Test2 extends ABaseDomain {
 
diff --git a/samples/pom.xml b/samples/pom.xml
index 8a6c81a..d046338 100644
--- a/samples/pom.xml
+++ b/samples/pom.xml
@@ -48,6 +48,12 @@
       </dependency>
 
       <dependency>
+        <groupId>com.supwisdom.leaveschool</groupId>
+        <artifactId>sample-common</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+
+      <dependency>
         <groupId>commons-collections</groupId>
         <artifactId>commons-collections</artifactId>
         <version>3.2.2</version>
@@ -68,6 +74,8 @@
     <module>bar</module>
     <module>security</module>
 
+    <module>common</module>
+
     <module>auth</module>
     <module>user</module>
     <module>gateway</module>
diff --git a/samples/user/pom.xml b/samples/user/pom.xml
index e7d6492..e6c0032 100644
--- a/samples/user/pom.xml
+++ b/samples/user/pom.xml
@@ -15,6 +15,11 @@
   <dependencies>
 
     <dependency>
+      <groupId>com.supwisdom.leaveschool</groupId>
+      <artifactId>sample-common</artifactId>
+    </dependency>
+
+    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter</artifactId>
     </dependency>
@@ -29,11 +34,6 @@
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
-
-    <dependency>
-      <groupId>commons-collections</groupId>
-      <artifactId>commons-collections</artifactId>
-    </dependency>
     
 
     <dependency>
@@ -64,11 +64,6 @@
      -->
 
     <dependency>
-      <groupId>com.supwisdom.infras</groupId>
-      <artifactId>infras-data-jpa</artifactId>
-    </dependency>
-
-    <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
     </dependency>
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/controller/api/admin/Api1AdminUserController.java b/samples/user/src/main/java/com/supwisdom/leaveschool/user/controller/api/admin/Api1AdminUserController.java
index 36ab166..a635ad9 100644
--- a/samples/user/src/main/java/com/supwisdom/leaveschool/user/controller/api/admin/Api1AdminUserController.java
+++ b/samples/user/src/main/java/com/supwisdom/leaveschool/user/controller/api/admin/Api1AdminUserController.java
@@ -19,11 +19,11 @@
 import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.supwisdom.leaveschool.common.model.PagerRequestModel;
+import com.supwisdom.leaveschool.common.model.PagerResponseModel;
+import com.supwisdom.leaveschool.common.util.DomainUtils;
 import com.supwisdom.leaveschool.user.domain.User;
-import com.supwisdom.leaveschool.user.model.PagerRequestModel;
-import com.supwisdom.leaveschool.user.model.PagerResponseModel;
 import com.supwisdom.leaveschool.user.repository.UserRepository;
-import com.supwisdom.leaveschool.user.util.DomainUtils;
 
 @RestController
 @RequestMapping("/api/v1/admin/users")
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/domain/User.java b/samples/user/src/main/java/com/supwisdom/leaveschool/user/domain/User.java
index 8af51c9..9a2c0d5 100644
--- a/samples/user/src/main/java/com/supwisdom/leaveschool/user/domain/User.java
+++ b/samples/user/src/main/java/com/supwisdom/leaveschool/user/domain/User.java
@@ -4,7 +4,7 @@
 import javax.persistence.Entity;
 import javax.persistence.Table;
 
-import com.supwisdom.infras.data.jpa.domain.ABaseDomain;
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
 
 @Entity
 @Table(name = "TB_U_USER")
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/UserRepository.java b/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/UserRepository.java
index 097b648..ff1fd0b 100644
--- a/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/UserRepository.java
+++ b/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/UserRepository.java
@@ -1,8 +1,6 @@
 package com.supwisdom.leaveschool.user.repository;
 
-import java.util.Calendar;
 import java.util.Map;
-import java.util.Optional;
 
 import org.springframework.data.domain.Example;
 import org.springframework.data.domain.ExampleMatcher;
@@ -10,7 +8,7 @@
 import org.springframework.data.domain.PageRequest;
 import org.springframework.stereotype.Repository;
 
-import com.supwisdom.infras.data.jpa.repository.BaseJpaRepository;
+import com.supwisdom.leaveschool.common.repository.BaseJpaRepository;
 import com.supwisdom.leaveschool.user.domain.User;
 
 @Repository
@@ -37,6 +35,7 @@
     return page;
   }
   
+  /*
   public default User selectById(String id) {
     
     try {
@@ -76,6 +75,6 @@
     
     return e;
   }
-
+  */
 
 }
