1
0
Просмотр исходного кода

feat: 通用insert加入列名参数

370774330@qq.com 5 лет назад
Родитель
Сommit
9bf84633b7

+ 19 - 6
web/src/main/java/seecoder/devcloud/web/dao/InsertUpdateSqlProvider.java

@@ -1,5 +1,6 @@
 package seecoder.devcloud.web.dao;
 package seecoder.devcloud.web.dao;
 
 
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.jdbc.SQL;
 import org.apache.ibatis.jdbc.SQL;
 
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Field;
@@ -13,17 +14,30 @@ import java.util.Map;
  * @description: 帮助快速写插入和更新的,注意 pojo类的字段要和数据库表对应, 用法示例见 UserMapper.class
  * @description: 帮助快速写插入和更新的,注意 pojo类的字段要和数据库表对应, 用法示例见 UserMapper.class
  */
  */
 public class InsertUpdateSqlProvider {
 public class InsertUpdateSqlProvider {
-    public static String insert(Object obj) {
-        Map<String, String> map;
 
 
+    /**
+     * 忽视部分
+     * @param obj 插入对象, 用来获取字段和表名
+     * @param ignoredCols 插入时需要忽略的列名 列名格式是Underscore,如created_at
+     * @return sql
+     */
+    public static String insert(Object obj,String... ignoredCols){
+        Map<String, String> map;
         try {
         try {
             map = getFieldsMap(obj, true);
             map = getFieldsMap(obj, true);
             // 创建 需要赋当前的时间的timestamp字段 在这里排除,否则无法正常赋值
             // 创建 需要赋当前的时间的timestamp字段 在这里排除,否则无法正常赋值
-            map.remove("created_at");
+            for (String col: ignoredCols){
+                map.remove(col);
+            }
         } catch (IllegalArgumentException | IllegalAccessException e) {
         } catch (IllegalArgumentException | IllegalAccessException e) {
             throw new RuntimeException(e);
             throw new RuntimeException(e);
         }
         }
-        String test = new SQL() {
+        return insert(obj, map);
+    }
+
+
+    private static String insert(Object obj,Map<String, String> map){
+        return new SQL() {
             {
             {
                 INSERT_INTO(getTableName(obj));
                 INSERT_INTO(getTableName(obj));
                 for (String col : map.keySet()) {
                 for (String col : map.keySet()) {
@@ -31,7 +45,6 @@ public class InsertUpdateSqlProvider {
                 }
                 }
             }
             }
         }.toString();
         }.toString();
-        return test;
     }
     }
 
 
     private static String updateById(Object obj, boolean includeNullValueField) {
     private static String updateById(Object obj, boolean includeNullValueField) {
@@ -77,7 +90,7 @@ public class InsertUpdateSqlProvider {
                 continue;
                 continue;
             }
             }
             if ((!"id".equals(col) && includeNullValue) || f.get(obj) != null) {
             if ((!"id".equals(col) && includeNullValue) || f.get(obj) != null) {
-                result.put(camelCase2Underscore(col), "#{" + col + "}");
+                result.put(camelCase2Underscore(col), "#{param1."+ col + "}");
             }
             }
         }
         }
         return result;
         return result;

+ 4 - 3
web/src/main/java/seecoder/devcloud/web/dao/user/GroupMapper.java

@@ -19,10 +19,11 @@ import java.util.List;
 public interface GroupMapper {
 public interface GroupMapper {
 
 
 
 
-    @Options(useGeneratedKeys = true, keyColumn = "id", keyProperty = "id")
-    @SelectKey(statement = "select LAST_INSERT_KEY()", keyProperty = "id", before = false, resultType = Long.class)
+    /**
+     * id并非由此后端生成,而是gitlab创建后,将gitlab groupid填入
+     */
     @InsertProvider(type = InsertUpdateSqlProvider.class, method = "insert")
     @InsertProvider(type = InsertUpdateSqlProvider.class, method = "insert")
-    int insert(Group group);
+    int insert(Group group,String... ignoredCols);
 
 
     @UpdateProvider(type= InsertUpdateSqlProvider.class, method="updateById")
     @UpdateProvider(type= InsertUpdateSqlProvider.class, method="updateById")
     int update(Group group);
     int update(Group group);

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/dao/user/UserMapper.java

@@ -16,7 +16,7 @@ public interface UserMapper {
 	 * 这里的id是取自gitlab的用户id,所以不需要自增和回填
 	 * 这里的id是取自gitlab的用户id,所以不需要自增和回填
 	 */
 	 */
 	@InsertProvider(type = InsertUpdateSqlProvider.class, method = "insert")
 	@InsertProvider(type = InsertUpdateSqlProvider.class, method = "insert")
-	int insert(User user);
+	int insert(User user,String... ignoredCols);
 
 
 	@UpdateProvider(type= InsertUpdateSqlProvider.class, method="updateById")
 	@UpdateProvider(type= InsertUpdateSqlProvider.class, method="updateById")
 	int updateById(Object bean);
 	int updateById(Object bean);

+ 8 - 0
web/src/main/java/seecoder/devcloud/web/po/user/Group.java

@@ -1,6 +1,7 @@
 package seecoder.devcloud.web.po.user;
 package seecoder.devcloud.web.po.user;
 
 
 
 
+import lombok.Builder;
 import lombok.Data;
 import lombok.Data;
 import seecoder.devcloud.web.enums.GroupType;
 import seecoder.devcloud.web.enums.GroupType;
 
 
@@ -14,10 +15,17 @@ import java.util.List;
  * Created on 10/26/2018
  * Created on 10/26/2018
  */
  */
 @Data
 @Data
+@Builder
 public class Group {
 public class Group {
 
 
+    /**
+     * id并非由此后端生成,而是gitlab创建后,将gitlab groupid填入
+     */
     private Integer id;
     private Integer id;
 
 
+    /**
+     * 来源于gitlab
+     */
     private Integer namespace;
     private Integer namespace;
     /**
     /**
      * 小组类型
      * 小组类型

+ 14 - 17
web/src/main/java/seecoder/devcloud/web/service/impl/user/GroupServiceImp.java

@@ -47,15 +47,9 @@
 //
 //
 //    @Override
 //    @Override
 //    @Transactional
 //    @Transactional
-//    public GroupVO createGroup(String name, Integer courseId, CustomUserDetails userDetails) throws EntityNotFoundException {
+//    public GroupVO createGroup(String name,  Integer userId) throws EntityNotFoundException {
+//        User user = userMapper.findById(userId);
 //
 //
-//        User user = userMapper.findByUsername(userDetails.getUsername());
-//        final boolean isJoin = user.getGroup().stream()
-//                .anyMatch(g -> g.getCourses().getId().equals(courseId));
-//        if (isJoin) {
-//            throw new RuntimeException("已经加入小组!");
-//        }
-//        //todo:判断学生是否选课
 //        List<User> members = new ArrayList<>();
 //        List<User> members = new ArrayList<>();
 //        members.add(user);
 //        members.add(user);
 //        GitlabGroup gitGroup;
 //        GitlabGroup gitGroup;
@@ -65,18 +59,21 @@
 //        } catch (GitLabApiException e) {
 //        } catch (GitLabApiException e) {
 //            throw new RuntimeException("创建Group时发生异常[" + e.getMessage() + "]");
 //            throw new RuntimeException("创建Group时发生异常[" + e.getMessage() + "]");
 //        }
 //        }
-//        Group group = new Group();
-//        group.setId(gitGroup.getId());
-//        group.setMembers(members);
-//        group.setName(name);
-//        group.setNamespace(gitGroup.getNamespace());
-//        group.setShareLink(UUID.randomUUID().toString().replace("-", ""));
-//        group.setType(GroupType.GROUP);
-//        groupMapper.insert(group);
+//        Group group = Group.builder()
+//                .id(gitGroup.getId())
+//                .name(name)
+//                .namespace(gitGroup.getNamespace())
+//                .shareLink(UUID.randomUUID().toString().replace("-", ""))
+//                .type(GroupType.GROUP)
+//                .members(members)
+//                .build();
+//        groupMapper.insert(group, "members");
+//
+//        //todo 组用户表
 //        userMapper.save(user);
 //        userMapper.save(user);
 //        // 发出小组创建的事件
 //        // 发出小组创建的事件
 //        GroupVO groupVO = new GroupVO(group);
 //        GroupVO groupVO = new GroupVO(group);
-//        applicationContext.publishEvent(new GroupCreateEvent(this, courseId, groupVO));
+//        //applicationContext.publishEvent(new GroupCreateEvent(this, courseId, groupVO));
 //        return groupVO;
 //        return groupVO;
 //    }
 //    }
 //
 //

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/service/impl/user/UserServiceImpl.java

@@ -79,7 +79,7 @@ public class UserServiceImpl implements UserService {
 		//在gitlab注册后,直接加密
 		//在gitlab注册后,直接加密
 		user.setPassword(DigestUtils.sha256Hex(realPassword));
 		user.setPassword(DigestUtils.sha256Hex(realPassword));
 		user.setRole(role);
 		user.setRole(role);
-		userMapper.insert(user);
+		userMapper.insert(user, "created_at");
 		final UserVO userVO = new UserVO(user);
 		final UserVO userVO = new UserVO(user);
 		if (password == null) {
 		if (password == null) {
 			mailService.send("尊敬的" + username + "您好, 您的初始密码为" + realPassword + ", 请及时修改", "注册成功 | SEECODER", email);
 			mailService.send("尊敬的" + username + "您好, 您的初始密码为" + realPassword + ", 请及时修改", "注册成功 | SEECODER", email);

+ 2 - 1
web/src/main/java/seecoder/devcloud/web/service/user/GroupService.java

@@ -18,7 +18,8 @@ import java.util.List;
  * @Description
  * @Description
  **/
  **/
 public interface GroupService {
 public interface GroupService {
-    GroupVO createGroup(String name, Integer courseId, CustomUserDetails userDetails) throws EntityNotFoundException;
+
+    GroupVO createGroup(String name,  Integer userId) throws EntityNotFoundException;
 
 
     GroupVO addMember(String code, CustomUserDetails userDetails) throws EntityNotFoundException;
     GroupVO addMember(String code, CustomUserDetails userDetails) throws EntityNotFoundException;
 
 

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/service/user/MailService.java

@@ -5,7 +5,7 @@ import org.springframework.web.servlet.ModelAndView;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.CompletableFuture;
 
 
 public interface MailService {
 public interface MailService {
-	
+
 	@Deprecated
 	@Deprecated
 	void send(String to, String personal, String subject, ModelAndView modelAndView);
 	void send(String to, String personal, String subject, ModelAndView modelAndView);
 
 

+ 10 - 8
web/src/main/java/seecoder/devcloud/web/vo/user/GroupVO.java

@@ -3,8 +3,10 @@ package seecoder.devcloud.web.vo.user;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.NoArgsConstructor;
+import seecoder.devcloud.web.po.user.Group;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * @EnumName GroupVO
  * @EnumName GroupVO
@@ -23,13 +25,13 @@ public class GroupVO {
     private String code;
     private String code;
     private List<UserVO> members;
     private List<UserVO> members;
 
 
-//    public GroupVO(Group group) {
-//        this.id=group.getId();
-//        this.name=group.getName();
-//        this.code=group.getShareLink();
-//        this.members=group.getMembers().stream()
-//                .map(UserVO::new)
-//                .collect(Collectors.toList());
-//    }
+    public GroupVO(Group group) {
+        this.id=group.getId();
+        this.name=group.getName();
+        this.code=group.getShareLink();
+        this.members=group.getMembers().stream()
+                .map(UserVO::new)
+                .collect(Collectors.toList());
+    }
 
 
 }
 }

+ 2 - 18
web/src/test/java/seecoder/devcloud/web/service/user/UserServiceTest.java

@@ -48,22 +48,6 @@ class UserServiceTest {
         gitLabApi = new GitLabApi(properties.getGitlab().getHost(), properties.getGitlab().getToken());
         gitLabApi = new GitLabApi(properties.getGitlab().getHost(), properties.getGitlab().getToken());
     }
     }
 
 
-    @Test
-    void create() {
-        RegisterVO registerVO = RegisterVO.builder()
-                .username("gfygfytest6")
-                .password("gfygfytest6")
-                .email("3082138856@qq.com")
-                .nickname("kennyday")
-                .build();
-        try {
-            userService.register(registerVO);
-        } catch (ServiceException e){
-            e.printStackTrace();
-            Assert.fail(e.getMessage());
-        }
-    }
-
     @Test
     @Test
     void register() {
     void register() {
         RegisterVO registerVO = RegisterVO.builder()
         RegisterVO registerVO = RegisterVO.builder()
@@ -83,8 +67,8 @@ class UserServiceTest {
     @Test
     @Test
     void delete() {
     void delete() {
         try {
         try {
-            userService.delete(24);
-            //gitLabApi.getUserApi().deleteUser(20);
+            //userService.delete(26);
+            gitLabApi.getUserApi().deleteUser(30);
             System.out.println(gitLabApi.getUserApi().getActiveUsers().stream().map(AbstractUser::getId).collect(Collectors.toList()));
             System.out.println(gitLabApi.getUserApi().getActiveUsers().stream().map(AbstractUser::getId).collect(Collectors.toList()));
         } catch (Exception e) {
         } catch (Exception e) {
             e.printStackTrace();
             e.printStackTrace();