Forráskód Böngészése

Merge branch 'add-findByCondition' into 'master'

add findByCondition



See merge request !5

chenxz 7 éve
szülő
commit
e27cf93448

+ 1 - 1
mooctest-user-server/pom.xml

@@ -24,7 +24,7 @@
         <dependency>
             <groupId>cn.iselab.mooctest</groupId>
             <artifactId>user-dubbo-api</artifactId>
-            <version>1.0.11</version>
+            <version>1.0.12</version>
         </dependency>
         <dependency>
             <groupId>cn.iselab.mooctest</groupId>

+ 2 - 1
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/dao/UserDao.java

@@ -1,6 +1,7 @@
 package cn.iselab.mooctest.user.dao;
 
 import cn.iselab.mooctest.user.model.User;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.repository.CrudRepository;
 
 import javax.transaction.Transactional;
@@ -10,7 +11,7 @@ import javax.transaction.Transactional;
  * @date 2018-03-04.
  */
 @Transactional
-public interface UserDao extends CrudRepository<User, Long>{
+public interface UserDao extends CrudRepository<User, Long> , JpaSpecificationExecutor<User> {
 
     User findByEmail(String email);
 

+ 8 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/rpc/UserRPC.java

@@ -7,6 +7,9 @@ import com.alibaba.dubbo.config.annotation.Service;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * @author sean
  * @date 2018-03-03.
@@ -48,4 +51,9 @@ public class UserRPC implements UserService {
         return userLogic.updateUser(userDTO);
     }
 
+    @Override
+    public List<UserDTO> findByCondition(Map<String , String> condition) {
+        return  userLogic.findByCondition(condition);
+    }
+
 }

+ 6 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/UserService.java

@@ -1,7 +1,11 @@
 package cn.iselab.mooctest.user.service;
 
+
 import cn.iselab.mooctest.user.model.User;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * @author sean
  * @date 2018-03-03.
@@ -17,5 +21,7 @@ public interface UserService {
     User findById(Long userId);
 
     User update(User user);
+
+    List<User> findByCondition(Map<String,String> condition);
 }
 

+ 36 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/impl/UserServiceImpl.java

@@ -4,8 +4,18 @@ import cn.iselab.mooctest.user.dao.UserDao;
 import cn.iselab.mooctest.user.model.User;
 import cn.iselab.mooctest.user.service.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.data.jpa.domain.Specifications;
 import org.springframework.stereotype.Service;
 
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.lang.reflect.Field;
+import java.util.List;
+import java.util.Map;
+
 /**
  * @author sean
  * @date 2018-03-04.
@@ -40,4 +50,30 @@ public class UserServiceImpl implements UserService {
     public User update(User user) {
         return userDao.save(user);
     }
+
+    @Override
+    public List<User> findByCondition(Map<String,String> condition) {
+        Specification<User> where = Specifications.where(getUserWhereClause(condition));
+        return userDao.findAll(where);
+    }
+    private Specification<User> getUserWhereClause(Map<String, String> condition) {
+        return new Specification<User>() {
+            @Override
+            public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                Predicate predicate = cb.disjunction();
+
+                Field[] fields = User.class.getDeclaredFields();
+                for (Field field : fields) {
+                    String fieldName = field.getName();
+                    if (condition.containsKey(fieldName)) {
+                        predicate.getExpressions().add(
+                                cb.like(root.get(fieldName), "%" + condition.get(fieldName) + "%")
+                        );
+                    }
+                }
+
+                return predicate;
+            }
+        };
+    }
 }

+ 2 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/ctrl/UserController.java

@@ -30,4 +30,6 @@ public class UserController extends BaseController {
     public UserDTO save(@RequestBody UserDTO userDTO){
         return userLogic.save(userDTO);
     }
+
+
 }

+ 5 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/UserLogic.java

@@ -2,6 +2,9 @@ package cn.iselab.mooctest.user.web.logic;
 
 import cn.iselab.mooctest.rpc.user.data.UserDTO;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * @author sean
  * @date 2018-03-04.
@@ -19,4 +22,6 @@ public interface UserLogic {
     UserDTO save(UserDTO userDTO);
 
     UserDTO updateUser(UserDTO userDTO);
+
+    List<UserDTO> findByCondition(Map<String,String> condition);
 }

+ 15 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/impl/UserLogicImpl.java

@@ -11,6 +11,10 @@ import cn.iselab.mooctest.user.web.wrapper.UserWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
 /**
  * @author sean
  * @date 2018-03-04.
@@ -86,4 +90,15 @@ public class UserLogicImpl extends BaseLogic implements UserLogic {
         user = userService.update(user);
         return Converter.convert(UserDTO.class, user);
     }
+
+    @Override
+    public List<UserDTO> findByCondition(Map<String , String> condition) {
+        List<User> userList = userService.findByCondition(condition);
+        List<UserDTO> userDTOList = new ArrayList<>();
+        for (User user : userList) {
+            userDTOList.add(Converter.convert(UserDTO.class,user));
+        }
+        return userDTOList;
+
+    }
 }