Explorar el Código

feat: 完成treenode部分的数据层和单元测试

ChenYZ hace 5 años
padre
commit
3e70b2fb61

+ 12 - 6
web/pom.xml

@@ -22,6 +22,18 @@
     </properties>
 
     <dependencies>
+        <!--MybatisTest依赖包-->
+        <dependency>
+            <groupId>org.mybatis.spring.boot</groupId>
+            <artifactId>mybatis-spring-boot-starter-test</artifactId>
+            <version>2.1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+
         <!-- Swagger -->
         <!-- https://mvnrepository.com/artifact/io.springfox/springfox-boot-starter -->
         <dependency>
@@ -72,12 +84,6 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.junit.vintage</groupId>
-                    <artifactId>junit-vintage-engine</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
 
         <dependency>

+ 56 - 4
web/src/main/java/seecoder/devcloud/web/dataMapper/TreeNodeMapper.java

@@ -1,16 +1,68 @@
 package seecoder.devcloud.web.dataMapper;
 
 
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.*;
+import org.apache.ibatis.type.EnumOrdinalTypeHandler;
+import org.springframework.stereotype.Repository;
+import seecoder.devcloud.web.dataMapper.provider.TreeNodeProvider;
 import seecoder.devcloud.web.po.TreeNode;
 
 import java.util.List;
 
 @Mapper
+@Repository
 public interface TreeNodeMapper {
 
-    List<TreeNode> findAllTreeNodes();
-    List<TreeNode> findTreeNodeById(@Param("id") int id);
+    /**
+     * 获取所有的TreeNode
+     * @return
+     */
+    @Select({"select * from tree_nodes"})
+    @Results(id="treeNodeMap",value = {
+            @Result(column = "is_leaf", property = "leaf"),
+            @Result(column = "time_to_take", property = "timeToTake"),
+            @Result(column = "start_time", property = "startTime"),
+            @Result(column = "end_time", property = "endTime"),
+            @Result(column = "group_id", property = "groupId"),
+            @Result(column = "state",property = "state"),
+            @Result(column = "type",property = "type")
+    })
+    List<TreeNode> listAllTreeNodes();
+
+    /**
+     * 根据id获取TreeNode
+     * @param id
+     * @return
+     */
+    @Select({"select * from tree_nodes where id = #{id}"})
+    @ResultMap(value = "treeNodeMap")
+    TreeNode getTreeNodeById(@Param("id") int id);
+
+    /**
+     * 根据GroupId获取TreeNode
+     * @param id
+     * @return
+     */
+    @Select({"select * from tree_nodes where group_id = #{groupId}"})
+    @ResultMap(value = "treeNodeMap")
+    List<TreeNode> listTreeNodesByGroupId(@Param("groupId") int id);
+
+    /**
+     * 插入treeNode
+     * @param treeNode
+     * @return treeNode的自增主键
+     */
+    @Insert({"insert into tree_nodes(title, description, type, priority, state, processor, time_to_take, start_time, end_time, is_leaf, group_id) " +
+            "VALUES (#{title}, #{description}, #{type}, #{priority}, #{state}, #{processor}, #{timeToTake}, #{startTime}, #{endTime}, #{leaf}, #{groupId})"})
+    @Options(useGeneratedKeys = true, keyProperty = "id")
+    int insertTreeNode(TreeNode treeNode);
+
+    /**
+     * 更新TreeNode
+     * @param treeNode
+     * @return
+     */
+    @UpdateProvider(type = TreeNodeProvider.class,method = "updateTreeNode")
+    int updateTreeNode(TreeNode treeNode);
 
 }

+ 26 - 0
web/src/main/java/seecoder/devcloud/web/dataMapper/provider/TreeNodeProvider.java

@@ -0,0 +1,26 @@
+package seecoder.devcloud.web.dataMapper.provider;
+
+import org.apache.ibatis.jdbc.SQL;
+import seecoder.devcloud.web.po.TreeNode;
+
+public class TreeNodeProvider {
+    public String updateTreeNode(TreeNode treeNode){
+        return new SQL() {
+            {
+                UPDATE("tree_nodes");
+                SET("title=#{title}");
+                SET("description=#{description}");
+                SET("type=#{type}");
+                SET("priority=#{priority}");
+                SET("state=#{state}");
+                SET("processor=#{processor}");
+                SET("time_to_take=#{timeToTake}");
+                SET("start_time=#{startTime}");
+                SET("end_time=#{endTime}");
+                SET("is_leaf=#{leaf}");
+                SET("group_id=#{groupId}");
+                WHERE("id=#{id}");
+            }
+        }.toString();
+    }
+}

+ 18 - 0
web/src/main/java/seecoder/devcloud/web/enums/NodeStateEnum.java

@@ -0,0 +1,18 @@
+package seecoder.devcloud.web.enums;
+
+public enum NodeStateEnum {
+    PROCESSING("0:进行中"),
+    FINISHED("1:已结束");
+
+    private String value;
+
+    NodeStateEnum(String value){
+        this.value=value;
+    }
+
+    @Override
+    public String toString(){
+        return value;
+    }
+
+}

+ 17 - 0
web/src/main/java/seecoder/devcloud/web/enums/NodeTypeEnum.java

@@ -0,0 +1,17 @@
+package seecoder.devcloud.web.enums;
+
+public enum NodeTypeEnum {
+    REQUIREMENT("0:需求"),
+    TASK("1:任务");
+
+    private String value;
+
+    NodeTypeEnum(String value){
+        this.value=value;
+    }
+
+    @Override
+    public String toString(){
+        return value;
+    }
+}

+ 0 - 5
web/src/main/java/seecoder/devcloud/web/enums/State.java

@@ -1,5 +0,0 @@
-package seecoder.devcloud.web.enums;
-
-public enum State {
-    PROCESSING,FINISHED
-}

+ 0 - 5
web/src/main/java/seecoder/devcloud/web/enums/Type.java

@@ -1,5 +0,0 @@
-package seecoder.devcloud.web.enums;
-
-public enum Type {
-    REQUIREMENT,TASK
-}

+ 17 - 140
web/src/main/java/seecoder/devcloud/web/po/TreeNode.java

@@ -2,154 +2,31 @@ package seecoder.devcloud.web.po;
 
 
 
-import seecoder.devcloud.web.enums.State;
-import seecoder.devcloud.web.enums.Type;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import seecoder.devcloud.web.enums.NodeStateEnum;
+import seecoder.devcloud.web.enums.NodeTypeEnum;
 
 import java.util.Date;
 
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode
 public class TreeNode {
     private int id;
     private String title;
     private String description;
-    private Type type;
+    private NodeTypeEnum type;
     private int priority;
-    private State state;
+    private NodeStateEnum state;
     private String processor;
-    private int time_to_take;
-    private Date start_time;
-    private Date end_time;
-    private boolean is_leaf;
-    private int group_id;
+    private int timeToTake;
+    private String startTime;
+    private String endTime;
+    private boolean leaf;
+    private int groupId;
 
-    public TreeNode() {
-    }
-
-    public TreeNode(int id, String title, String description, Type type, int priority, State state, String processor, int time_to_take, Date start_time, Date end_time, boolean is_leaf, int group_id) {
-        this.id = id;
-        this.title = title;
-        this.description = description;
-        this.type = type;
-        this.priority = priority;
-        this.state = state;
-        this.processor = processor;
-        this.time_to_take = time_to_take;
-        this.start_time = start_time;
-        this.end_time = end_time;
-        this.is_leaf = is_leaf;
-        this.group_id = group_id;
-    }
-
-    public int getId() {
-        return id;
-    }
-
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public Type getType() {
-        return type;
-    }
-
-    public void setType(Type type) {
-        this.type = type;
-    }
-
-    public int getPriority() {
-        return priority;
-    }
-
-    public void setPriority(int priority) {
-        this.priority = priority;
-    }
-
-    public State getState() {
-        return state;
-    }
-
-    public void setState(State state) {
-        this.state = state;
-    }
-
-    public String getProcessor() {
-        return processor;
-    }
-
-    public void setProcessor(String processor) {
-        this.processor = processor;
-    }
-
-    public int getTime_to_take() {
-        return time_to_take;
-    }
-
-    public void setTime_to_take(int time_to_take) {
-        this.time_to_take = time_to_take;
-    }
-
-    public Date getStart_time() {
-        return start_time;
-    }
-
-    public void setStart_time(Date start_time) {
-        this.start_time = start_time;
-    }
-
-    public Date getEnd_time() {
-        return end_time;
-    }
-
-    public void setEnd_time(Date end_time) {
-        this.end_time = end_time;
-    }
-
-    public boolean isIs_leaf() {
-        return is_leaf;
-    }
-
-    public void setIs_leaf(boolean is_leaf) {
-        this.is_leaf = is_leaf;
-    }
-
-    public int getGroup_id() {
-        return group_id;
-    }
-
-    public void setGroup_id(int group_id) {
-        this.group_id = group_id;
-    }
-
-    @Override
-    public String toString() {
-        return "TreeNode{" +
-                "id=" + id +
-                ", title='" + title + '\'' +
-                ", description='" + description + '\'' +
-                ", type=" + type +
-                ", priority=" + priority +
-                ", state=" + state +
-                ", processor='" + processor + '\'' +
-                ", time_to_take=" + time_to_take +
-                ", start_time=" + start_time +
-                ", end_time=" + end_time +
-                ", is_leaf=" + is_leaf +
-                ", group_id=" + group_id +
-                '}';
-    }
 }

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/service/impl/tree/TreeNodeServiceImpl.java

@@ -15,6 +15,6 @@ public class TreeNodeServiceImpl implements TreeNodeService {
     private TreeNodeMapper treeNodeMapper;
     @Override
     public List<TreeNode> getAllNodes() {
-        return treeNodeMapper.findAllTreeNodes();
+        return null;
     }
 }

+ 84 - 84
web/src/main/java/seecoder/devcloud/web/service/impl/user/MailServiceImpl.java

@@ -1,84 +1,84 @@
-package seecoder.devcloud.web.service.impl.user;
-
-
-import lombok.extern.apachecommons.CommonsLog;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import org.springframework.mail.MailException;
-import org.springframework.mail.SimpleMailMessage;
-import org.springframework.mail.javamail.JavaMailSender;
-import org.springframework.mail.javamail.MimeMessageHelper;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
-import org.springframework.web.servlet.ModelAndView;
-import org.thymeleaf.TemplateEngine;
-import org.thymeleaf.context.Context;
-import seecoder.devcloud.api.ApplicationProperties;
-import seecoder.devcloud.web.service.user.MailService;
-
-import javax.mail.MessagingException;
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimeMessage;
-import java.io.UnsupportedEncodingException;
-import java.util.Locale;
-
-@Service
-@CommonsLog
-public class MailServiceImpl implements MailService {
-	private final TemplateEngine templateEngine;
-	private final JavaMailSender mailSender;
-
-	private final String from;
-	private final String personal;
-
-	@Autowired
-	public MailServiceImpl(TemplateEngine templateEngine, JavaMailSender mailSender, ApplicationProperties properties) {
-		this.templateEngine = templateEngine;
-		this.mailSender = mailSender;
-
-		ApplicationProperties.Mail mail = properties.getMail();
-		this.from = mail.getFrom();
-		this.personal = mail.getPersonal();
-	}
-
-	@Override
-	@Async
-	public void send(String to, String personal, String subject, ModelAndView modelAndView) {
-		if (StringUtils.isBlank(from)) return;
-		MimeMessage message = mailSender.createMimeMessage();
-		MimeMessageHelper helper = new MimeMessageHelper(message);
-		try {
-			try {
-				helper.setFrom(from, this.personal);
-			} catch (UnsupportedEncodingException e) {
-				helper.setFrom(from);
-			}
-			try {
-				helper.setTo(new InternetAddress(to, personal));
-			} catch (UnsupportedEncodingException e) {
-				helper.setTo(to);
-			}
-			helper.setSubject(subject);
-			helper.setText(templateEngine.process(modelAndView.getViewName(), new Context(Locale.CHINA, modelAndView.getModel())), true);
-		} catch (MessagingException e) {
-			log.warn("生成发送给[" + to + "(" + personal + ")]的邮件[" + subject + "]时发生异常:" + e.getMessage());
-			return;
-		}
-		try {
-			mailSender.send(message);
-		} catch (MailException e) {
-			log.warn("投递发送给[" + to + "(" + personal + ")]的邮件[" + subject + "]时发生异常:" + e.getMessage());
-		}
-	}
-
-	@Async
-	public void send(String text, String subject,String... to) {
-		SimpleMailMessage message = new SimpleMailMessage();
-		message.setFrom(this.from);
-		message.setTo(to);
-		message.setSubject(subject);
-		message.setText(text);
-		mailSender.send(message);
-	}
-}
+//package seecoder.devcloud.web.service.impl.user;
+//
+//
+//import lombok.extern.apachecommons.CommonsLog;
+//import org.apache.commons.lang3.StringUtils;
+//import org.springframework.beans.factory.annotation.Autowired;
+//
+//import org.springframework.mail.MailException;
+//import org.springframework.mail.SimpleMailMessage;
+//import org.springframework.mail.javamail.JavaMailSender;
+//import org.springframework.mail.javamail.MimeMessageHelper;
+//import org.springframework.scheduling.annotation.Async;
+//import org.springframework.stereotype.Service;
+//import org.springframework.web.servlet.ModelAndView;
+//import org.thymeleaf.TemplateEngine;
+//import org.thymeleaf.context.Context;
+//import seecoder.devcloud.api.ApplicationProperties;
+//import seecoder.devcloud.web.service.user.MailService;
+//
+//import javax.mail.MessagingException;
+//import javax.mail.internet.InternetAddress;
+//import javax.mail.internet.MimeMessage;
+//import java.io.UnsupportedEncodingException;
+//import java.util.Locale;
+//
+//@Service
+//@CommonsLog
+//public class MailServiceImpl implements MailService {
+//	private final TemplateEngine templateEngine;
+//	private final JavaMailSender mailSender;
+//
+//	private final String from;
+//	private final String personal;
+//
+//	@Autowired
+//	public MailServiceImpl(TemplateEngine templateEngine, JavaMailSender mailSender, ApplicationProperties properties) {
+//		this.templateEngine = templateEngine;
+//		this.mailSender = mailSender;
+//
+//		ApplicationProperties.Mail mail = properties.getMail();
+//		this.from = mail.getFrom();
+//		this.personal = mail.getPersonal();
+//	}
+//
+//	@Override
+//	@Async
+//	public void send(String to, String personal, String subject, ModelAndView modelAndView) {
+//		if (StringUtils.isBlank(from)) return;
+//		MimeMessage message = mailSender.createMimeMessage();
+//		MimeMessageHelper helper = new MimeMessageHelper(message);
+//		try {
+//			try {
+//				helper.setFrom(from, this.personal);
+//			} catch (UnsupportedEncodingException e) {
+//				helper.setFrom(from);
+//			}
+//			try {
+//				helper.setTo(new InternetAddress(to, personal));
+//			} catch (UnsupportedEncodingException e) {
+//				helper.setTo(to);
+//			}
+//			helper.setSubject(subject);
+//			helper.setText(templateEngine.process(modelAndView.getViewName(), new Context(Locale.CHINA, modelAndView.getModel())), true);
+//		} catch (MessagingException e) {
+//			log.warn("生成发送给[" + to + "(" + personal + ")]的邮件[" + subject + "]时发生异常:" + e.getMessage());
+//			return;
+//		}
+//		try {
+//			mailSender.send(message);
+//		} catch (MailException e) {
+//			log.warn("投递发送给[" + to + "(" + personal + ")]的邮件[" + subject + "]时发生异常:" + e.getMessage());
+//		}
+//	}
+//
+//	@Async
+//	public void send(String text, String subject,String... to) {
+//		SimpleMailMessage message = new SimpleMailMessage();
+//		message.setFrom(this.from);
+//		message.setTo(to);
+//		message.setSubject(subject);
+//		message.setText(text);
+//		mailSender.send(message);
+//	}
+//}

+ 13 - 4
web/src/main/resources/SQLScripts/trees.sql

@@ -1,13 +1,13 @@
-create database if not exists seecoder;
-use seecoder;
+SET foreign_key_checks = 0;
+drop table if exists tree_nodes;
 create table tree_nodes
 (
     id           int auto_increment,
     title        varchar(24)                        not null,
     description  varchar(512)                       null,
-    type         int      default 0                 not null,
+    type         varchar(32)      default 0                 not null,
     priority     int      default 0                 null,
-    state        int      default 0                 not null,
+    state        varchar(32)      default 0                 not null,
     processor    varchar(64)                        not null,
     time_to_take int      default 0                 not null,
     start_time   datetime default CURRENT_TIMESTAMP null,
@@ -20,7 +20,11 @@ create table tree_nodes
 
 alter table tree_nodes
     add primary key (id);
+insert into tree_nodes(title, description, type, priority, state, processor, time_to_take, start_time, end_time, is_leaf, group_id) values ("test1","test1","REQUIREMENT",0,"PROCESSING","qinliu",10,"2021-1-1","2021-2-13",1,1);
+insert into tree_nodes(title, description, type, priority, state, processor, time_to_take, start_time, end_time, is_leaf, group_id) values ("test2","test2","REQUIREMENT",0,"PROCESSING","qinliu",10,"2021-1-2","2021-2-13",1,1);
+insert into tree_nodes(title, description, type, priority, state, processor, time_to_take, start_time, end_time, is_leaf, group_id) values ("test3","test3","REQUIREMENT",0,"PROCESSING","qinliu",10,"2021-1-3","2021-2-13",1,1);
 
+drop table if exists messages;
 create table messages
 (
     message_id   int auto_increment,
@@ -37,6 +41,7 @@ create table messages
 alter table messages
     add primary key (message_id);
 
+drop table if exists tree_sides;
 create table tree_sides
 (
     side_id   int auto_increment,
@@ -55,3 +60,7 @@ create table tree_sides
 alter table tree_sides
     add primary key (side_id);
 
+insert into tree_sides(parent_id, child_id) VALUES (1,2);
+insert into tree_sides(parent_id, child_id) VALUES (1,3);
+
+SET foreign_key_checks = 1;

+ 6 - 3
web/src/main/resources/application-wph.yml

@@ -1,9 +1,12 @@
-spring:
+mybatis:
+  #标注mybatis配置文件的位置
+  config-location: classpath:mybatis-config.xml
 
+spring:
   datasource:
-    url: jdbc:mysql://localhost:3306/seecoder?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false
+    url: jdbc:mysql://localhost:3306/seecoder?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false&allowMultiQueries=true
     username: root
-    password: xizhiheng921
+    password: 123456
   jpa:
     hibernate:
       ddl-auto: update

+ 9 - 0
web/src/main/resources/mybatis-config.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
+<configuration>
+
+    <typeHandlers>
+        <!--<typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="seecoder.devcloud.web.enums.Type"/>-->
+        <!--<typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="seecoder.devcloud.web.enums.State"/>-->
+    </typeHandlers>
+</configuration>

+ 0 - 21
web/src/main/resources/seecoder/devcloud/web/dataMapper/TreeNodeMapper.xml

@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
-<mapper namespace="seecoder.devcloud.web.dataMapper.TreeNodeMapper">
-
-    <resultMap id="treeNodeMap" type="seecoder.devcloud.web.po.TreeNode" >
-        <id column="id" property="id"/>
-        <result column="type" property="type" typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/>
-        <result column="state" property="state" typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/>
-
-    </resultMap>
-
-    <select id="findAllTreeNodes"  resultMap="treeNodeMap">
-        SELECT * FROM tree_nodes
-    </select>
-    <select id="findTreeNodeById"  resultMap="treeNodeMap">
-        SELECT * FROM tree_nodes where id = #{id}
-    </select>
-</mapper>

+ 71 - 0
web/src/test/java/seecoder/devcloud/web/dataMapper/TreeNodeMapperTest.java

@@ -0,0 +1,71 @@
+package seecoder.devcloud.web.dataMapper;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mybatis.spring.boot.test.autoconfigure.MybatisTest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+import seecoder.devcloud.web.enums.NodeStateEnum;
+import seecoder.devcloud.web.enums.NodeTypeEnum;
+import seecoder.devcloud.web.po.TreeNode;
+
+import java.util.List;
+
+@RunWith(SpringRunner.class)
+@MybatisTest
+@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
+public class TreeNodeMapperTest {
+    @Autowired
+    TreeNodeMapper treeNodeMapper;
+
+    @Test
+    public void listAllTreeNodesTest(){
+        List<TreeNode> treeNodes =  treeNodeMapper.listAllTreeNodes();
+        for (TreeNode treeNode:treeNodes){
+            System.out.println(treeNode);
+        }
+        assert treeNodes.size()!=0;
+    }
+
+    @Test
+    public void getTreeNodeByIdTest(){
+        TreeNode node = treeNodeMapper.getTreeNodeById(1);
+        System.out.println(node);
+        TreeNode node1 = new TreeNode(1,"test1","test1", NodeTypeEnum.REQUIREMENT,0, NodeStateEnum.PROCESSING,"qinliu",10,"2021-01-01 00:00:00","2021-02-13 00:00:00",true,1);
+        assert node.equals(node1);
+    }
+
+    @Test
+    public void listTreeNodesByGroupIdTest(){
+        List<TreeNode> treeNodes = treeNodeMapper.listTreeNodesByGroupId(1);
+        TreeNode node1 = new TreeNode(1,"test1","test1", NodeTypeEnum.REQUIREMENT,0, NodeStateEnum.PROCESSING,"qinliu",10,"2021-01-01 00:00:00","2021-02-13 00:00:00",true,1);
+        for(TreeNode treeNode:treeNodes){
+            if (treeNode.getId()==1){
+                assert treeNode.equals(node1);
+            }
+        }
+    }
+
+    @Test
+    public void insertTreeNodeTest(){
+        TreeNode node1 = new TreeNode(0,"testInsert","testInsert", NodeTypeEnum.REQUIREMENT,0, NodeStateEnum.PROCESSING,"qinliu",10,"2021-01-01 00:00:00","2021-02-13 00:00:00",true,1);
+        int res = treeNodeMapper.insertTreeNode(node1);
+        TreeNode node = treeNodeMapper.getTreeNodeById(node1.getId());
+        System.out.println(node);
+        System.out.println(node1);
+        assert res==1;
+        assert node.equals(node1);
+    }
+
+    @Test
+    public void updateTreeNodeTest(){
+        TreeNode node1 = new TreeNode(1,"update","update", NodeTypeEnum.TASK,1, NodeStateEnum.FINISHED,"qinliu667",20,"2021-01-10 00:00:00","2021-02-15 00:00:00",false,2);
+        treeNodeMapper.updateTreeNode(node1);
+        TreeNode node = treeNodeMapper.getTreeNodeById(1);
+        System.out.println(node);
+        assert node.equals(node1);
+    }
+
+}