自定义Jpa Repository 公共方法实现
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/config/BaseJpaRepositoryFactoryBean.java b/samples/user/src/main/java/com/supwisdom/leaveschool/user/config/BaseJpaRepositoryFactoryBean.java
new file mode 100644
index 0000000..647ba16
--- /dev/null
+++ b/samples/user/src/main/java/com/supwisdom/leaveschool/user/config/BaseJpaRepositoryFactoryBean.java
@@ -0,0 +1,52 @@
+package com.supwisdom.leaveschool.user.config;
+
+import javax.persistence.EntityManager;
+
+import org.springframework.data.jpa.repository.support.JpaRepositoryFactory;
+import org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean;
+import org.springframework.data.jpa.repository.support.SimpleJpaRepository;
+import org.springframework.data.repository.core.RepositoryInformation;
+import org.springframework.data.repository.core.RepositoryMetadata;
+import org.springframework.data.repository.core.support.RepositoryFactorySupport;
+
+import com.supwisdom.leaveschool.user.domain.ABaseDomain;
+import com.supwisdom.leaveschool.user.repository.ABaseJpaRepositoryImpl;
+
+public class BaseJpaRepositoryFactoryBean<T extends ABaseJpaRepositoryImpl<S>, S extends ABaseDomain> extends JpaRepositoryFactoryBean<T, S, String> {
+
+ public BaseJpaRepositoryFactoryBean(Class<? extends T> repositoryInterface) {
+ super(repositoryInterface);
+ }
+
+ @SuppressWarnings("rawtypes")
+ protected RepositoryFactorySupport createRepositoryFactory(EntityManager em) {
+ return new BaseJpaRepositoryFactory(em);
+ }
+
+ private static class BaseJpaRepositoryFactory<T extends ABaseDomain> extends JpaRepositoryFactory {
+
+ private final EntityManager em;
+
+ public BaseJpaRepositoryFactory(EntityManager em) {
+ super(em);
+ this.em = em;
+ }
+
+ protected SimpleJpaRepository<T, String> getTargetRepository(RepositoryInformation information, EntityManager em) {
+ Class<T> domainClass = (Class<T>) information.getDomainType();
+
+ return new ABaseJpaRepositoryImpl<T>(domainClass, em);
+ }
+
+// @SuppressWarnings("unchecked")
+// protected Object getTargetRepository(RepositoryMetadata metadata) {
+// return new ABaseJpaRepositoryImpl<T>((Class<T>) metadata.getDomainType(), this.em);
+// }
+
+ protected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) {
+ return ABaseJpaRepositoryImpl.class;
+ }
+
+ }
+
+}
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/config/JpaDataConfig.java b/samples/user/src/main/java/com/supwisdom/leaveschool/user/config/JpaDataConfig.java
new file mode 100644
index 0000000..bf93feb
--- /dev/null
+++ b/samples/user/src/main/java/com/supwisdom/leaveschool/user/config/JpaDataConfig.java
@@ -0,0 +1,12 @@
+package com.supwisdom.leaveschool.user.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+import org.springframework.data.web.config.EnableSpringDataWebSupport;
+
+//@Configuration
+//@EnableJpaRepositories(basePackages = "com.supwisdom.leaveschool.user.repository", repositoryFactoryBeanClass = BaseJpaRepositoryFactoryBean.class)
+//@EnableSpringDataWebSupport
+public class JpaDataConfig {
+
+}
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 3005491..36ab166 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
@@ -34,10 +34,10 @@
/**
*
- * curl -i -s -X GET -H 'Remote_User:admin' -H 'Accept:application/json' 'http://localhost:10010/api/v1/admin/users'
- * curl -i -s -X GET -H 'Remote_User:admin' -H 'Accept:application/json' 'http://localhost:10010/api/v1/admin/users?pageIndex=2&pageSize=50'
- * curl -i -s -X GET -H 'Remote_User:admin' -H 'Accept:application/json' 'http://localhost:10010/api/v1/admin/users?pageIndex=0&pageSize=20&mapBean[username]=username&mapBean[name]=name&mapBean[status]=1'
- * curl -i -s -X GET -H 'Remote_User:admin' -H 'Accept:application/json' 'http://localhost:10010/api/v1/admin/users?pageIndex=0&pageSize=20&mapBean[username]=username&mapBean[name]=name&mapBean[status]=0'
+ * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:10010/api/v1/admin/users'
+ * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:10010/api/v1/admin/users?pageIndex=2&pageSize=50'
+ * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:10010/api/v1/admin/users?pageIndex=0&pageSize=20&mapBean[username]=username&mapBean[name]=name&mapBean[status]=1'
+ * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:10010/api/v1/admin/users?pageIndex=0&pageSize=20&mapBean[username]=username&mapBean[name]=name&mapBean[status]=0'
*
* response success:
*
@@ -99,7 +99,7 @@
/**
*
- * curl -i -s -X GET -H 'Remote_User:admin' -H 'Accept:application/json' 'http://localhost:10010/api/v1/admin/users/1'
+ * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:10010/api/v1/admin/users/1'
*
* response success:
*
@@ -166,7 +166,7 @@
/**
*
- * curl -i -s -X POST -H 'Remote_User:admin' -H 'Content-Type:application/json' -H 'Accept:application/json' 'http://localhost:10010/api/v1/admin/users' \
+ * curl -i -s -X POST -H 'Content-Type:application/json' -H 'Accept:application/json' 'http://localhost:10010/api/v1/admin/users' \
* -d '{"username":"test001","password":"test001","enabled":true,"accountNonExpired":true,"accountNonLocked":true,"credentialsNonExpired":true,"name":"测试001","status":"1"}'
*
* response success:
@@ -214,7 +214,7 @@
/**
*
- * curl -i -s -X PUT -H 'Remote_User:admin' -H 'Content-Type:application/json' -H 'Accept:application/json' 'http://localhost:10010/api/v1/admin/users' \
+ * curl -i -s -X PUT -H 'Content-Type:application/json' -H 'Accept:application/json' 'http://localhost:10010/api/v1/admin/users' \
* -d '{"id":"1","status":"0"}'
*
* response success:
@@ -233,7 +233,7 @@
* "path":"/api/v1/admin/users"
* }
*
- * curl -i -s -X PUT -H 'Remote_User:admin' -H 'Content-Type:application/json' -H 'Accept:application/json' 'http://localhost:10010/api/v1/admin/users' \
+ * curl -i -s -X PUT -H 'Content-Type:application/json' -H 'Accept:application/json' 'http://localhost:10010/api/v1/admin/users' \
* -d '{"status":"0"}'
*
* response error:
@@ -247,7 +247,7 @@
* "path":"/api/v1/admin/users"
* }
*
- * curl -i -s -X PUT -H 'Remote_User:admin' -H 'Content-Type:application/json' -H 'Accept:application/json' 'http://localhost:10010/api/v1/admin/users' \
+ * curl -i -s -X PUT -H 'Content-Type:application/json' -H 'Accept:application/json' 'http://localhost:10010/api/v1/admin/users' \
* -d '{"id":"1","status":"0"}'
*
* response error:
@@ -291,7 +291,7 @@
/**
*
- * curl -i -s -X DELETE -H 'Remote_User:admin' -H 'Accept:application/json' 'http://localhost:10010/api/v1/admin/users/1'
+ * curl -i -s -X DELETE -H 'Accept:application/json' 'http://localhost:10010/api/v1/admin/users/1'
*
* response success:
*
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/controller/api/demo/ApiDemoUserController.java b/samples/user/src/main/java/com/supwisdom/leaveschool/user/controller/api/demo/ApiDemoUserController.java
index 99c120a..8d776f4 100644
--- a/samples/user/src/main/java/com/supwisdom/leaveschool/user/controller/api/demo/ApiDemoUserController.java
+++ b/samples/user/src/main/java/com/supwisdom/leaveschool/user/controller/api/demo/ApiDemoUserController.java
@@ -11,8 +11,6 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import com.supwisdom.leaveschool.user.util.AuthUtil;
-
@RestController
@RequestMapping("/api/demo/users")
public class ApiDemoUserController {
@@ -27,8 +25,6 @@
*/
@GetMapping(path = "/greeting/{name}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
public Map<String, Object> greeting(@PathVariable("name") String name) {
- AuthUtil.getRemoteUser();
-
logger.debug(name);
Map<String, Object> result = new HashMap<String, Object>();
result.put("message", "Good " + name);
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/domain/ADomain.java b/samples/user/src/main/java/com/supwisdom/leaveschool/user/domain/ABaseDomain.java
similarity index 97%
rename from samples/user/src/main/java/com/supwisdom/leaveschool/user/domain/ADomain.java
rename to samples/user/src/main/java/com/supwisdom/leaveschool/user/domain/ABaseDomain.java
index 9ec4049..deb959c 100644
--- a/samples/user/src/main/java/com/supwisdom/leaveschool/user/domain/ADomain.java
+++ b/samples/user/src/main/java/com/supwisdom/leaveschool/user/domain/ABaseDomain.java
@@ -11,7 +11,7 @@
import org.hibernate.annotations.GenericGenerator;
@MappedSuperclass
-public abstract class ADomain implements Serializable {
+public abstract class ABaseDomain implements Serializable {
/**
*
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 86fc807..212598b 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
@@ -9,7 +9,7 @@
@Entity
@Table(name = "TB_U_USER")
@Data
-public class User extends ADomain {
+public class User extends ABaseDomain {
/**
*
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/ABaseJpaRepositoryImpl.java b/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/ABaseJpaRepositoryImpl.java
new file mode 100644
index 0000000..5dabe82
--- /dev/null
+++ b/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/ABaseJpaRepositoryImpl.java
@@ -0,0 +1,84 @@
+package com.supwisdom.leaveschool.user.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.user.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/user/src/main/java/com/supwisdom/leaveschool/user/repository/BaseJpaRepository.java b/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/BaseJpaRepository.java
new file mode 100644
index 0000000..df5c1f4
--- /dev/null
+++ b/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/BaseJpaRepository.java
@@ -0,0 +1,22 @@
+package com.supwisdom.leaveschool.user.repository;
+
+import java.util.Map;
+
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.repository.NoRepositoryBean;
+
+import com.supwisdom.leaveschool.user.domain.ABaseDomain;
+
+@NoRepositoryBean
+public interface BaseJpaRepository<T extends ABaseDomain> extends JpaRepository<T, String> {
+
+ public Page<T> selectPageList(int pageIndex, int pageSize, Map<String, Object> mapBean);
+
+ public T selectById(String id);
+
+ public T insert(T entity);
+
+ public T update(T entity);
+
+}
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 5bcc1e3..2d67881 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
@@ -8,14 +8,12 @@
import org.springframework.data.domain.ExampleMatcher;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
-import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.supwisdom.leaveschool.user.domain.User;
-import com.supwisdom.leaveschool.user.util.AuthUtil;
@Repository
-public interface UserRepository extends JpaRepository<User, String> {
+public interface UserRepository extends BaseJpaRepository<User> {
public default Page<User> selectPageList(int pageIndex, int pageSize, Map<String, Object> mapBean) {
User probe = new User();
@@ -60,7 +58,7 @@
}
entity.setDeleted(false);
- entity.setAddAccount(AuthUtil.getRemoteUser());
+ //entity.setAddAccount(AuthUtil.getRemoteUser());
entity.setAddTime(Calendar.getInstance().getTime());
User e = this.save(entity);
@@ -70,7 +68,7 @@
public default User update(User entity) {
- entity.setEditAccount(AuthUtil.getRemoteUser());
+ //entity.setEditAccount(AuthUtil.getRemoteUser());
entity.setEditTime(Calendar.getInstance().getTime());
User e = this.save(entity);
@@ -78,4 +76,5 @@
return e;
}
+
}
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/util/Test.java b/samples/user/src/main/java/com/supwisdom/leaveschool/user/util/Test.java
index 2ded0aa..e42b225 100644
--- a/samples/user/src/main/java/com/supwisdom/leaveschool/user/util/Test.java
+++ b/samples/user/src/main/java/com/supwisdom/leaveschool/user/util/Test.java
@@ -4,9 +4,9 @@
import javax.persistence.Column;
-import com.supwisdom.leaveschool.user.domain.ADomain;
+import com.supwisdom.leaveschool.user.domain.ABaseDomain;
-public class Test extends ADomain {
+public class Test extends ABaseDomain {
/**
*
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/util/Test2.java b/samples/user/src/main/java/com/supwisdom/leaveschool/user/util/Test2.java
index 426209f..3793233 100644
--- a/samples/user/src/main/java/com/supwisdom/leaveschool/user/util/Test2.java
+++ b/samples/user/src/main/java/com/supwisdom/leaveschool/user/util/Test2.java
@@ -4,9 +4,9 @@
import javax.persistence.Column;
-import com.supwisdom.leaveschool.user.domain.ADomain;
+import com.supwisdom.leaveschool.user.domain.ABaseDomain;
-public class Test2 extends ADomain {
+public class Test2 extends ABaseDomain {
/**
*
diff --git a/samples/user/src/main/resources/application.yml b/samples/user/src/main/resources/application.yml
index fff91a4..9f6ca40 100755
--- a/samples/user/src/main/resources/application.yml
+++ b/samples/user/src/main/resources/application.yml
@@ -6,6 +6,7 @@
level:
root: INFO
org.springframework.web: TRACE
+ org.springframework.data.jpa: TRACE
com.supwisdom.infras.security: DEBUG
com.supwisdom.leaveschool: DEBUG