From 0895cc612ab32b37603fde79de107312889534dd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=B1=A4=E4=BC=9F?= <tang@dyn3140-236.wlan.ic.ac.uk>
Date: Tue, 1 Nov 2022 16:45:26 +0000
Subject: [PATCH] add postgre support

---
 pom.xml                                       |  6 +-
 src/main/java/com/ic/er/Attribute.java        | 11 +---
 src/main/java/com/ic/er/ER.java               | 20 +++---
 src/main/java/com/ic/er/Entity.java           | 20 ++----
 src/main/java/com/ic/er/LayoutInfo.java       | 10 +--
 src/main/java/com/ic/er/Relationship.java     | 13 ++--
 src/main/java/com/ic/er/View.java             | 29 +++++----
 src/main/java/com/ic/er/common/Utils.java     | 17 -----
 .../java/com/ic/er/entity/RelationshipDO.java |  8 ---
 src/main/resources/jdbc-postgre.properties    |  4 ++
 src/main/resources/mybatis-config-postgre.xml | 33 ++++++++++
 src/main/resources/mybatis-config.xml         |  3 +
 src/test/java/com/ic/er/TestAttribute.java    | 15 +++--
 src/test/java/com/ic/er/TestCommon.java       |  5 ++
 src/test/java/com/ic/er/TestER.java           | 11 ++--
 src/test/java/com/ic/er/TestEntity.java       |  8 +--
 src/test/java/com/ic/er/TestRelationship.java | 26 +++++---
 src/test/java/com/ic/er/TestView.java         | 62 +++++--------------
 .../com/ic/er/mapper/attributeMapperTest.java |  9 +--
 .../com/ic/er/mapper/entityMapperTest.java    | 54 ++++------------
 .../com/ic/er/mapper/testGraphInfoMapper.java |  4 --
 .../com/ic/er/mapper/testRelationMapper.java  | 42 ++++---------
 .../java/com/ic/er/mapper/testViewMapper.java | 44 ++++---------
 23 files changed, 181 insertions(+), 273 deletions(-)
 delete mode 100644 src/main/java/com/ic/er/common/Utils.java
 create mode 100644 src/main/resources/jdbc-postgre.properties
 create mode 100644 src/main/resources/mybatis-config-postgre.xml
 create mode 100644 src/test/java/com/ic/er/TestCommon.java
 delete mode 100644 src/test/java/com/ic/er/mapper/testGraphInfoMapper.java

diff --git a/pom.xml b/pom.xml
index 11eaec4..7c670cc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,6 @@
             <artifactId>jackson-databind</artifactId>
             <version>2.13.3</version>
         </dependency>
-
         <dependency>
             <groupId>com.h2database</groupId>
             <artifactId>h2</artifactId>
@@ -53,6 +52,11 @@
             <artifactId>junit</artifactId>
             <version>4.12</version>
         </dependency>
+        <dependency>
+            <groupId>org.postgresql</groupId>
+            <artifactId>postgresql</artifactId>
+            <version>42.2.10</version>
+        </dependency>
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
diff --git a/src/main/java/com/ic/er/Attribute.java b/src/main/java/com/ic/er/Attribute.java
index 8b09ca6..abe3f68 100644
--- a/src/main/java/com/ic/er/Attribute.java
+++ b/src/main/java/com/ic/er/Attribute.java
@@ -1,11 +1,10 @@
 package com.ic.er;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.ic.er.exception.ERException;
+import com.ic.er.common.DataType;
 import com.ic.er.common.RelatedObjType;
 import com.ic.er.entity.AttributeDO;
-import com.ic.er.common.DataType;
-import com.ic.er.common.Utils;
+import com.ic.er.exception.ERException;
 import lombok.Getter;
 import org.apache.ibatis.exceptions.PersistenceException;
 
@@ -39,11 +38,7 @@ public class Attribute {
         this.gmtCreate = gmtCreate;
         this.gmtModified = gmtModified;
         if (this.ID == 0) {
-            if (ER.useDB) {
-                this.insertDB();
-            } else {
-                this.ID = Utils.generateID();
-            }
+            this.insertDB();
         }
         if (this.layoutInfo == null) {
             this.layoutInfo = new LayoutInfo(0L, this.ID, RelatedObjType.ATTRIBUTE, layoutX, layoutY, 0.0, 0.0);
diff --git a/src/main/java/com/ic/er/ER.java b/src/main/java/com/ic/er/ER.java
index db1936b..13167a3 100644
--- a/src/main/java/com/ic/er/ER.java
+++ b/src/main/java/com/ic/er/ER.java
@@ -2,8 +2,8 @@ package com.ic.er;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.ic.er.exception.ERException;
 import com.ic.er.dao.*;
+import com.ic.er.exception.ERException;
 import org.apache.ibatis.io.Resources;
 import org.apache.ibatis.session.SqlSession;
 import org.apache.ibatis.session.SqlSessionFactory;
@@ -15,19 +15,24 @@ import java.nio.charset.StandardCharsets;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.sql.Statement;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 public class ER {
     public static SqlSession sqlSession;
-    public static boolean useDB = false;
     public static AttributeMapper attributeMapper;
     public static EntityMapper entityMapper;
     public static RelationshipMapper relationshipMapper;
     public static ViewMapper viewMapper;
     public static LayoutInfoMapper layoutInfoMapper;
 
-    public static void initialize(boolean useDBLog) throws SQLException, IOException {
-        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
+    public static void initialize(boolean usePostgre) throws SQLException, IOException {
+        String XMLPath = "mybatis-config.xml";
+        if (usePostgre) {
+            XMLPath = "mybatis-config-postgre.xml";
+        }
+        InputStream is = Resources.getResourceAsStream(XMLPath);
         SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
         SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
         sqlSession = sqlSessionFactory.openSession(true);
@@ -36,8 +41,9 @@ public class ER {
         relationshipMapper = sqlSession.getMapper(RelationshipMapper.class);
         viewMapper = sqlSession.getMapper(ViewMapper.class);
         layoutInfoMapper = sqlSession.getMapper(LayoutInfoMapper.class);
-        createTables();
-        useDB = true;
+        if (!usePostgre) {
+            createTables();
+        }
     }
 
     private static void createTables() throws SQLException, IOException {
diff --git a/src/main/java/com/ic/er/Entity.java b/src/main/java/com/ic/er/Entity.java
index 68acc72..5cc337a 100644
--- a/src/main/java/com/ic/er/Entity.java
+++ b/src/main/java/com/ic/er/Entity.java
@@ -1,13 +1,11 @@
 package com.ic.er;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.ic.er.exception.ERException;
+import com.ic.er.common.DataType;
 import com.ic.er.common.RelatedObjType;
 import com.ic.er.entity.AttributeDO;
 import com.ic.er.entity.EntityDO;
-import com.ic.er.common.DataType;
-import com.ic.er.common.Utils;
+import com.ic.er.exception.ERException;
 import lombok.Getter;
 import org.apache.ibatis.exceptions.PersistenceException;
 
@@ -34,11 +32,7 @@ public class Entity {
         this.gmtCreate = gmtCreate;
         this.gmtModified = gmtModified;
         if (this.ID == 0) {
-            if (ER.useDB) {
-                this.insertDB();
-            } else {
-                this.ID = Utils.generateID();
-            }
+            this.insertDB();
         }
         if (this.layoutInfo == null) {
             this.layoutInfo = new LayoutInfo(0L, this.ID, RelatedObjType.ENTITY, layoutX, layoutY, 0.0, 0.0);
@@ -72,9 +66,7 @@ public class Entity {
 
     public boolean deleteAttribute(Attribute attribute) {
         this.attributeList.remove(attribute);
-        if (ER.useDB) {
-            attribute.deleteDB();
-        }
+        attribute.deleteDB();
         return false;
     }
 
@@ -101,9 +93,7 @@ public class Entity {
     public void updateInfo(String name) {
         if (name != null) {
             this.name = name;
-        }
-        if (name != null) {
-            List<Entity> entities = Entity.queryByEntity(new EntityDO(null, name, this.ID, null, null, null));
+            List<Entity> entities = Entity.queryByEntity(new EntityDO(null, name, this.viewID, null, null, null));
             if (entities.size() != 0 && !entities.get(0).getID().equals(this.ID)) {
                 throw new ERException(String.format("entity with name: %s already exists", name));
             }
diff --git a/src/main/java/com/ic/er/LayoutInfo.java b/src/main/java/com/ic/er/LayoutInfo.java
index 10f7963..2bd74c6 100644
--- a/src/main/java/com/ic/er/LayoutInfo.java
+++ b/src/main/java/com/ic/er/LayoutInfo.java
@@ -1,11 +1,9 @@
 package com.ic.er;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.ic.er.exception.ERException;
 import com.ic.er.common.RelatedObjType;
-import com.ic.er.common.Utils;
 import com.ic.er.entity.LayoutInfoDO;
+import com.ic.er.exception.ERException;
 import lombok.Getter;
 import org.apache.ibatis.exceptions.PersistenceException;
 
@@ -31,11 +29,7 @@ public class LayoutInfo {
         this.height = height;
         this.width = width;
         if (this.ID == 0) {
-            if (ER.useDB) {
-                this.insertDB();
-            } else {
-                this.ID = Utils.generateID();
-            }
+            this.insertDB();
         }
     }
 
diff --git a/src/main/java/com/ic/er/Relationship.java b/src/main/java/com/ic/er/Relationship.java
index 6e9aa49..ad2ed15 100644
--- a/src/main/java/com/ic/er/Relationship.java
+++ b/src/main/java/com/ic/er/Relationship.java
@@ -1,11 +1,12 @@
 package com.ic.er;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.ic.er.exception.ERException;
-import com.ic.er.common.*;
+import com.ic.er.common.Cardinality;
+import com.ic.er.common.RelatedObjType;
+import com.ic.er.common.RelationshipSerializer;
 import com.ic.er.entity.RelationshipDO;
+import com.ic.er.exception.ERException;
 import lombok.Getter;
 import org.apache.ibatis.exceptions.PersistenceException;
 
@@ -39,11 +40,7 @@ public class Relationship {
         this.gmtCreate = gmtCreate;
         this.gmtModified = gmtModified;
         if (this.ID == 0) {
-            if (ER.useDB) {
-                insertDB();
-            } else {
-                this.ID = Utils.generateID();
-            }
+            insertDB();
         }
         if (this.layoutInfo == null) {
             this.layoutInfo = new LayoutInfo(0L, this.ID, RelatedObjType.RELATIONSHIP, 0.0, 0.0, 0.0, 0.0);
diff --git a/src/main/java/com/ic/er/View.java b/src/main/java/com/ic/er/View.java
index a24c3a3..baf457f 100644
--- a/src/main/java/com/ic/er/View.java
+++ b/src/main/java/com/ic/er/View.java
@@ -2,16 +2,15 @@ package com.ic.er;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.ic.er.exception.ERException;
+import com.ic.er.common.Cardinality;
 import com.ic.er.common.ViewDeserializer;
 import com.ic.er.entity.EntityDO;
 import com.ic.er.entity.RelationshipDO;
 import com.ic.er.entity.ViewDO;
-import com.ic.er.common.Cardinality;
-import com.ic.er.common.Utils;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.ObjectWriter;
+import com.ic.er.exception.ERException;
 import lombok.Getter;
 import org.apache.ibatis.exceptions.PersistenceException;
 
@@ -40,11 +39,7 @@ public class View {
         this.gmtCreate = gmtCreate;
         this.gmtModified = gmtModified;
         if (this.ID == 0) {
-            if (ER.useDB) {
-                insertDB();
-            } else {
-                this.ID = Utils.generateID();
-            }
+            insertDB();
         }
     }
 
@@ -67,9 +62,15 @@ public class View {
 
     public void deleteEntity(Entity entity) {
         this.entityList.remove(entity);
-        if (ER.useDB) {
-            entity.deleteDB();
+        List<Relationship> relationships = Relationship.queryByRelationship(new RelationshipDO(null, null, this.ID, entity.getID(), null, null, null, null, null, null));
+        for (Relationship relationship : relationships) {
+            deleteRelationship(relationship);
         }
+        relationships = Relationship.queryByRelationship(new RelationshipDO(null, null, this.ID, null, entity.getID(), null, null, null, null, null));
+        for (Relationship relationship : relationships) {
+            deleteRelationship(relationship);
+        }
+        entity.deleteDB();
     }
 
     public Relationship createRelationship(String relationshipName, Entity firstEntity, Entity secondEntity,
@@ -105,9 +106,7 @@ public class View {
 
     public void deleteRelationship(Relationship relationship) {
         this.relationshipList.remove(relationship);
-        if (ER.useDB) {
-            relationship.deleteDB();
-        }
+        relationship.deleteDB();
     }
 
     private void insertDB() {
diff --git a/src/main/java/com/ic/er/common/Utils.java b/src/main/java/com/ic/er/common/Utils.java
deleted file mode 100644
index c4b1a0f..0000000
--- a/src/main/java/com/ic/er/common/Utils.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.ic.er.common;
-
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.SerializerProvider;
-
-import java.io.IOException;
-import java.util.UUID;
-
-public class Utils {
-    public static Long generateID() {
-        return UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE;
-    }
-}
-
-
diff --git a/src/main/java/com/ic/er/entity/RelationshipDO.java b/src/main/java/com/ic/er/entity/RelationshipDO.java
index 1deec13..46f2bb0 100644
--- a/src/main/java/com/ic/er/entity/RelationshipDO.java
+++ b/src/main/java/com/ic/er/entity/RelationshipDO.java
@@ -12,22 +12,14 @@ import java.util.Date;
 @NoArgsConstructor
 public class RelationshipDO {
     private Long ID;
-
     private String name;
-
     private Long viewID;
-
     private Long firstEntityID;
-
     private Long secondEntityID;
-
     private Cardinality firstCardinality;
     private Cardinality secondCardinality;
-
     private Integer isDelete;
-
     private Date gmtCreate;
-
     private Date gmtModified;
 
     public RelationshipDO(Long ID) {
diff --git a/src/main/resources/jdbc-postgre.properties b/src/main/resources/jdbc-postgre.properties
new file mode 100644
index 0000000..22a722a
--- /dev/null
+++ b/src/main/resources/jdbc-postgre.properties
@@ -0,0 +1,4 @@
+jdbc.driverClassName=org.postgresql.Driver
+jdbc.url=jdbc:postgresql://db.doc.ic.ac.uk:5432/wh722
+jdbc.username=wh722
+jdbc.password=4jC@A3528>0N6
diff --git a/src/main/resources/mybatis-config-postgre.xml b/src/main/resources/mybatis-config-postgre.xml
new file mode 100644
index 0000000..1f2e32f
--- /dev/null
+++ b/src/main/resources/mybatis-config-postgre.xml
@@ -0,0 +1,33 @@
+<?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>
+    <properties resource='jdbc-postgre.properties'/>
+    <settings>
+        <setting name="logImpl" value="LOG4J2"/>
+    </settings>
+    <typeHandlers>
+        <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler"
+                     javaType="com.ic.er.common.RelatedObjType"/>
+        <typeHandler handler="com.ic.er.common.CardinalityEnumTypeHandler"/>
+    </typeHandlers>
+    <environments default='development'>
+        <environment id='development'>
+            <transactionManager type='JDBC'/>
+            <dataSource type='POOLED'>
+                <property name='driver' value='${jdbc.driverClassName}'/>
+                <property name='url' value='${jdbc.url}'/>
+                <property name='username' value='${jdbc.username}'/>
+                <property name='password' value='${jdbc.password}'/>
+            </dataSource>
+        </environment>
+    </environments>
+    <mappers>
+        <mapper resource='mapper/AttributeMapper.xml'/>
+        <mapper resource='mapper/EntityMapper.xml'/>
+        <mapper resource='mapper/RelationshipMapper.xml'/>
+        <mapper resource='mapper/ViewMapper.xml'/>
+        <mapper resource='mapper/LayoutInfoMapper.xml'/>
+    </mappers>
+</configuration>
\ No newline at end of file
diff --git a/src/main/resources/mybatis-config.xml b/src/main/resources/mybatis-config.xml
index c672999..e5c2e9a 100644
--- a/src/main/resources/mybatis-config.xml
+++ b/src/main/resources/mybatis-config.xml
@@ -4,6 +4,9 @@
         'http://mybatis.org/dtd/mybatis-3-config.dtd'>
 <configuration>
     <properties resource='jdbc.properties'/>
+    <settings>
+        <setting name="logImpl" value="LOG4J2"/>
+    </settings>
     <typeHandlers>
         <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler"
                      javaType="com.ic.er.common.RelatedObjType"/>
diff --git a/src/test/java/com/ic/er/TestAttribute.java b/src/test/java/com/ic/er/TestAttribute.java
index f9ccd8a..a4d98a5 100644
--- a/src/test/java/com/ic/er/TestAttribute.java
+++ b/src/test/java/com/ic/er/TestAttribute.java
@@ -1,16 +1,16 @@
 package com.ic.er;
 
-import com.ic.er.exception.ERException;
-import com.ic.er.entity.AttributeDO;
 import com.ic.er.common.DataType;
+import com.ic.er.entity.AttributeDO;
+import com.ic.er.exception.ERException;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
-import static org.junit.jupiter.api.Assertions.assertThrows;
-
 import java.util.List;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 public class TestAttribute {
 
     private View testView;
@@ -18,7 +18,7 @@ public class TestAttribute {
 
     @Before
     public void init() throws Exception {
-        ER.initialize(true);
+        ER.initialize(TestCommon.usePostgre);
         testView = ER.createView("testView", "wt22");
         testEntity = testView.addEntity("teacher");
     }
@@ -66,14 +66,13 @@ public class TestAttribute {
         Assert.assertNotNull(attribute);
     }
 
-    @Test(expected = ERException.class)
+    @Test
     public void deleteByIDTest() {
         Attribute a1 = testEntity.addAttribute("teacher_id", DataType.VARCHAR, true, false);
 
         // delete
         a1.deleteDB();
 
-        Attribute attribute = Attribute.queryByID(a1.getID());
-        Assert.assertNull(attribute);
+        assertThrows(ERException.class, () -> Attribute.queryByID(a1.getID()));
     }
 }
diff --git a/src/test/java/com/ic/er/TestCommon.java b/src/test/java/com/ic/er/TestCommon.java
new file mode 100644
index 0000000..f58fe9e
--- /dev/null
+++ b/src/test/java/com/ic/er/TestCommon.java
@@ -0,0 +1,5 @@
+package com.ic.er;
+
+public class TestCommon {
+    public static final boolean usePostgre = false;
+}
diff --git a/src/test/java/com/ic/er/TestER.java b/src/test/java/com/ic/er/TestER.java
index 7b7aaa1..a256fec 100644
--- a/src/test/java/com/ic/er/TestER.java
+++ b/src/test/java/com/ic/er/TestER.java
@@ -2,6 +2,7 @@ package com.ic.er;
 
 import com.ic.er.common.Cardinality;
 import com.ic.er.common.DataType;
+import com.ic.er.exception.ERException;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -9,25 +10,27 @@ import org.junit.Test;
 import java.io.FileWriter;
 import java.io.IOException;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 public class TestER {
 
     @Before
     public void setUp() throws Exception {
-        ER.initialize(true);
+        ER.initialize(TestCommon.usePostgre);
     }
 
     @Test
     public void createViewTest() {
         View testView = ER.createView("testView", "wt22");
-        Assert.assertEquals(ER.queryAllView().size(), 1);
+        Assert.assertNotNull(ER.queryViewByID(testView.getID()));
     }
 
     @Test
     public void deleteViewTest() {
         View testView = ER.createView("testView", "wt22");
-        Assert.assertEquals(ER.queryAllView().size(), 1);
+        Assert.assertNotEquals(ER.queryAllView().size(), 0);
         ER.deleteView(testView);
-        Assert.assertEquals(ER.queryAllView().size(), 0);
+        assertThrows(ERException.class, () -> ER.queryViewByID(testView.getID()));
     }
 
     @Test
diff --git a/src/test/java/com/ic/er/TestEntity.java b/src/test/java/com/ic/er/TestEntity.java
index 99f43ab..f4b7d89 100644
--- a/src/test/java/com/ic/er/TestEntity.java
+++ b/src/test/java/com/ic/er/TestEntity.java
@@ -1,8 +1,8 @@
 package com.ic.er;
 
 
-import com.ic.er.exception.ERException;
 import com.ic.er.common.DataType;
+import com.ic.er.exception.ERException;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -15,7 +15,7 @@ public class TestEntity {
 
     @Before
     public void init() throws Exception {
-        ER.initialize(true);
+        ER.initialize(TestCommon.usePostgre);
         testView = ER.createView("testView", "wt22");
     }
 
@@ -58,7 +58,7 @@ public class TestEntity {
         assertThrows(ERException.class, () -> teacher.updateInfo("student"));
     }
 
-    @Test(expected = ERException.class)
+    @Test
     public void attributeTest() {
         Entity teacher = testView.addEntity("teacher");
         Attribute teacherID = teacher.addAttribute("teacher_id", DataType.INT, true, false);
@@ -68,6 +68,6 @@ public class TestEntity {
 
         teacher.deleteAttribute(teacherID);
         Assert.assertEquals(teacher.getAttributeList().size(), 0);
-        Assert.assertNull(Attribute.queryByID(teacherID.getID()));
+        assertThrows(ERException.class, () -> Attribute.queryByID(teacherID.getID()));
     }
 }
\ No newline at end of file
diff --git a/src/test/java/com/ic/er/TestRelationship.java b/src/test/java/com/ic/er/TestRelationship.java
index d60c516..cabbe4a 100644
--- a/src/test/java/com/ic/er/TestRelationship.java
+++ b/src/test/java/com/ic/er/TestRelationship.java
@@ -1,16 +1,16 @@
 package com.ic.er;
 
-import com.ic.er.exception.ERException;
-import com.ic.er.entity.RelationshipDO;
 import com.ic.er.common.Cardinality;
+import com.ic.er.entity.RelationshipDO;
+import com.ic.er.exception.ERException;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
-import static org.junit.jupiter.api.Assertions.assertThrows;
-
 import java.util.List;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 public class TestRelationship {
 
     private View testView;
@@ -23,7 +23,7 @@ public class TestRelationship {
 
     @Before
     public void init() throws Exception {
-        ER.initialize(true);
+        ER.initialize(TestCommon.usePostgre);
         testView = ER.createView("testView", "wt22");
         secondView = ER.createView("secondView", "wt22");
         teacher = testView.addEntity("teacher");
@@ -42,18 +42,24 @@ public class TestRelationship {
 
         Relationship relationship = testView.createRelationship("teaches", teacher, student, Cardinality.ZeroToMany, Cardinality.ZeroToMany);
         Assert.assertNotNull(relationship);
-        Assert.assertEquals(relationship.getID(), Long.valueOf(1L));
 
         assertThrows(ERException.class, () -> testView.createRelationship("teaches", teacher, student, Cardinality.ZeroToMany, Cardinality.ZeroToMany));
         assertThrows(ERException.class, () -> testView.createRelationship("teaches", student, teacher, Cardinality.ZeroToMany, Cardinality.ZeroToMany));
     }
 
-    @Test(expected = ERException.class)
+    @Test
     public void deleteRelationshipTest() {
+        Relationship testEntityCascadeDelete = testView.createRelationship("teaches", teacher, student, Cardinality.ZeroToMany, Cardinality.ZeroToMany);
+        Assert.assertNotNull(testEntityCascadeDelete);
+        testView.deleteEntity(teacher);
+        assertThrows(ERException.class, () -> Entity.queryByID(teacher.getID()));
+        assertThrows(ERException.class, () -> Relationship.queryByID(testEntityCascadeDelete.getID()));
+
+        teacher = testView.addEntity("teacher");
         Relationship relationship = testView.createRelationship("teaches", teacher, student, Cardinality.ZeroToMany, Cardinality.ZeroToMany);
         Assert.assertNotNull(relationship);
         relationship.deleteDB();
-        Relationship relationship1 = Relationship.queryByID(1L);
+        assertThrows(ERException.class, () -> Relationship.queryByID(relationship.getID()));
     }
 
     @Test
@@ -65,7 +71,7 @@ public class TestRelationship {
         Cardinality newCardi = Cardinality.OneToMany;
 
         relationship.updateInfo(newName, null, null, newCardi, newCardi);
-        Relationship relationship1 = Relationship.queryByID(1L);
+        Relationship relationship1 = Relationship.queryByID(relationship.getID());
         Assert.assertNotNull(relationship1);
         Assert.assertEquals(relationship1.getName(), newName);
         Assert.assertEquals(relationship1.getFirstCardinality(), newCardi);
@@ -81,7 +87,7 @@ public class TestRelationship {
         Assert.assertNotNull(relationship);
         assertThrows(ERException.class, () -> testView.createRelationship("teaches2", teacher, student, Cardinality.ZeroToMany, Cardinality.ZeroToMany));
 
-        Relationship relationship1 = Relationship.queryByID(1L);
+        Relationship relationship1 = Relationship.queryByID(relationship.getID());
         Assert.assertNotNull(relationship1);
         List<Relationship> results = Relationship.queryByRelationship(new RelationshipDO(relationship.getFirstEntity().getID(), relationship.getSecondEntity().getID()));
         Assert.assertEquals(results.size(), 1);
diff --git a/src/test/java/com/ic/er/TestView.java b/src/test/java/com/ic/er/TestView.java
index e192ccc..dd3db38 100644
--- a/src/test/java/com/ic/er/TestView.java
+++ b/src/test/java/com/ic/er/TestView.java
@@ -1,19 +1,21 @@
 package com.ic.er;
 
-import com.ic.er.exception.ERException;
 import com.ic.er.common.Cardinality;
 import com.ic.er.common.DataType;
+import com.ic.er.exception.ERException;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
 import java.util.List;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 public class TestView {
 
     @Before
     public void init() throws Exception {
-        ER.initialize(true);
+        ER.initialize(TestCommon.usePostgre);
     }
 
     @Test
@@ -44,23 +46,23 @@ public class TestView {
         String newViewName = "new view name";
         firstView.updateInfo(newViewName);
 
-        View newView = View.queryByID(1L);
+        View newView = View.queryByID(firstView.getID());
         Assert.assertEquals(newView.getName(), newViewName);
     }
 
-    @Test(expected = ERException.class)
+    @Test
     public void deleteViewTest() {
-        View firstView = ER.createView("first view", "tw");
-        firstView = View.queryByID(1L);
-        Assert.assertNotNull(firstView);
+        View testDeleteView = ER.createView("first view", "tw");
+        testDeleteView = View.queryByID(testDeleteView.getID());
+        Assert.assertNotNull(testDeleteView);
 
-        firstView.deleteDB();
+        testDeleteView.deleteDB();
 
-        View newView = View.queryByID(1L);
-        Assert.assertNull(newView);
+        View finalTestDeleteView = testDeleteView;
+        assertThrows(ERException.class, () -> View.queryByID(finalTestDeleteView.getID()));
     }
 
-    @Test(expected = ERException.class)
+    @Test
     public void deleteEntityTest() {
         View firstView = ER.createView("first view", "tw");
         Entity firstEntity = firstView.addEntity("teacher");
@@ -68,47 +70,15 @@ public class TestView {
 
         firstView.deleteEntity(firstEntity);
 
-        View newView = View.queryByID(1L);
+        View newView = View.queryByID(firstView.getID());
         Assert.assertEquals(newView.getEntityList().size(), 0);
-        Assert.assertNull(Entity.queryByID(firstEntity.getID()));
+        assertThrows(ERException.class, () -> Entity.queryByID(firstEntity.getID()));
     }
 
     @Test
     public void queryViewTest() {
         View firstView = ER.createView("first view", "tw");
-        View secondView = ER.createView("first view", "tw");
-
         List<View> views = View.queryAll();
-        Assert.assertEquals(views.size(), 2);
-
-        ER.useDB = false;
-        views = View.queryAll();
-        Assert.assertEquals(views.size(), 2);
-    }
-
-    @Test(expected = ERException.class)
-    public void relationshipTest() {
-        View firstView = ER.createView("first view", "tw");
-
-        Entity teacher = firstView.addEntity("teacher");
-        teacher.addAttribute("teacher_id", DataType.VARCHAR, true, false);
-        teacher.addAttribute("name", DataType.VARCHAR, false, false);
-        teacher.addAttribute("age", DataType.INT, false, false);
-
-        Entity student = firstView.addEntity("student");
-        student.addAttribute("student_id", DataType.VARCHAR, true, false);
-        student.addAttribute("name", DataType.VARCHAR, false, false);
-        student.addAttribute("grade", DataType.INT, false, false);
-
-        Relationship ts = firstView.createRelationship("teaches", teacher, student, Cardinality.ZeroToMany, Cardinality.ZeroToMany);
-        Assert.assertNotNull(ts);
-
-        ts.updateInfo("new relationship name", null, null, null, null);
-        Assert.assertEquals(Relationship.queryByID(ts.getID()).getName(), "new relationship name");
-
-
-        firstView.deleteRelationship(ts);
-        Assert.assertEquals(firstView.getRelationshipList().size(), 0);
-        Assert.assertNull(Relationship.queryByID(ts.getID()));
+        Assert.assertNotEquals(views.size(), 0);
     }
 }
diff --git a/src/test/java/com/ic/er/mapper/attributeMapperTest.java b/src/test/java/com/ic/er/mapper/attributeMapperTest.java
index dd3ba13..f0a936f 100644
--- a/src/test/java/com/ic/er/mapper/attributeMapperTest.java
+++ b/src/test/java/com/ic/er/mapper/attributeMapperTest.java
@@ -1,14 +1,14 @@
 package com.ic.er.mapper;
 
 import com.ic.er.ER;
-import com.ic.er.entity.AttributeDO;
+import com.ic.er.TestCommon;
 import com.ic.er.common.DataType;
+import com.ic.er.entity.AttributeDO;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
 import java.util.Date;
-
 import java.util.List;
 
 
@@ -19,7 +19,7 @@ import java.util.List;
 public class attributeMapperTest {
     @Before
     public void init() throws Exception {
-        ER.initialize(true);
+        ER.initialize(TestCommon.usePostgre);
     }
 
     @Test
@@ -50,9 +50,6 @@ public class attributeMapperTest {
         int ret = ER.attributeMapper.insert(attributeDO);
         int ret2 = ER.attributeMapper.insert(attributeDO2);
         int ret3 = ER.attributeMapper.insert(attributeDO3);
-        System.out.printf("ret: %d, ID: %d\n", ret, attributeDO.getID());
-        System.out.printf("ret2: %d, ID: %d\n", ret2, attributeDO2.getID());
-        System.out.printf("ret3: %d, ID: %d\n", ret3, attributeDO3.getID());
     }
 
     @Test
diff --git a/src/test/java/com/ic/er/mapper/entityMapperTest.java b/src/test/java/com/ic/er/mapper/entityMapperTest.java
index 651b78f..bd9ed88 100644
--- a/src/test/java/com/ic/er/mapper/entityMapperTest.java
+++ b/src/test/java/com/ic/er/mapper/entityMapperTest.java
@@ -1,38 +1,23 @@
 package com.ic.er.mapper;
 
+import com.ic.er.ER;
+import com.ic.er.TestCommon;
 import com.ic.er.entity.EntityDO;
-import com.ic.er.dao.EntityMapper;
-import org.apache.ibatis.io.Resources;
-import org.apache.ibatis.session.SqlSession;
-import org.apache.ibatis.session.SqlSessionFactory;
-import org.apache.ibatis.session.SqlSessionFactoryBuilder;
-import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
-import java.util.Date;
-
 import java.io.IOException;
-import java.io.InputStream;
-import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.Date;
 
 /**
  * @author wendi
  * @data 15/10/2022
  */
 public class entityMapperTest {
-    public static SqlSession sqlSession;
-    public static Connection connection;
-    public static EntityMapper entityMapper;
-
     @Before
-    public void init() throws IOException {
-        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
-        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
-        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
-        sqlSession = sqlSessionFactory.openSession(true);
-        connection = sqlSession.getConnection();
-        System.out.println(connection);
+    public void init() throws IOException, SQLException {
+        ER.initialize(TestCommon.usePostgre);
     }
 
     @Test
@@ -47,9 +32,7 @@ public class entityMapperTest {
 
         EntityDO entity = new EntityDO(id, name, viewID, isDelete, create, modify);
 
-        Assert.assertNotNull(sqlSession);
-        EntityMapper entityMapper = sqlSession.getMapper(EntityMapper.class);
-        entityMapper.insert(entity);
+        ER.entityMapper.insert(entity);
     }
 
     @Test
@@ -64,9 +47,7 @@ public class entityMapperTest {
 
         EntityDO entity = new EntityDO(id, name, viewID, isDelete, create, modify);
 
-        Assert.assertNotNull(sqlSession);
-        EntityMapper entityMapper = sqlSession.getMapper(EntityMapper.class);
-        entityMapper.insert(entity);
+        ER.entityMapper.insert(entity);
     }
 
     @Test
@@ -81,19 +62,14 @@ public class entityMapperTest {
 
         EntityDO entity = new EntityDO(id, name, viewID, isDelete, create, modify);
 
-
-        Assert.assertNotNull(sqlSession);
-        EntityMapper entityMapper = sqlSession.getMapper(EntityMapper.class);
-        entityMapper.selectByEntity(entity);
+        ER.entityMapper.selectByEntity(entity);
     }
 
     @Test
     public void selectByIDTest() {
         Long id = Long.valueOf(123);
 
-        Assert.assertNotNull(sqlSession);
-        EntityMapper entityMapper = sqlSession.getMapper(EntityMapper.class);
-        entityMapper.selectByID(id);
+        ER.entityMapper.selectByID(id);
     }
 
 
@@ -109,9 +85,7 @@ public class entityMapperTest {
 
         EntityDO entityDo = new EntityDO(id, name, viewID, isDelete, create, modify);
 
-        Assert.assertNotNull(sqlSession);
-        EntityMapper entityMapper = sqlSession.getMapper(EntityMapper.class);
-        entityMapper.updateByID(entityDo);
+        ER.entityMapper.updateByID(entityDo);
     }
 
     @Test
@@ -119,10 +93,6 @@ public class entityMapperTest {
 
         long id = Long.valueOf(123);
 
-        Assert.assertNotNull(sqlSession);
-        EntityMapper entityMapper = sqlSession.getMapper(EntityMapper.class);
-        entityMapper.deleteByID(id);
+        ER.entityMapper.deleteByID(id);
     }
-
-
 }
diff --git a/src/test/java/com/ic/er/mapper/testGraphInfoMapper.java b/src/test/java/com/ic/er/mapper/testGraphInfoMapper.java
deleted file mode 100644
index f62fdb6..0000000
--- a/src/test/java/com/ic/er/mapper/testGraphInfoMapper.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.ic.er.mapper;
-
-public class testGraphInfoMapper {
-}
diff --git a/src/test/java/com/ic/er/mapper/testRelationMapper.java b/src/test/java/com/ic/er/mapper/testRelationMapper.java
index 0f1360e..9a99f90 100644
--- a/src/test/java/com/ic/er/mapper/testRelationMapper.java
+++ b/src/test/java/com/ic/er/mapper/testRelationMapper.java
@@ -1,76 +1,58 @@
 package com.ic.er.mapper;
 
-import com.ic.er.entity.RelationshipDO;
+import com.ic.er.ER;
+import com.ic.er.TestCommon;
 import com.ic.er.common.Cardinality;
-import com.ic.er.dao.RelationshipMapper;
-import org.apache.ibatis.io.Resources;
-import org.apache.ibatis.session.SqlSession;
-import org.apache.ibatis.session.SqlSessionFactory;
-import org.apache.ibatis.session.SqlSessionFactoryBuilder;
+import com.ic.er.entity.RelationshipDO;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
 import java.io.IOException;
-import java.io.InputStream;
-import java.sql.Connection;
+import java.sql.SQLException;
 import java.util.Date;
 import java.util.List;
 
 public class testRelationMapper {
-    public static SqlSession sqlSession;
-    public static Connection connection;
-    public static RelationshipMapper relationMapper;
-
     @Before
-    public void init() throws IOException {
-        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
-        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
-        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
-        sqlSession = sqlSessionFactory.openSession(true);
-        connection = sqlSession.getConnection();
-        System.out.println(connection);
-        relationMapper = sqlSession.getMapper(RelationshipMapper.class);
+    public void init() throws IOException, SQLException {
+        ER.initialize(TestCommon.usePostgre);
     }
 
+
     @Test
     public void testQueryRelation() {
-        Assert.assertNotNull(sqlSession);
-        RelationshipDO relationshipDO = relationMapper.selectByID(Long.valueOf(3));
+        RelationshipDO relationshipDO = ER.relationshipMapper.selectByID(Long.valueOf(3));
         System.out.println(relationshipDO);
     }
 
     @Test
     public void testQueryRelationByRelation() {
-        Assert.assertNotNull(sqlSession);
         RelationshipDO relationshipDO = new RelationshipDO(null, "relation4",
                 null, null, null,
                 Cardinality.ZeroToMany, Cardinality.ZeroToMany, 0, null, null);
-        List<RelationshipDO> res = relationMapper.selectByRelationship(relationshipDO);
+        List<RelationshipDO> res = ER.relationshipMapper.selectByRelationship(relationshipDO);
         System.out.println(res);
     }
 
     @Test
     public void testCreateRelation() {
-        Assert.assertNotNull(sqlSession);
         RelationshipDO relationshipDO = new RelationshipDO(Long.valueOf(11), "relation4",
                 Long.valueOf(4), Long.valueOf(4), Long.valueOf(3),
                 Cardinality.ZeroToMany, Cardinality.ZeroToMany, 0, new Date(), new Date());
-        Assert.assertEquals(relationMapper.insert(relationshipDO), 1);
+        Assert.assertEquals(ER.relationshipMapper.insert(relationshipDO), 1);
     }
 
     @Test
     public void testDeleteRelation() {
-        Assert.assertNotNull(sqlSession);
-        Assert.assertEquals(relationMapper.deleteByID(Long.valueOf(11)), 1);
+        Assert.assertEquals(ER.relationshipMapper.deleteByID(Long.valueOf(11)), 1);
     }
 
     @Test
     public void testUpdateRelation() {
-        Assert.assertNotNull(sqlSession);
         RelationshipDO relationshipDO = new RelationshipDO(Long.valueOf(4), "relation4update",
                 Long.valueOf(3), Long.valueOf(4), Long.valueOf(3),
                 Cardinality.ZeroToMany, Cardinality.ZeroToMany, 0, new Date(), new Date());
-        Assert.assertEquals(relationMapper.updateByID(relationshipDO), 1);
+        Assert.assertEquals(ER.relationshipMapper.updateByID(relationshipDO), 1);
     }
 }
diff --git a/src/test/java/com/ic/er/mapper/testViewMapper.java b/src/test/java/com/ic/er/mapper/testViewMapper.java
index c34ad7c..9d93d17 100644
--- a/src/test/java/com/ic/er/mapper/testViewMapper.java
+++ b/src/test/java/com/ic/er/mapper/testViewMapper.java
@@ -1,78 +1,58 @@
 package com.ic.er.mapper;
 
+import com.ic.er.ER;
+import com.ic.er.TestCommon;
 import com.ic.er.entity.ViewDO;
-import com.ic.er.dao.ViewMapper;
-import org.apache.ibatis.io.Resources;
-import org.apache.ibatis.session.SqlSession;
-import org.apache.ibatis.session.SqlSessionFactory;
-import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
 import java.io.IOException;
-import java.io.InputStream;
-import java.sql.Connection;
+import java.sql.SQLException;
 import java.util.Date;
 import java.util.List;
 
 public class testViewMapper {
-    public static SqlSession sqlSession;
-    public static Connection connection;
-    public static ViewMapper viewMapper;
-
     @Before
-    public void init() throws IOException {
-        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
-        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
-        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
-        sqlSession = sqlSessionFactory.openSession(true);
-        connection = sqlSession.getConnection();
-        System.out.println(connection);
-        viewMapper = sqlSession.getMapper(ViewMapper.class);
+    public void init() throws IOException, SQLException {
+        ER.initialize(TestCommon.usePostgre);
     }
 
+
     @Test
     public void testQueryAllViews() {
-        Assert.assertNotNull(sqlSession);
-        List<ViewDO> viewDOList = viewMapper.selectAll();
+        List<ViewDO> viewDOList = ER.viewMapper.selectAll();
         Assert.assertEquals(1, viewDOList.size());
     }
 
     @Test
     public void testQueryByID() {
-        Assert.assertNotNull(sqlSession);
-        ViewDO viewDO = viewMapper.selectByID(Long.valueOf(3));
+        ViewDO viewDO = ER.viewMapper.selectByID(Long.valueOf(3));
         System.out.println(viewDO);
     }
 
     @Test
     public void testCreateView() {
-        Assert.assertNotNull(sqlSession);
         ViewDO viewDO = new ViewDO(Long.valueOf(2), "view3", "creator3", Long.valueOf(1), 0, new Date(), new Date());
-        Assert.assertEquals(viewMapper.insert(viewDO), 1);
+        Assert.assertEquals(ER.viewMapper.insert(viewDO), 1);
     }
 
     @Test
     public void testDeleteView() {
-        Assert.assertNotNull(sqlSession);
-        Assert.assertEquals(viewMapper.deleteByID(Long.valueOf(2)), 1);
+        Assert.assertEquals(ER.viewMapper.deleteByID(Long.valueOf(2)), 1);
     }
 
     @Test
     public void testQueryView() {
-        Assert.assertNotNull(sqlSession);
         ViewDO viewDO = new ViewDO(null, "view1", null, null, 0, null, null);
-        List<ViewDO> res = viewMapper.selectByView(viewDO);
+        List<ViewDO> res = ER.viewMapper.selectByView(viewDO);
         System.out.println(res);
 
     }
 
     @Test
     public void testUpdateView() {
-        Assert.assertNotNull(sqlSession);
         ViewDO viewDO = new ViewDO(Long.valueOf(3), "view3update", "creator3update", Long.valueOf(1), 0, new Date(), new Date());
-        Assert.assertEquals(viewMapper.updateByID(viewDO), 1);
+        Assert.assertEquals(ER.viewMapper.updateByID(viewDO), 1);
     }
-
 }
-- 
GitLab